我正在尝试使用一个大的(约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%,这可能就是为什么它会爆炸,但是建议的方法是通过查询接口将大表分成较小的表。
答案 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。