1

我正在尝试获取一个大(约 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%,所以这可能是它爆炸的原因,但是通过查询接口将大表分解为小表的推荐方法是什么。

4

1 回答 1

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。

于 2013-05-30T12:21:02.967 回答