我目前正在尝试在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,只有超过一百万行。
答案 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的答案不是一个选择。
不使用
ORDER BY
运行查询并将其保存在数据集表中。使用通配符(BUCKETNAME / FILENAME * .csv)将该表中的内容导出到GCS中的存储桶中
将文件下载到计算机中的文件夹中。
在XAMPP控制面板中启动Apache和MySQL。
安装HeidiSQL并稳定与MySQL服务器(与XAMPP一起安装)的连接
创建数据库和带有其字段的表。
一旦导入了所有数据,请执行
ORDER BY
并导出表。