我希望在使用golang BigQuery库时能够指定maxResults。但不清楚如何做到这一点。我在文档中没有看到它是一个选项,我浏览了源代码试图找到它,但我只看到一些零星的用法,似乎与查询无关。有没有办法解决这个问题?
cgh8pdjw1#
我认为SDK中没有实现的方法,但在查看了一下之后,我发现了以下方法:请求您可以尝试执行指定参数的HTTP GET(您可以在此处找到使用参数的示例:查询参数)
42fyovps2#
默认情况下,google API迭代器会为你管理页面大小,RowIterator默认返回一行,内部由获取的页面支持,这些页面依赖于后端来选择合适的大小。但是,如果要指定固定的最大页面大小,可以使用google.golang.org/api/iterator包在指定特定大小的同时按页面进行迭代。在本例中,该大小对应于BigQuery的查询API的maxResults。有关高级迭代器用法的更多一般信息,请参见https://github.com/googleapis/google-cloud-go/wiki/Iterator-Guidelines。下面是bigquery中RowIterator的一个快速测试,它执行一个查询,返回10月份的每一天的一行,并按页迭代:
google.golang.org/api/iterator
maxResults
func TestQueryPager(t *testing.T) { ctx := context.Background() pageSize := 5 client, err := bigquery.NewClient(ctx, "your-project-id here") if err != nil { t.Fatal(err) } defer client.Close() q := client.Query("SELECT * FROM UNNEST(GENERATE_DATE_ARRAY('2022-10-01','2022-10-31', INTERVAL 1 DAY)) as d") it, err := q.Read(ctx) if err != nil { t.Fatalf("query failure: %v", err) } pager := iterator.NewPager(it, pageSize, "") var fetchedPages int for { var rows [][]bigquery.Value nextToken, err := pager.NextPage(&rows) if err != nil { t.Fatalf("NextPage: %v", err) } fetchedPages = fetchedPages + 1 if len(rows) > pageSize { t.Errorf("page size exceeded, got %d want %d", len(rows), pageSize) } t.Logf("(next token %s) page size: %d", nextToken, len(rows)) if nextToken == "" { break } } wantPages := 7 if fetchedPages != wantPages { t.Fatalf("fetched %d pages, wanted %d pages", fetchedPages, wantPages) } }
2条答案
按热度按时间cgh8pdjw1#
我认为SDK中没有实现的方法,但在查看了一下之后,我发现了以下方法:请求
您可以尝试执行指定参数的HTTP GET(您可以在此处找到使用参数的示例:查询参数)
42fyovps2#
默认情况下,google API迭代器会为你管理页面大小,RowIterator默认返回一行,内部由获取的页面支持,这些页面依赖于后端来选择合适的大小。
但是,如果要指定固定的最大页面大小,可以使用
google.golang.org/api/iterator
包在指定特定大小的同时按页面进行迭代。在本例中,该大小对应于BigQuery的查询API的maxResults
。有关高级迭代器用法的更多一般信息,请参见https://github.com/googleapis/google-cloud-go/wiki/Iterator-Guidelines。
下面是bigquery中RowIterator的一个快速测试,它执行一个查询,返回10月份的每一天的一行,并按页迭代: