Wie kann CSV mithilfe von Spaltennamen aus der ersten Zeile in BigQuery importiert werden?

8

Ich habe derzeit eine App in appscript geschrieben, um einige CSV-Dateien aus dem Cloud-Speicher in BigQuery zu importieren. Während das ziemlich einfach ist, bin ich gezwungen, das Schema für die Zieltabelle anzugeben.

Was ich suche, ist eine Möglichkeit, die CSV-Datei zu lesen und das Schema basierend auf den Spaltennamen in der ersten Zeile zu erstellen. Es ist in Ordnung, wenn alle Variablentypen als Strings enden. Ich habe das Gefühl, dass dies ein ziemlich häufiges Szenario ist. Hat jemand eine Anleitung dazu?

Vielen Dank, Nick

    
ntsue 15.02.2014, 00:10
quelle

3 Antworten

4

Eine Option (keine besonders angenehme, aber eine Option) wäre, eine rohe HTTP-Anfrage vom Apps-Skript an GCS zu senden, die erste Zeile der Daten zu lesen, sie in Kommas zu teilen und daraus ein Schema zu generieren. GCS verfügt nicht über eine Skriptintegration für Apps. Daher müssen Sie die Anfragen manuell erstellen. Apps Script verfügt über einige Dienstprogramme, um dies zu tun (genau wie OAuth), aber ich rate, dass es eine ordentliche Menge Arbeit sein wird, um es richtig zu machen.

Es gibt auch ein paar Dinge, die Sie auf der BigQuery-Seite ausprobieren könnten. Sie könnten die Daten als einzelnes Feld in eine temporäre Tabelle importieren (setzen Sie das Feldtrennzeichen auf etwas, das nicht existiert, z. B. '\ r'). Sie können die Kopfzeile über tabledata.list () lesen (d. H. Die erste Zeile der temporären Tabelle). Sie können dann eine aufteilende Abfrage ausführen, dann das einzelne Feld in Spalten mit einem regulären Ausdruck aufteilen und allow_large_results und eine Zieltabelle festlegen.

Eine andere Option wäre die Verwendung eines Dummy-Schemas mit mehr Spalten als je zuvor. Verwenden Sie dann die Option allow_jagged_rows, um Zeilen zuzulassen, bei denen am Ende der Zeile Daten fehlen. Sie können dann die erste Zeile (ähnlich der vorherigen Option) mit tabledata.list () lesen und herausfinden, wie viele Zeilen tatsächlich vorhanden sind. Dann könnten Sie eine Abfrage erzeugen, die die Tabelle mit korrekten Spaltennamen umschreibt. Der Vorteil dieses Ansatzes besteht darin, dass Sie keine regulären Ausdrücke oder Parsing benötigen. Damit kann bigquery alle CSV-Analysen durchführen.

Es gibt jedoch einen Nachteil für die beiden letztgenannten Ansätze; Der BigQuery-Lade-Mechanismus garantiert nicht, dass die Reihenfolge der Daten erhalten bleibt. In der Praxis sollte die erste Zeile immer die erste Zeile in der Tabelle sein, aber das ist nicht garantiert immer wahr.

Entschuldigung, es gibt keine bessere Lösung. Wir hatten lange Zeit eine Feature-Anforderung für Tabellen, um Schemas automatisch abzuleiten. Ich nehme das als eine andere Abstimmung dafür.

    
Jordan Tigani 19.02.2014, 00:11
quelle
1

Für den Datensatz steht nun eine Schema-Inferenz zur Verfügung: Ссылка

    
William Vambenepe 24.05.2016 07:35
quelle
0

Ausgehend von William Vambenepes Antwort kann Big Query jetzt das Schema erraten. Die Dokumentationsseite wurde verschoben nach:    Ссылка

Beachten Sie, dass Ihr Import trotzdem fehlschlagen kann, da nur die ersten 100 Zeilen angezeigt werden. Dies kann problematisch sein, wenn Sie eine seltene "NA" oder "Andere" in einer Spalte von scheinbaren ganzen Zahlen haben.

Wenn diese Funktion zum ersten Mal erschienen ist, könnten Sie zurückgehen und den fehlerhaften Feldtyp manuell in der Webbenutzerschnittstelle ändern, da die Schätzungen das Schema automatisch auffüllen würden, wenn Sie den fehlgeschlagenen Import erneut laden. Es scheint dies nicht mehr zu tun, hoffentlich wird es in einem zukünftigen Update zurückkehren.

    
Aturen 08.05.2017 21:24
quelle

Tags und Links