2016-07-06 5 views
1

Ich versuche, Zeilen mit doppelten Feldern in einem Array von Strukturen innerhalb einer Google BigQuery-Tabelle zu finden, mit dem neuen Standard SQL. Die Daten in der Tabelle (vereinfacht), wobei jede Zeile ein bisschen wie folgt aussieht:Arbeiten mit Structs in Arrays für neue BigQuery Standard SQL

{ 
    "Session": "abc123", 
    "Information" [ 
    { 
     "Identifier": "e8d971a4-ef33-4ea1-8627-f1213e4c67dc" 
    }, 
    { 
     "Identifier": "1c62813f-7ec4-4968-b18b-d1eb8f4d9d26" 
    }, 
    { 
     "Identifier": "e8d971a4-ef33-4ea1-8627-f1213e4c67dc" 
    } 
    ] 
} 

Mein Endziel ist es, die Zeilen anzuzeigen, die Information Einheiten mit doppelten Identifier Werte vorhanden sind. die meisten Abfragen ich jedoch versuchen, eine Fehlermeldung der folgenden Form erhalten:

Cannot access field Identifier on a value with type ARRAY<STRUCT<Identifier STRING>> 

Gibt es einen Weg, um mit den Daten arbeiten innerhalb eines STRUCT innerhalb eines ARRAY?


Hier ist mein erster Versuch einer Abfrage:

SELECT 
    Session, 
    Information 
FROM 
    `events.myevents` 
WHERE 
    COUNT(DISTINCT Information.Identifier) != ARRAY_LENGTH(Information.Identifier) 
LIMIT 
    1000 

Und ein anderer mit einer Unterabfrage:

SELECT 
    Session, 
    Information 
FROM (
    SELECT 
    Session, 
    Information, 
    COUNT(DISTINCT Information.Identifier) AS info_count_distinct, 
    ARRAY_LENGTH(Information) AS info_count 
    FROM 
    `events.myevents` 
    WHERE 
    COUNT(DISTINCT Information.Identifier) != ARRAY_LENGTH(Information.Identifier) 
    LIMIT 
    1000) 
WHERE 
    info_count != info_count_distinct 
+1

präsentieren Sie Ihre Abfrage (auch wenn es erroring), damit wir weg von etwas anfangen! –

+0

Sicher Sache! Bearbeitete die Frage, um zwei Versuche hinzuzufügen, die ich machte. – Aaron

+0

Hattest du die Chance, meine Antwort zu prüfen/zu versuchen? –

Antwort

2

Versuchen unter

SELECT Session, Identifier, COUNT(1) AS dups 
FROM `events.myevents`, UNNEST(Information) 
GROUP BY Session, Identifier 
HAVING dups > 1 
ORDER BY Session 

Sollten Sie geben, was Sie erwarten plus Anzahl der Duples.
Wie unten (Beispiel)

Session Identifier        dups  
abc123 e8d971a4-ef33-4ea1-8627-f1213e4c67dc 2  
abc345 1c62813f-7ec4-4968-b18b-d1eb8f4d9d26 3  
+0

Danke für die Antwort Mikhail, das scheint zu funktionieren! Entschuldigung für die verzögerte Antwort, es gab einige andere Geräusche in unserem Datensatz, die mich für eine Weile verwirrten. – Aaron