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で書いた方が無難かも