云数据实验室中的探索性数据分析与查询优化
1. BigQuery查询优化
BigQuery支持用JavaScript编写用户定义函数(UDF),但过度使用UDF会减慢查询速度,某些UDF还可能属于高计算量查询(详情见:https://cloud.google.com/bigquery/pricing#high-compute )。
查询通常包含读取、处理和写入三个阶段:
- 读取阶段 :此阶段耗时最长,说明查询受I/O限制,读取数据的基本成本主导了查询。从输入列的数据(2100万到16000再到229)可知,我们在前期阶段对数据进行筛选和处理已取得不错效果。例如,如果某个筛选条件经常使用,可添加一个表明各机场流量的表,每次查询时与该表进行连接,而非每次都计算聚合值。也可以添加一列表示机场所在都市圈的某些特征(如人口)来近似实现。若不需要所有数据的统计信息,可考虑对数据进行采样,在样本上计算统计信息。
- 处理阶段 :需考虑是否可以省略用户定义函数(UDF)的使用。
- 写入阶段 :将数据写入临时存储或响应,主要取决于每个阶段写出的数据量。优化此步骤通常可将过滤选项移到最内层查询(或最早阶段),不过BigQuery优化器可自动完成部分此类操作。
从图表中可发现,阶段1和阶段3没有等待偏差,但阶段2的等待时间有一点偏差。这是因为查询按机场分组,部分机场航班数量远多于其他机场,繁忙机场对应的数据写出耗时更长。若对小机场数据不感兴趣,可将其从数据中过滤出来,写入单独的表,后续查询该表。
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



