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

时间:2013-11-21 02:55:18

标签: google-bigquery

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

我们需要一些帮助解密的错误消息

  

查询失败

     

错误:   Shuffle失败并出现错误:单次洗牌不能超过3.00T。此查询中的一个shuffle分区超过了3.84G。可以在go / dremelfaq上找到解决此错误的策略。

     

职位编号: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...

问题

这个错误是什么意思?它是否试图进行this改组? ;-) 最后,是否在Google以外的错误消息中引用了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

我们收到一个更微妙的

  

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

     

职位编号: job_D6VZEHB4BWZXNMXMMPWUCVJ7CKLKZNK4

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

1 个答案:

答案 0 :(得分: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次。