尝试使用GROUP BY返回表删除行时,"随机播放失败并显示错误"消息

nev*_*epz 5 google-bigquery

我们有一个1.01TB表,其中包含我们尝试使用GROUP EACH BY重复删除的已知重复项

有一个错误信息,我们想要一些帮助解密

查询失败

错误:随机播放失败并显示错误:单次重播不能超过3.00T.此查询中的一个shuffle分区超过了3.84G.可以在go/dremelfaq上找到解决此错误的策略.

职位ID:job_MG3RVUCKSDCEGRSCSGA3Z3FASWTSHQ7I

你想象的查询确实很多,看起来像这样的东西

SELECT Twenty, Different, Columns, For, Deduping, ... 
       including_some, INTEGER(conversions),
       plus_also, DAYOFWEEK(SEC_TO_TIMESTAMP(INTEGER(timestamp_as_string)), conversions,
       and_also, HOUROFDAY(SEC_TO_TIMESTAMP(INTEGER(timestamp_as_string)), conversions,
       and_a, IF(REGEXP_MATCH(long_string_field,r'ab=(\d+)'),TRUE, NULL) as flag_for_counting,
       with_some, joined, reference, columns,
       COUNT(*) as duplicate_count
FROM [MainDataset.ReallyBigTable] as raw
LEFT OUTER JOIN [RefDataSet.ReferenceTable] as ref
ON ref.id = raw.refid
GROUP EACH BY ... all columns in the select bar the count...
Run Code Online (Sandbox Code Playgroud)

这个错误是什么意思?它试图做这种洗牌吗?;-)最后,是否在谷歌以外的错误消息中引用了dremelfaq,它是否有助于了解最新情况?

边注

为了完整起见,我们尝试了一个更适度的GROUP EACH

 SELECT our, twenty, nine, string, column, table,
        count(*) as dupe_count
 FROM [MainDataSet.ReallyBigTable] 
 GROUP EACH BY all, those, twenty, nine, string, columns
Run Code Online (Sandbox Code Playgroud)

而且我们收到的更微妙

错误:查询执行期间超出了资源.

职位ID: job_D6VZEHB4BWZXNMXMMPWUCVJ7CKLKZNK4

Bigquery应该能够执行这些重复数据删除查询吗?我们应该如何最好地解决这个问题?

Jor*_*ani 7

实际上,所涉及的改组更接近于:http://www.youtube.com/watch?v = KQ6zr6kCPj8.

当您使用'EACH'关键字时,您正在指示查询引擎对您的数据进行洗牌......您可以将其视为一个巨大的排序操作.

这很可能接近我们在BigQuery中设置的集群限制.我将与BigQuery团队的其他人交谈,看看是否有办法让我们弄清楚如何让你的查询工作.

同时,一种选择是将数据划分为较小的表并对这些较小的表进行重复数据删除,然后使用表复制/追加操作来创建最终的输出表.要对数据进行分区,您可以执行以下操作:

(SELECT*from [your_big_table] WHERE ABS(HASH(column1)%10)== 1)

不幸的是,这将是昂贵的,因为它需要在1 TB表上运行查询10次.