带有“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 记录)产生“资源超出查询执行”错误的主要内容,如果未能解决你的问题,请参考以下文章