使用destination_table时响应太大而无法返回

时间:2013-05-30 00:41:12

标签: google-bigquery

我正在尝试使用一个大的(约900万行)表并通过查询接口从中创建较小的表:

bq query --destination_table=AC25_DS.SmtpSend_ACXX_2013052000_new "select * from LOAD_STAGE_DS.smtpsend520 where accountId=XX5"
Waiting on job_8de2e91ee06d4805844b09591e43968a ... (7s) Current status: DONE    
BigQuery error in query operation: Error processing job 'messagebus.com:mbtest:job_8de2e91ee06d4805844b09591e43968a': Response too large to return.

表中的一个帐户大约占总表大小的95%,这可能就是为什么它会爆炸,但是建议的方法是通过查询接口将大表分成较小的表。

1 个答案:

答案 0 :(得分:2)

假设您要创建表的100个分片。如果你有一些类似id的字段,你可以选择id字段在除以100时具有特定模数的行。对于这个例子,你将运行100个查询:

SELECT * FROM table WHERE ABS(HASH(id) % 100) == 0
SELECT * FROM table WHERE ABS(HASH(id) % 100) == 1
SELECT * FROM table WHERE ABS(HASH(id) % 100) == 2
SELECT * FROM table WHERE ABS(HASH(id) % 100) == 3
...
SELECT * FROM table WHERE ABS(HASH(id) % 100) == 99

并将结果存储到100个表中,每个表包含(大约)原始表行的1/100。