【问题标题】:Google Bigquery SELECT timeouts with simple joins带有简单连接的 Google Bigquery SELECT 超时
【发布时间】:2016-08-23 00:44:33
【问题描述】:

这个简单的查询超时,有什么想法可以使用一些 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')

查询设置

  • 查询优先级批处理
  • 目标表 bucket-984:search.result
  • 写入偏好覆盖表格
  • 允许大型结果 true

数据来自搜索引擎,因此表 clicks 很小(低于百万行),但表 searchessearch_results 很大.该查询处理大约 5 TB 的数据。

【问题讨论】:

    标签: join google-bigquery


    【解决方案1】:

    您可以将 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 以了解您的查询在哪里花费时间会有所帮助。

    【讨论】:

    • 仍然超时。
    猜你喜欢
    • 2022-01-15
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 2013-06-12
    • 2011-12-15
    • 1970-01-01
    相关资源
    最近更新 更多