带有“Order Each by”子句的 Google BigQuery 大表(105M 记录)产生“资源超出查询执行”错误

Posted

技术标签:

【中文标题】带有“Order Each by”子句的 Google BigQuery 大表(105M 记录)产生“资源超出查询执行”错误【英文标题】:Google BigQuery large table (105M records) with 'Order Each by' clause produce "Resources Exceeds Query Execution" error 【发布时间】:2015-09-26 04:16:30 【问题描述】:

当带有“Order Each by”子句的 Google Big Query 大表(105M 记录)时,我遇到了严重的问题“Resources Exceeds Query Execution”。

这是示例查询(使用公共数据集:***):

SELECT Id,Title,Count(*) FROM [publicdata:samples.wikipedia] Group EACH by Id, title Order by Id, Title Desc

如何在不添加限制关键字的情况下解决这个问题。

【问题讨论】:

"Error: Resources exceeded during query execution" resulting from SQL call using FLATTEN的可能重复 What causes “resources exceeded” in BigQuery?的可能重复 【参考方案1】:

在大数据数据库上使用 order by 不是普通的操作,在某些时候它超出了大数据资源的属性。您应该考虑对查询进行分片或在导出的数据中运行 order by。

正如我今天在 your other question 中向您解释的那样,添加 allowLargeResults 将允许您返回较大的响应,但您不能指定*** ORDER BY、TOP 或 LIMIT 子句。这样做会抵消使用allowLargeResults 的好处,因为查询输出不能再并行计算。

您可以尝试的一个选项是将查询分片。

where ABS(HASH(Id) % 4) = 0

您可以多次使用上述参数来获得更小的结果集,然后再组合。

另请阅读Chapter 9 - Understanding Query Execution,它解释了内部分片的工作原理。

您还应该阅读Launch Checklist for BigQuery

【讨论】:

【参考方案2】:

我遇到了同样的问题,并按照后续步骤修复了它

    在没有ORDER BY 的情况下运行查询并保存在数据集表中。

    使用通配符 (BUCKETNAME/FILENAME*.csv) 将该表中的内容导出到 GCS 中的存储桶

    将文件下载到您机器中的文件夹中。

    之后安装XAMPP (if you get a UAC warning) 和change some settings。

    在 XAMPP 控制面板中启动 Apache 和 mysql

    安装 HeidiSQL 并与您的 MySQL 服务器建立连接(安装了 XAMPP)

    创建一个数据库和一个包含其字段的表。

    Go to Tools > Import CSV file, configure accordingly 并导入。

    导入所有数据后,执行ORDER BY 并导出表格。

【讨论】:

以上是关于带有“Order Each by”子句的 Google BigQuery 大表(105M 记录)产生“资源超出查询执行”错误的主要内容,如果未能解决你的问题,请参考以下文章

带有获取下一行的 Where 子句

搜索带有单引号的 where 子句的记录

带有 IN 子句中参数列表的 PreparedStatement [重复]

带有插入语句的 Where 子句

PHP - 使用带有 IN 子句数组的 PDO

PHP - 使用带有 IN 子句数组的 PDO