2016-12-07 4 views
2

Was ich tun möchte, sollte einfach sein: Angesichts eines BigQuery-Schemas möchte ich alle Tabellen (einschließlich verschachtelter) bis auf einige auswählen. Das Schwierige ist, dass BigQuery eine verschachtelte Struktur hat und die wenigen, die ich ausschließen möchte, in anderen Datensätzen verschachtelt sind.BigQuery select * außer verschachtelte Spalte

Ich habe die SELECT * Ausnahme-Klausel in der BigQuery documentation gefunden, die sehr vielversprechend scheint. Das Problem ist, dass der geschachtelte Strukturausschluss nicht unterstützt wird.

Um zum Beispiel der öffentlichen github_nested Dataset wir eine Abfrage wie

schreiben
#standardSQL 
SELECT * except (payload) FROM `bigquery-public-data.samples.github_nested` LIMIT 1000 

Das tut, was wir durch das Entfernen der Nutzlast Datensatz aus den Ergebnissen erfolgreich erwarten. Stellen wir uns nun vor, dass wir payload.comment nur entfernen wollen und dabei den Rest des Payload-Datensatzes in der Antwort erhalten. Ich versuchte

#standardSQL 
SELECT * except (payload.comment) FROM `bigquery-public-data.samples.github_nested` LIMIT 1000 

Dies schlägt jedoch fehl.

Wer weiß von einem Weg, dies zu erreichen?

Danke!

Antwort

2

Die Art und Weise, an das Problem zu denken ist, dass Sie immer noch eine payload Spalte im Ergebnis wollen, aber Sie möchten, dass es eine andere Struktur hat, nämlich comment auszuschließen. In diesem Fall können Sie SELECT * REPLACE verwenden, um die Änderung vorzunehmen. Zum Beispiel

#standardSQL 
SELECT * REPLACE ((SELECT AS STRUCT payload.* EXCEPT (comment)) AS payload) 
FROM `bigquery-public-data.samples.github_nested` 
LIMIT 1000; 
+0

Vielen Dank, Elliott. Dies löst das oben skizzierte Problem. Leider war ich ein schreckliches Frage-Poster und erkannte, dass mein Fall mit einem wiederholten Feld (das nicht im Beispiel ist) etwas kniffliger war. Ich werde der Frage ein Update hinzufügen. Entschuldigung! – Spikey

+0

Wenn dies die ursprüngliche Frage beantwortet, stört es Sie als akzeptiert? Fühlen Sie sich frei, eine andere Variante der Frage zu schreiben, die sich auf wiederholte Felder bezieht. Vielen Dank! –

+0

Wenn das die Konvention für Stackoverflow ist, sicher. Danke für die Hilfe! – Spikey

Verwandte Themen