2017-10-05 20 views
0

WITHブロックを使用してクエリのロジックを分割すると便利です。 ARRAY式内のネストされたフィールドでこれを行うことはできないと思うのですか?私はネストされたクエリに分けることができます - それは十分ですが理想的ではありません。例えばBigQueryのWITH&UNNEST

、これは動作します:

SELECT 
    repository.url, 
    ARRAY(
    SELECT 
    action 
    FROM (
    SELECT 
     action 
    FROM 
     UNNEST(payload.pages))) action 
FROM 
    `bigquery-public-data.samples.github_nested` 

を...しかし、これはそうではない:

SELECT 
    repository.url, 
    ARRAY(
    WITH 
    p AS (
    SELECT 
     action 
    FROM 
     UNNEST(payload.pages)) 
    SELECT 
    action 
    FROM 
    p) action 
FROM 
    `bigquery-public-data.samples.github_nested` 

... Error: Unrecognized name: payload at [9:14]。ブロックWITHのテーブルがまだ定義されていない可能性がありますか?

これを行う別の方法はありますか?

EDITは:これは私たちが

答えて

1

を実行している実際のクエリの代表、問題を説明するためのおもちゃのクエリではありません、私が見る唯一のオプションは、すぐ下にあなたのクエリを最適化/簡素化することです - ので、ノーがあるだろうWITH ARRAY内の必要性

#standardSQL 
SELECT 
    repository.url, 
    ARRAY(SELECT action FROM UNNEST(payload.pages)) action 
FROM `bigquery-public-data.samples.github_nested` 
+0

お試しいただきありがとうございます。これは表示専用のおもちゃのクエリです。実際のクエリはより複雑です – Maximilian

+0

私の答えのポイントは - あなたはARRAYまたは他の式の中でWITHを使うことはできません。そして、あなたの方向が少ししか強調されていないことに気づかなかった場合に備えて、私はあなたの方向性を示すようにしました。 –

+0

私はあなたの努力に感謝します! – Maximilian