2016-05-25 8 views
2

Ich benutze bq Befehlszeile und versuche, große Menge von JSON-Dateien mit einer Tabelle pro Tag einzufügen.BigQuery schneller Weg Millionen Zeilen einzufügen

Mein Ansatz:

  1. Liste aller Datei push (Datum benannt YYYMMDDHHMM.meta1.meta2.json)
  2. concatenate am selben Tag file => YYYMMDD.ndjson
  3. Split YYYMMDD sein. ndjson Datei (500 Zeilen Dateien bei jedem) YYYMMDD.ndjson_splittedij

Schleife über YYYMMDD.ndjson_splittedij und führen

bq insert --template_suffix=20160331 --dataset_id=MYDATASET TEMPLATE YYYMMDD.ndjson_splittedij 

Dieser Ansatz funktioniert. Ich frage mich nur, ob es möglich ist, es zu verbessern.

Antwort

3

Wieder verwirren Sie Streaming-Einsätze und Job-Ladungen. Sie müssen nicht jede Datei in 500 Zeilen aufteilen (gilt für das Streaming-Einfügen).

Sie können für Einsatz sehr große Dateien haben, die Befehlszeile Registerkarte Beispiele hier aufgeführt: https://cloud.google.com/bigquery/loading-data#loading_csv_files

Sie nur laufen müssen:

bq load --source_format=NEWLINE_DELIMITED_JSON --schema=personsDataSchema.json mydataset.persons_data personsData.json 

JSON-Datei komprimiert unter 4 GB, wenn dekomprimiert werden müssen muss unter 5 TB liegen, größere Dateien sind also besser. Versuchen Sie immer mit einer 10-Zeilen-Beispieldatei, bis der Befehl funktioniert.

+0

Wir müssen 1 Tabelle pro Tag haben :). Es scheint, dass das Kontingent für Ladejobs 1000 pro Tag beträgt. –

+0

Ja, aber stellen Sie sich vor 1000 * 5 TB bedeutet 5 Petabyte. Meinst du, dass du diese Datenmenge am selben Tag willst? – Pentium10

+0

Missverständnis. Jeden Tag generiert System L ungefähr 30 000 Dateien in einem Ordner B. Von B un script S erzeugt so viel wie Dateien, die zu B gehören, in einem Ordner D. D kann Millionen von Dateien enthalten. Ziel ist es, Dateien am Tag zu aggregieren, bevor sie so schnell wie möglich an BQ gesendet werden. –

Verwandte Themen