BigQuery查询超出资源限制。当使用带有OR

问题描述 投票:0回答:1

我有BigQuery数据库,执行30秒后看到错误:

查询超出资源限制。 34012.91515312311 CPU秒为使用,并且此查询必须使用少于20200.0 CPU秒。

使用此类查询时:

SELECT
  b.date as Date, 
  SUM(b.revenue) as Revenue
FROM `dataset.a` a
JOIN `dataset.b` b ON b.id = a.low_id OR UPPER(b.id) = a.high_id
WHERE DATE(a.date_and_time) >= DATE('2020-02-01')
AND DATE(a.date_and_time) <= DATE('2020-02-25')

GROUP BY b.date
ORDER BY b.date

我注意到,如果删除分组并仅返回b记录,它将起作用并持续40秒。但是,当我从JOIN中删除b.id = a.low_idUPPER(b.id) = a.high_id时,它将起作用并持续3秒钟!

您能否解释这种行为?使此查询有效而无需购买额外的插槽是真的吗?

sql join google-bigquery
1个回答
2
投票

尝试使用此技巧。它从两个id构造一个数组,然后取消嵌套它们。剩下的就是您的JOIN

SELECT b.date as Date, SUM(b.revenue) as Revenue
FROM `dataset.a` a JOIN
     (`dataset.b` bl CROSS JOIN
      UNNEST(ARRAY(a.low_id, a.hi_id)) a_id
     )
      ON bl.id = a.a_id 
WHERE DATE(a.date_and_time) >= DATE('2020-02-01') AND
      DATE(a.date_and_time) <= DATE('2020-02-25')
GROUP BY b.date
ORDER BY b.date
© www.soinside.com 2019 - 2024. All rights reserved.