不支持引用其他表的相关子查询
Posted
技术标签:
【中文标题】不支持引用其他表的相关子查询【英文标题】:Correlated subqueries that reference other tables are not supported 【发布时间】:2018-01-08 15:14:14 【问题描述】:我有数百个查询为我公司的仪表板提供动力,这些查询已经工作了多年,但几天前一夜之间崩溃了,给出了错误:
错误:,除非它们可以去相关,例如通过将它们转换为有效的 JOIN。
以下是存在问题的查询类型示例。显然 WHERE 条件是问题所在。真的不再支持这种类型的查询吗?现在是否需要将所有使用此语法的查询转换为使用 INNER JOIN?这是一个巨大的变化,真正影响了我们的分析。
-- standardSQL
SELECT
accounts,
monthly_timestamp
FROM
`custom_query_ingestion.accounts_monthly`
WHERE
monthly_timestamp <= (SELECT MAX(TIMESTAMP(date)) FROM `historical_data.historical_revenue`)
【问题讨论】:
对于这样的问题,您最好为 BQ 工程团队创建一个公共问题跟踪器,并在此处引用链接。您可以使用问题跟踪器获得更快的答案。如果仍然有,您应该为这两种情况添加示例作业 ID。 issuetracker.google.com/savedsearches/559654 谢谢,我会的。我仍然无法确定这是否是一个错误,或者 BigQuery 是否真的不再希望支持使用这种语法的查询 @StephanieG 我不是 BigQuery 专家,但您可以将此查询重写为与找到最大时间戳的子查询的交叉联接。可能不是最好的解决方案,但也许可以尝试一下。 Stephanie posted the bug on the issue tracker,BigQuery 团队的人员应该能够帮助解决问题。 @StephanieG 我看到你是新来的。在下面发布为答案,几天后您可以标记为答案。 【参考方案1】:问题是history_revenue 中未嵌套的数组常量的左连接:
LEFT JOIN (
SELECT
product
FROM
UNNEST(['Item1','Item2','Item3']) AS product
) AS nonrecurring
ON nonrecurring.product = revenue.product_item
重写为 CASE WHEN 语句解决了问题
【讨论】:
以上是关于不支持引用其他表的相关子查询的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 Join 的情况下处理引用其他表的相关子查询的问题