Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在每个请求中将bigquery响应分为10000个部分?_Javascript_Node.js_Google Bigquery - Fatal编程技术网

Javascript 如何在每个请求中将bigquery响应分为10000个部分?

Javascript 如何在每个请求中将bigquery响应分为10000个部分?,javascript,node.js,google-bigquery,Javascript,Node.js,Google Bigquery,我有bigquery“选择visitorId,totals.visions FROM[12123333.ga_sessions\u 20160602]”,它在一个请求中返回500k行 但是我想在一个请求中将数据从1到10000行进行分段,在下一个请求中,下一个10001到20000行将被提取,以此类推 提前感谢。一个选项是将查询结果写入目标表,然后使用API以分页方式从该表中检索数据,可以使用maxResults和pageToken逐页检索,也可以使用maxResults和startIndex检

我有bigquery
“选择visitorId,totals.visions FROM[12123333.ga_sessions\u 20160602]”
,它在一个请求中返回500k行

但是我想在一个请求中将数据从1到10000行进行分段,在下一个请求中,下一个10001到20000行将被提取,以此类推


提前感谢。

一个选项是将查询结果写入目标表,然后使用API以分页方式从该表中检索数据,可以使用
maxResults
pageToken
逐页检索,也可以使用
maxResults
startIndex
检索指定的行集

另一个选项是将行号添加到查询中(如下所示)

仍然将结果写入目标临时表,然后使用新的
num
字段从该表中检索数据,例如分组为
num%10000={group_number}
。或者您可以使用
INTEGER(num/10000)={group\u number}
——您更喜欢的任何选项

SELECT visitorId , totals.visits 
FROM tempTable
WHERE num % 10000 = 0 
下一步将与

WHERE num % 10000 = 1 
等等

请注意: 第二个选项使用昂贵的(执行方面-而非计费方面)ROW_NUMBER()函数,该函数要求每个分区的所有数据(在本例中,只有一个分区-所有行)位于同一节点中,因此取决于它可以工作或不工作的行数。对于仅包含500K行的特定示例,它将起作用,但如果将其扩展到包含数百万行的表,则可能不会起作用(取决于每行中输出的数据量和行数)

还有一个注意事项:
-在第一个选项中,当您生成结果并将其保存到临时表中时,您只需支付一次。然后-从某种意义上说,Tabledata.list API是免费的,因为它本身不使用BigQuery查询,而只是直接从底层数据读取数据。
-在第二个选项中,当您每次检索/查询另一个组时生成临时表时,您都要支付这两项费用,因为这都是BigQuery查询。此外,每次你们获得特定组的数据时——你们要为扫描整个临时表付费——所以在你们的情况下,这是额外的50倍


这使得(在你的情况下)第一个选项大约比第二个选项便宜51倍:o)

一个选项是将查询结果写入目标表,然后使用API以分页方式从该表中检索数据,可以使用
maxResults
pageToken
逐页检索,或者
maxResults
startIndex
检索指定的行集

另一个选项是将行号添加到查询中(如下所示)

仍然将结果写入目标临时表,然后使用新的
num
字段从该表中检索数据,例如分组为
num%10000={group_number}
。或者您可以使用
INTEGER(num/10000)={group\u number}
——您更喜欢的任何选项

SELECT visitorId , totals.visits 
FROM tempTable
WHERE num % 10000 = 0 
下一步将与

WHERE num % 10000 = 1 
等等

请注意: 第二个选项使用昂贵的(执行方面-而非计费方面)ROW_NUMBER()函数,该函数要求每个分区的所有数据(在本例中,只有一个分区-所有行)位于同一节点中,因此取决于它可以工作或不工作的行数。对于仅包含500K行的特定示例,它将起作用,但如果将其扩展到包含数百万行的表,则可能不会起作用(取决于每行中输出的数据量和行数)

还有一个注意事项:
-在第一个选项中,当您生成结果并将其保存到临时表中时,您只需支付一次。然后-从某种意义上说,Tabledata.list API是免费的,因为它本身不使用BigQuery查询,而只是直接从底层数据读取数据。
-在第二个选项中,当您每次检索/查询另一个组时生成临时表时,您都要支付这两项费用,因为这都是BigQuery查询。此外,每次你们获得特定组的数据时——你们要为扫描整个临时表付费——所以在你们的情况下,这是额外的50倍


这使得(在您的情况下)第一个选项比第二个选项便宜大约51倍:o)

听起来您要求数据分页,其中页面大小为10000, 您可以使用以下查询

SELECT visitorId, totals.visits,  
FROM (
   SELECT visitorId , totals.visits, ROW_NUMBER() OVER() as rownum 
   FROM [12123333.ga_sessions_20160602]' 
) WHERE rownum BETWEEN 1 AND 10000
等等

SELECT visitorId, totals.visits,  
FROM (
   SELECT visitorId , totals.visits, ROW_NUMBER() OVER() as rownum
   FROM [12123333.ga_sessions_20160602]' 
) WHERE rownum BETWEEN 10001 AND 20000

听起来像是要求数据分页,其中页面大小为10000, 您可以使用以下查询

SELECT visitorId, totals.visits,  
FROM (
   SELECT visitorId , totals.visits, ROW_NUMBER() OVER() as rownum 
   FROM [12123333.ga_sessions_20160602]' 
) WHERE rownum BETWEEN 1 AND 10000
等等

SELECT visitorId, totals.visits,  
FROM (
   SELECT visitorId , totals.visits, ROW_NUMBER() OVER() as rownum
   FROM [12123333.ga_sessions_20160602]' 
) WHERE rownum BETWEEN 10001 AND 20000