2016-07-01 4 views
1

BigQuery Ich versuche, eine Abfrage in BigQuery mit dem neuen Standard-SQL auszuführen, das BQ unterstützt. Meine Aufgabe für den Moment ist es zu versuchen und die folgende Abfrage (BQ Syntax) unter Verwendung des Standard-SQL .:BigQuery FLATTEN-Klausel in der neuen Standard-SQL

SELECT 
    u0, u1 
FROM 
    (SELECT 
     MIN(u) as u0, NEST(u) as u1 
    FROM 
     (FLATTEN((SELECT key, SPLIT(u2,',') as u FROM [dataset.table]),u)) 
    GROUP EACH BY key 
    HAVING u0 <> u1) 
GROUP EACH BY u0, u1 

Ich bin meistens Probleme mit dem Abflachen Operator laufen. Was ich bisher habe, und es ist eine Art funktioniert (nicht vollständig) ist:

SELECT 
    u0, u1 
FROM 
    (SELECT 
    (SELECT MIN(uids) FROM UNNEST(u2_arr) u2) u0, 
    u2_arr 
    FROM 
    (SELECT SPLIT(uids, ',') as u2_arr FROM `datase.table`)), 
    UNNEST(u2_arr) u1 
WHERE u0 <> u1 
GROUP BY u0, u1 

Irgendwelche Vorschläge, wie die zweite Abfrage ähnlich wie die erste zu machen?

Vielen Dank im Voraus! G

Antwort

2

Angenommen, Ihre Tabelle wie unten aussieht (von Code in Ihrer Frage abgeleitet)

key u2 
1 2,6,3,1,4,5 
2 21,6,32,11,4,5 

unter BigQuery Standard-SQL liefert genau gleiches Ergebnis wie Ihr ursprünglichen Legacy-SQL

SELECT 
    u0, u1 
FROM (
    SELECT 
    MIN(u) AS u0, ARRAY_AGG(u) AS u1 
    FROM 
    (SELECT key, u FROM `datase.table`, UNNEST(SPLIT(u2, ',')) AS u) 
    GROUP BY key 
), UNNEST(u1) AS u1 
WHERE u0 <> u1 

Es könnte sein, nicht die beste "Übersetzung" von Legacy zu Standard SQL - aber ohne genau zu wissen, was Sie erreichen wollen - Ich wollte Code so nah wie möglich an Ihren ursprünglichen Code lassen

Von der anderen Seite - ich bin mir nicht sicher, was Sie unter verstehen, da ich erwarten würde, dass Ihre Version so funktioniert wie sie ist!