"错误:在查询执行期间超出资源"使用FLATTEN进行SQL调用

时间:2014-07-14 09:09:47

标签: google-bigquery

我目前正在尝试在BigQuery中运行以下SQL脚本(目标是保存表)但在启动查询后没有行返回大小限制时,我收到与容量相关的SQL处理错误。错误是常见的错误:"错误:在查询执行期间超出了资源。"

SELECT date, 
       Concat(fullvisitorid, String(visitid)) AS unique_visit_id, 
       visitid, 
       visitnumber, 
       fullvisitorid, 
       totals.pageviews, 
       totals.bounces, 
       hits.page.pagepath, 
       hits.page.pagetitle, 
       device.devicecategory, 
       device.browser, 
       device.browserversion, 
       hits.customvariables.index, 
       hits.customvariables.customvarname, 
       hits.customvariables.customvarvalue, 
       hits.time 
FROM   (Flatten([XXXXXXXX.ga_sessions_20140711], hits.time)) 
WHERE  hits.customvariables.index = 4 
ORDER  BY unique_visit_id DESC, 
          hits.time ASC 

为该作业提供的作业ID为:ua-web-analytics:job_60fxNnmo9gZ23kaji50v3qH9dXs。我已经阅读了关于这些错误主题的其他帖子as this post which focuses on the resource errors observed completing a join.我怀疑现在的问题是使用FLATTEN,并且正在研究一些不同的方法。也就是说,我担心的是,将来这个查询可能会在30天或60天一起运行(而不是我现在正在进行原型设计的那一天),这将大大增加数据大小超过500GB到1TB。上述查询的目标是生成一个表,我可以保存然后进行操作。不幸的是,以Ad Hoc方式这样做似乎有些问题。有没有其他人在使用类似的SQL查询时遇到资源限制?对于上下文,正在查询的表大小约为17.2 GB,只有超过一百万行。

2 个答案:

答案 0 :(得分:4)

正如@ Pentium10所提到的,设置允许大的结果将允许您从展平的查询返回更大的结果。通常,您应该使用“允许大结果”的信号是您看到“结果太大”的错误。

但是,您的查询的另一部分是不可并行的:ORDER BY操作。这需要吗?通常,我们发现大多数情况下ORDER BY用于大型表时,人们真正想要的是ORDER BY ... LIMIT(可以高效且并行地完成)。或者他们只是添加ORDER BY,因为它可以更容易地观察结果。如果您放弃ORDER BY,它可能会使您的查询更快,并且随着数据大小的增加而更好地扩展。

答案 1 :(得分:0)

I've been through exactly the same problem,我真的很想要ORDER BY,所以Jordan Tigani的答案不是一个选择。

  
      
  1. 不使用ORDER BY运行查询并将其保存在数据集表中。

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

  4.   
  5. 将文件下载到计算机中的文件夹中。

  6.   
  7. 在之后安装XAMPPif you get a UAC warning)和change some settings

  8.   
  9. 在XAMPP控制面板中启动Apache和MySQL。

  10.   
  11. 安装HeidiSQL并稳定与MySQL服务器(与XAMPP一起安装)的连接

  12.   
  13. 创建数据库和带有其字段的表。

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

  16.   
  17. 一旦导入了所有数据,请执行ORDER BY并导出表。

  18.