我目前正在尝试在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。上面查询的目的是生成一个表,我可以将其保存下来然后进行操作。不幸的是,以临时方式进行此操作似乎有些问题。其他人在使用类似的SQL查询时是否遇到资源限制?就上下文而言,正在查询的表的大小约为17.2 GB,仅有一百万行。
但是,查询的另一部分是不可并行的:ORDER BY
操作。这是必需的吗?通常,我们发现,在大型表上使用ORDER BY
的大多数时候,人们真正想要的是ORDER BY ... LIMIT
(可以高效且并行地完成)。或者他们只是添加ORDER BY,因为这样可以更轻松地查看结果。如果您可以删除ORDER BY
,则可能会提高查询速度,并随着数据大小的增加而更好地扩展。
- 运行不带
ORDER BY
的查询并保存在数据集表中。- 使用通配符(BUCKETNAME / FILENAME * .csv)将该表中的内容导出到GCS的存储桶中
- 将文件下载到计算机中的文件夹。
- 安装XAMPP(if you get a UAC warning)和change some settings之后。
- 在XAMPP控制面板中启动Apache和MySQL。
- 安装HeidiSQL并稳定与MySQL服务器的连接(已安装XAMPP)
- 创建数据库和具有其字段的表。
- Go to Tools > Import CSV file, configure accordingly和导入。
- 一旦导入了所有数据,请执行
ORDER BY
并导出表。