Google Bigquery SELECT 超时与简单连接



这个简单的查询是超时的,有什么想法如何使用一些 BigQuery 技巧来优化它吗?

SELECT
s.typeFlight s_type, r.distance, r.price, (d.booking_token IS NULL) clicked
FROM [search.searches] s
LEFT JOIN [search.search_results] r ON r.searchid=s.searchid
LEFT JOIN [search.clicks] d ON d.booking_token=r.booking_token
WHERE s.saved_at BETWEEN TIMESTAMP('2016-03-01 00:00:00')
AND TIMESTAMP('2016-03-05 00:00:00')

查询设置

  • 查询优先级批处理
  • 目标表存储桶-984:搜索结果
  • 写入首选项覆盖表
  • 允许大结果为 true

数据来自搜索引擎,因此表格点击量很小(不到百万行),但表格搜索search_results量很大。查询处理大约 5 TB 的数据。

您可以将 where 筛选推送到第一个选择中,以便减少要连接的数据:

SELECT
s.typeFlight s.type, r.distance, r.price, (d.booking_token IS NULL) clicked
FROM (
  SELECT typeFlight, type, searchid
  FROM [search.searches]
  WHERE saved_at BETWEEN TIMESTAMP('2016-03-01 00:00:00')
    AND TIMESTAMP('2016-03-05 00:00:00')
) s
LEFT JOIN [search.search_results] r ON r.searchid=s.searchid
LEFT JOIN [search.clicks] d ON d.booking_token=r.booking_token

有时,查看查询计划说明 https://cloud.google.com/bigquery/query-plan-explanation 以了解查询花费的时间会很有帮助。

最新更新