Open1
BigQueryのバグ
エラー内容
"invalidQuery][Correlated subqueries that reference other tables are not supported unless they can be de-correlated, such as by transforming them into an efficient JOIN."
他のテーブルを参照する相関サブクエリは、効率的な JOIN に変換するなどして相関を解除できない限り、サポートされません。
修正内容
- EXISTS句にを使っていた箇所をJOINするに置換したら正常実行できるようになった。
<修正前>
-- filtered_productsに属する商品のみ取得したい
cte1 AS (
SELECT
*
FROM
orders AS o
WHERE
-- 商品群Aに属する商品のみを残す
EXISTS
(
SELECT
TRUE
FROM
filtered_products
WHERE
filtered_products.product_id = o.product_id
)
),
<修正後>
EXISTSの代わりにINNER JOINで取得
-- filtered_productsに属する商品のみ取得したい
cte1 AS (
SELECT
*
FROM
orders AS o
INNER JOIN
filtered_products
ON
filtered_products.product_id= o.product_id
所感
- ボリュームが少なめのクエリだとこのエラーは出ないっぽいが、今回は1000行以上の重めのクエリだったので発生したのかな?
- 処理が高速であるEXISTSを積極的に利用していたが、長いクエリを書く時は最初からJOINで書いた方が無難かも