2016-08-16 3 views
6

Ich habe große CSV-Dateien und Excel-Dateien, wo ich sie lesen und erstellen Sie die erforderlichen create-Tabelle Skript dynamisch abhängig von den Feldern und Typen. Fügen Sie dann die Daten in die erstellte Tabelle ein.Einfügen großer Datenmengen über Bigquery-Python-Bibliothek in BigQuery

Ich habe this gelesen und verstanden, dass ich sie mit jobs.insert() anstelle von tabledata.insertAll() für große Datenmengen senden sollte.

So nenne ich es (funktioniert für kleinere Dateien, nicht große).

result = client.push_rows(datasetname,table_name,insertObject) # insertObject is a list of dictionaries 

Wenn ich Bibliothek push_rows es diesen Fehler in Windows gibt.

[Errno 10054] An existing connection was forcibly closed by the remote host 

und dies in Ubuntu.

[Errno 32] Broken pipe 

Also, wenn ich durch BigQuery-Python Code ging verwendet es table_data.insertAll().

Wie kann ich das mit dieser Bibliothek tun? Ich weiß, dass wir über Google-Speicher hochladen können, aber ich brauche eine direkte Upload-Methode.

Antwort

2

Wenn Sie mit großen Dateien arbeiten, verwenden Sie kein Streaming, sondern Batch-Load: Streaming kann problemlos bis zu 100.000 Zeilen pro Sekunde verarbeiten. Das ist ziemlich gut für das Streaming, aber nicht für das Laden großer Dateien.

Der verknüpfte Beispielcode tut das Richtige (Batch statt Streaming). Was wir sehen, ist ein anderes Problem: Dieser Beispielcode versucht, alle diese Daten direkt in BigQuery zu laden, aber das Hochladen über den POST-Teil schlägt fehl . gsutil hat einen robusteren Upload-Algorithmus als nur einen einfachen POST.

Lösung: Anstatt große Datenmengen über POST zu laden, speichern Sie sie zunächst in Google Cloud Storage und weisen BigQuery dann an, Dateien von GCS zu lesen.

Siehe BigQuery script failing for large file

+0

Haben Sie nur einen Link auf die OP auch hinzufügen ?! –

+1

oops, Korrektur Rekursion! –

+0

@FelipeHoffa gsutil kann ich innerhalb Python-Code verwenden? Es gab einige Spaltentypen Probleme, wenn Sie den csv-Dateipfad direkt eingeben und hochladen. also kann ich die csv lesen und die felder entsprechend umwandeln. Gibt es eine Möglichkeit, das Objekt (möglicherweise eine Liste von Wörterbüchern) in die Tabelle einzufügen, nachdem ich sie umgesetzt habe? –

Verwandte Themen