【发布时间】:2020-03-03 20:12:12
【问题描述】:
我有 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_id 或 UPPER(b.id) = a.high_id 时,它会起作用并持续 3 秒!
您能解释一下这种行为吗? 在不购买额外插槽的情况下让这个查询工作是真的吗?
【问题讨论】:
-
我很惊讶 BigQuery 甚至接受查询。请提供样本数据和期望的结果。
OR会扼杀查询性能。为什么你需要在id上使用UPPER()——但只是为了比较? -
@GordonLinoff 我无法显示数据,但可以描述它:表 a 包含有关苹果和安卓安装、android_id 和 apple_id 的信息(苹果 id 以大写形式存储)。表 b 有关于广告视图的信息,它有字段
advertising_id匹配表 a 中大写的 android_id 字段或 apple_id 字段。每个 b 记录也有一个收入和日期。我想按日期查看特定日期的收入。每个表大小为 250 mb
标签: sql join google-bigquery