2017-10-05 2 views
0

Ich finde es hilfreich, WITH Blöcke zu verwenden, um Logik in einer Abfrage aufzulösen. Habe ich Recht, wenn ich denke, dass ich das nicht auf einem verschachtelten Feld innerhalb eines ARRAY Ausdrucks machen kann? Ich kann in verschachtelte Abfragen trennen - das ist ausreichend, aber nicht ideal.WITH & UNNEST in BigQuery

Zum Beispiel funktioniert das:

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

... aber nicht:

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]. Möglicherweise, weil die Tabelle für diesen Block WITH noch nicht definiert wurde?

Gibt es eine andere Möglichkeit, dies zu tun?

EDIT: Dies ist Spielzeug Abfrage um das Problem zu veranschaulichen, nicht repräsentativ für die tatsächlichen Anfragen sind wir

Antwort

1

Die einzige Option, nur Ihre Abfrage unten zu vereinfachen ich sehe, laufen/optimieren - so wird es keine müssen für mit Innen ARRAY

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

Dank für den Versuch. Dies ist eine Spielzeugabfrage nur für Anzeigezwecke; die tatsächlichen Abfragen sind komplexer – Maximilian

+0

der Punkt meiner Antwort war - Sie können nicht mit WITH innerhalb von ARRAY oder einem anderen Ausdruck. Und ich habe gerade versucht, dir die Richtung zu zeigen, falls du nicht bemerkt hast, dass deine Anfrage ein wenig übertrieben war. –

+0

Ich schätze deine Bemühungen! – Maximilian