"Error: Resources exceeded during query execution" 使用 FLATTEN 的 SQL 调用产生



我目前正试图在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。我读过关于这些错误主题的其他帖子,比如这篇文章,它关注的是完成连接时观察到的资源错误。我怀疑现在的问题是FLATTEN的使用,我正在尝试一些不同的方法。也就是说,我很担心,因为在未来,这个查询可能会在一起运行30或60天(而不是我现在原型的一天),这将大大增加数据大小,超过500GB到1TB。上面查询的目标是生成一个表,我可以保存它,然后对它进行操作。不幸的是,以Ad Hoc的方式做这件事似乎有些问题。其他人在使用类似的SQL查询时遇到过资源约束吗?对于上下文,正在查询的表大小约为17.2 GB,只有100多万行。

正如@Pentium10所提到的,设置allow large results将允许您从扁平查询返回较大的结果。通常你应该使用"允许大结果"的信号是你看到一个"结果太大"的错误。

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

我遇到过完全相同的问题,我真的想要ORDER BY,所以Jordan Tigani的答案不是一个选择。

  1. 不带ORDER BY运行查询,保存在数据集表中

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

  3. 将文件下载到您的机器的文件夹

  4. 安装XAMPP(如果您得到UAC警告)并更改一些设置。

  5. 在XAMPP控制面板中启动Apache和MySQL

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

  7. 创建一个数据库和一个表及其字段

  8. 进入工具>导入CSV文件,配置并导入

  9. 所有数据导入完成后,执行ORDER BY并导出表

最新更新