使用where子句从大表中过滤数据会返回“响应太大......”错误

时间:2014-03-19 12:59:06

标签: sql google-bigquery

我需要使用'其中'来过滤一些数据。来自表格的子句,其大小超过1.2 TB,行数约为28亿。

我开始使用小型数据表(约21百万行和9.6个表格大小)测试数据过滤,方法是设置一个目的地表并启用“允许大结果”#39;在工作配置中。

我的查询非常简单:

SELECT * FROM [mydataset.mytable] Where DATETIME >= '2014-03-17 00:00:00' and  DATETIME <= '2014-03-17 23:59:59';

我使用了BigQuery Browser Tool和bq命令行工具,但是,我得到的响应太大而无法返回&#39;每次运行此查询时都会出错。

在此处http://goo.gl/b6pNjA的文档中,Google说:

  
      
  • 如果您计划运行可能返回较大结果的查询,则可以在作业配置中将allowLargeResults设置为true。
  •   
  • 您必须指定目的地表。
  •   
  • 您无法指定顶级ORDER BY子句。
  •   
  • 窗口函数无法返回大量查询结果。
  •   

我的查询非常简单,不包含任何窗口函数。那么,为了绕过这个问题,我是否可以使用特定的查询语法来成功运行查询?

请注意,在http://goo.gl/zkSN32处,指定最大响应大小为128 MB压缩,并且在返回大型查询结果时无限制,如上面的链接(http://goo.gl/b6pNjA)所述。

1 个答案:

答案 0 :(得分:2)

正如N.N所说,为了避免在这种情况下“响应太大而无法返回”错误,它应该使用select *来声明select子句中的所有字段。

我尝试通过声明select语句中的所有字段,设置目标表并启用“允许大结果”来运行相同的查询,它运行正常。

查询完成(已经过了115.6秒,处理了298 GB)。

目的地表的行数:77,796,259。