我目前正试图在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的答案不是一个选择。
不带
ORDER BY
运行查询,保存在数据集表中使用通配符(BUCKETNAME/FILENAME*.csv)将表中的内容导出到GCS中的桶中
将文件下载到您的机器的文件夹
安装XAMPP(如果您得到UAC警告)并更改一些设置。
在XAMPP控制面板中启动Apache和MySQL
安装HeidiSQL并与MySQL服务器建立连接(安装了XAMPP)
创建一个数据库和一个表及其字段
进入工具>导入CSV文件,配置并导入
所有数据导入完成后,执行
ORDER BY
并导出表