【发布时间】:2014-03-19 12:59:06
【问题描述】:
我需要使用 'where' 子句从一个大小超过 1.2 TB 和大约 28 亿行的表中过滤一些数据。
我开始使用小型数据表(约 2100 万行和 9.6 个表大小)测试数据过滤,方法是设置目标表并在作业配置中启用“允许大结果”。
我的查询很简单:
SELECT * FROM [mydataset.mytable] Where DATETIME >= '2014-03-17 00:00:00' and DATETIME <= '2014-03-17 23:59:59';
我同时使用了 BigQuery 浏览器工具和 bq 命令行工具,但是每次运行此查询时都会收到“响应太大而无法返回”错误。
在http://goo.gl/b6pNjA 的文档中,Google 说:
- 如果您计划运行可能返回较大结果的查询,您可以在作业配置中将 allowLargeResults 设置为 true。
- 您必须指定目标表。
- 您不能指定顶级 ORDER BY 子句。
- 窗口函数无法返回大查询结果。
我的查询很简单,不包含任何窗口函数。那么,要绕过这个问题,我可以使用特定的查询语法来成功运行我的查询吗?
请注意,在http://goo.gl/zkSN32 处,指定最大响应大小为 128 MB 压缩并且在返回大型查询结果时不受限制,如上述链接 (http://goo.gl/b6pNjA) 所述。
【问题讨论】:
-
我的意思是......它在你引用的那个文档中告诉你...... '如果你计划运行一个可能返回更大结果的查询,你可以将 allowLargeResults 设置为 true你的工作配置。'
-
在 BigQuery 浏览器工具中,我启用了“允许大结果”选项,并在 bq 命令行中做了同样的事情,但它总是返回“响应太大”错误。
-
我对系统不是很熟悉,但问题是否可能是显示结果而不是获取结果? IE。它声明你'你必须指定一个目标表',这意味着你必须将结果存储在某个地方,你不能只是将它打印出来或保存在内存中。
-
如果您在选择短语中声明所有字段而不是使用 * ,是否也会发生这种情况?
-
这听起来像是一个错误;您能否为其中一个失败的查询提供一个作业 ID,以便我们(BigQuery 团队)可以调查该问题?
标签: sql google-bigquery