Extern partitionierte Daten laden

BigQuery unterstützt das Laden extern partitionierter Daten in den Formaten Avro, Parquet, ORC, CSV und JSON, die unter Verwendung eines Standardlayouts für Hive-Partitionierung in Cloud Storage gespeichert wurden.

Beschränkungen

  • Bei der Unterstützung der Hive-Partitionierung wird vorausgesetzt, dass alle URIs ein gemeinsames URI-Quellpräfix haben, das unmittelbar vor der Partitionscodierung endet und so aussieht: gs://<bucket>/<path_to_table>/.
  • Es wird angenommen, dass in der Verzeichnisstruktur einer Hive-partitionierten Tabelle dieselben Partitionierungsschlüssel in derselben Reihenfolge mit maximal zehn Partitionierungsschlüsseln pro Tabelle vorhanden sind.
  • Die Daten müssen einem Standardlayout für Hive-Partitionierung entsprechen.
  • Es darf keine Überschneidungen zwischen den Hive-Partitionierungsschlüsseln und den Spalten in den zugrunde liegenden Dateien geben.
  • Die Unterstützung ist derzeit auf die BigQuery-Web-UI, das Befehlszeilentool und die REST API beschränkt.
  • Es gelten alle Beschränkungen für das Laden aus Cloud Storage.

Unterstützte Datenlayouts

Die Daten müssen einem Standardlayout für Hive-Partitionierung entsprechen. Folgende Dateien z. B. richten sich nach einem Standardlayout. Die Schlüssel/Wert-Paare sind als Verzeichnisse mit dem Zeichen = als Trennzeichen angelegt und die Partitionierungsschlüssel haben immer dieselbe Reihenfolge.

gs://bucket/table/dt=2019-10-31/lang=en/foo
gs://bucket/table/dt=2018-10-31/lang=fr/bar

Das gemeinsame Präfix für den Quell-URI in diesem Beispiel ist gs://bucket/table.

Nicht unterstützte Datenlayouts

Wenn die Namen der Partitionierungsschlüssel nicht im Verzeichnispfad codiert sind, wird das Partitionierungsschema nicht erkannt. Sehen Sie sich zum Beispiel den folgenden Pfad an, in dem die Namen der Partitionsschlüssel nicht codiert sind:

gs://bucket/table/2019-10-31/en/foo

Dateien, deren Schema nicht in einheitlicher Reihenfolge angegeben ist, werden ebenfalls nicht erkannt. Sehen Sie sich zum Beispiel die folgenden beiden Dateien an, bei denen die Partitionierungsschlüssel umgekehrt codiert sind:

gs://bucket/table/dt=2019-10-31/lang=en/foo
gs://bucket/table/lang=fr/dt=2018-10-31/bar

Arten der Erkennung des Partitionierungsschemas

Hive-Partitionierungsschlüssel werden beim Laden von Daten aus Cloud Storage als normale Spalten angezeigt. Wir unterstützen drei Arten der Erkennung von Hive-Partitionsschemas:

  • AUTO: Schlüsselnamen und -typen werden automatisch erkannt. Die folgenden Typen können erkannt werden: STRING, INTEGER, DATE und TIMESTAMP.
  • STRINGS: Schlüsselnamen werden automatisch aus dem Typ STRING abgeleitet.
  • CUSTOM: Das Schema des Partitionierungsschlüssels wird im Präfix des Quell-URI codiert.

Benutzerdefiniertes Schema für Partitionierungsschlüssel bereitstellen

Für die Erkennung vom Typ CUSTOM muss das Schema im Feld für das Präfix des Quell-URI codiert sein, um Name/Typ-Paare für Partitionierungsschlüssel anzugeben. Wenn sich die Werte nicht korrekt als der angegebene Typ parsen lassen, tritt beim Laden ein Fehler auf.

Wenn Sie z. B. source_uri_prefix auf gs://my_bucket/my_table/{dt:DATE}/{val:STRING} setzen, wird val als STRING und dt als DATE behandelt und gs://my_bucket/my_table als das Präfix des Quell-URI für die übereinstimmenden Dateien extrahiert.

Weitere Informationen finden Sie in den Anleitungen zur Web-UI, zum Befehlszeilentool und zur REST API.

Inkrementelle Ladevorgänge ausführen

Sehen Sie sich das folgende Datenlayout an:

gs://my_bucket/my_table/dt=2019-10-31/val=1/file1
gs://my_bucket/my_table/dt=2018-10-31/val=2/file2
gs://my_bucket/my_table/dt=2017-10-31/val=3/file3
gs://my_bucket/my_table/dt=2016-10-31/val=4/file4

So laden Sie nur Daten vom 31. 10. 2019 (2019-10-31):

  • Legen Sie als Hive-Partitionierungsmodus AUTO, STRINGS oder CUSTOM fest.
  • Legen Sie als Quell-URI-Präfix gs://my_bucket/my_table/ für die Hive-Partitionierungsmodi AUTO oder STRINGS fest. Geben Sie für CUSTOM gs://my_bucket/my_table/{dt:DATE}/{val:INTEGER} an.
  • Verwenden Sie den URI gs://my_bucket/my_table/dt=2019-10-31/*.
  • Die Daten werden mit den Spalten dt und val sowie den entsprechenden Werten 2019-10-31 und 1 geladen.

So laden Sie nur Daten aus bestimmten Dateien:

  • Legen Sie als Hive-Partitionierungsmodus AUTO, STRINGS oder CUSTOM fest.
  • Legen Sie als Quell-URI-Präfix gs://my_bucket/my_table/ für die Hive-Partitionierungsmodi AUTO oder STRINGS fest. Geben Sie für CUSTOM gs://my_bucket/my_table/{dt:DATE}/{val:INTEGER} an.
  • Verwenden Sie die URIs gs://my_bucket/my_table/dt=2017-10-31/val=3/file3,gs://my_bucket/my_table/dt=2016-10-31/val=4/file4.
  • Die Daten werden aus beiden Dateien mit den ausgefüllten Spalten dt und val geladen.

HivePartitioningOptions mithilfe der Web-UI festlegen

So legen Sie die Hive-Partitionierungsoptionen in der Web-UI fest:

  1. Rufen Sie in der Cloud Console die BigQuery-Web-UI auf.

    Zur Cloud Console

  2. Wählen Sie im Bereich Ressourcen das Dataset aus.

  3. Klicken Sie auf die Schaltfläche Tabelle erstellen, um eine neue Tabelle zu erstellen.

  4. Wählen Sie im Drop-down-Menü Tabelle erstellen aus die Option Cloud Storage aus.

    Grafik: Hive-Partitionierungsoptionen

  5. Geben Sie im Feld Datei aus dem Cloud Storage-Bucket auswählen den Dateipfad des Datasets ein und wählen Sie dann den Dateityp aus dem Drop-down aus.

    1. Klicken Sie auf das Kästchen Quelldatenpartitionierung und geben Sie dann das Präfix für den Quell-URI in das dafür vorgesehene Feld ein.
    2. Wählen Sie unter Partitionsinferenzmodus die Option "Typen automatisch ableiten" für AUTO oder "Alle Spalten sind Strings" für STRINGS aus.
    3. Wählen Sie im Drop-down Tabellentyp die Option "Native Tabelle" aus.

HivePartitioningOptions mithilfe des Befehlszeilentools festlegen

Automatische Erkennung des Partitionierungsschlüsseltyps anfordern

bq load --source_format=ORC --hive_partitioning_mode=AUTO \
--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix \
dataset.table gcs_uris

Erkennung von Partitionierungsschlüsseln des Typs STRING anfordern

bq load --source_format=PARQUET --autodetect \
--hive_partitioning_mode=STRINGS \
--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix \
dataset.table gcs_uris

Benutzerdefiniertes Schema für den Partitionierungsschlüssel über das Feld source_uri_prefix bereitstellen

bq load --source_format=JSON --hive_partitioning_mode=CUSTOM \
--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix/custom_schema_encoding \
dataset.table gcs_uris file_schema

Das Schema für den Partitionierungsschlüssel wird unmittelbar nach dem Präfix des Quell-URI codiert. Geben Sie --hive_partitioning_source_uri_prefix im folgenden Format an:

--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix/{key1:TYPE1}/{key2:TYPE2}/{key3:TYPE3}

HivePartitioningOptions mit der REST API festlegen

Die Hive-Partitionierung wird unterstützt, wenn die HivePartitioningOptions auf ExternalDataConfiguration gesetzt werden.

Wenn hivePartitioningOptions.mode auf CUSTOM eingestellt wird, müssen Sie das Schema für den Partitionierungsschlüssel in sourceUriPrefix codieren. Dazu setzen Sie hivePartitioningOptions.sourceUriPrefix auf gs://bucket/path_to_table/{key1:TYPE1}/{key2:TYPE2}/{key3:TYPE3}.