Avro-Daten aus Cloud Storage laden
Avro ist ein Open-Source-Datenformat, in dem serialisierte Daten mit dem jeweiligen Schema in einer Datei gebündelt werden.
Wenn Sie Avro-Daten aus Cloud Storage laden, können Sie Daten in eine neue Tabelle oder Partition laden bzw. an eine vorhandene Tabelle oder Partition anfügen. Ebenso können Sie eine Tabelle oder Partition überschreiben. Beim Laden von Daten in BigQuery werden die Daten in ein Spaltenformat für Capacitor (BigQuery-Speicherformat) umgewandelt.
Wenn Sie Daten aus Cloud Storage in eine BigQuery-Tabelle laden, muss sich das Dataset, das die Tabelle enthält, am selben regionalen oder multiregionalen Standort wie der Cloud Storage-Bucket befinden.
Informationen zum Laden von Avro-Daten aus einer lokalen Datei finden Sie unter Daten aus einer lokalen Datenquelle in BigQuery laden.
Beschränkungen
Beim Laden von Daten aus einem Cloud Storage-Bucket in BigQuery gelten die folgenden Beschränkungen:
- Wenn für den Speicherort Ihres Datasets ein anderer Wert als der multiregionale Wert
US
festgelegt ist, muss sich der Cloud Storage-Bucket in derselben Region befinden oder in derselben Multiregion enthalten sein wie das Dataset. - BigQuery übernimmt bei externen Datenquellen keine Garantie für die Datenkonsistenz. Werden die zugrunde liegenden Daten während der Ausführung der Abfrage geändert, kann dies zu einem unerwarteten Verhalten führen.
- BigQuery unterstützt nicht die Cloud Storage-Objektversionierung. Wenn Sie dem Cloud Storage-URI eine Generierungsnummer hinzufügen, schlägt der Ladejob fehl.
Anforderungen an Eingabedateien
Beachten Sie die folgenden Richtlinien, um resourcesExceeded
-Fehler beim Laden von Avro-Dateien in BigQuery zu vermeiden:
- Die Zeilengröße darf maximal 50 MB betragen.
- Wenn die Zeile viele Arrayfelder oder sehr lange Arrayfelder enthält, unterteilen Sie die Arraywerte in separate Felder.
Hinweise
Erteilen Sie IAM-Rollen (Identity and Access Management), über die Nutzer die erforderlichen Berechtigungen zum Ausführen der einzelnen Aufgaben in diesem Dokument erhalten, und erstellen Sie ein Dataset zum Speichern Ihrer Daten.
Erforderliche Berechtigungen
Zum Laden von Daten in BigQuery benötigen Sie IAM-Berechtigungen, um einen Ladejob auszuführen und Daten in BigQuery-Tabellen und -Partitionen zu laden. Zum Laden von Daten aus Cloud Storage sind außerdem IAM-Berechtigungen für den Zugriff auf den Bucket erforderlich, der Ihre Daten enthält.
Berechtigungen zum Laden von Daten in BigQuery
Wenn Sie Daten in eine neue BigQuery-Tabelle oder -Partition laden oder eine vorhandene Tabelle oder Partition anfügen oder überschreiben möchten, benötigen Sie die folgenden IAM-Berechtigungen:
bigquery.tables.create
bigquery.tables.updateData
bigquery.tables.update
bigquery.jobs.create
Die folgenden vordefinierten IAM-Rollen enthalten jeweils die Berechtigungen, die zum Laden von Daten in eine BigQuery-Tabelle oder -Partition erforderlich sind:
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
(einschließlich der Berechtigungbigquery.jobs.create
)bigquery.user
(einschließlich der Berechtigungbigquery.jobs.create
)bigquery.jobUser
(einschließlich der Berechtigungbigquery.jobs.create
)
Wenn Sie die Berechtigung bigquery.datasets.create
haben, können Sie außerdem mit einem Ladejob Tabellen in den von Ihnen erstellten Datasets anlegen und aktualisieren.
Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.
Berechtigungen zum Laden von Daten aus Cloud Storage
Um die Berechtigungen zu erhalten, die Sie zum Laden von Daten aus einem Cloud Storage-Bucket benötigen, bitten Sie Ihren Administrator, Ihnen die IAM-Rolle
Storage Admin (roles/storage.admin
) für den Bucket zu erteilen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.
Diese vordefinierte Rolle enthält die Berechtigungen, die zum Laden von Daten aus einem Cloud Storage-Bucket erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind erforderlich, um Daten aus einem Cloud Storage-Bucket zu laden:
-
storage.buckets.get
-
storage.objects.get
-
storage.objects.list (required if you are using a URI wildcard)
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Dataset und Tabelle erstellen
Zum Speichern Ihrer Daten müssen Sie ein BigQuery-Dataset und dann eine BigQuery-Tabelle in diesem Dataset erstellen.
Vorteile von Avro
Avro ist das bevorzugte Format zum Laden von Daten in BigQuery. Das Laden von Avro-Dateien hat gegenüber CSV und JSON (durch Zeilenumbruch getrennt) folgende Vorteile:
- Für das Avro-Binärformat gilt:
- bietet kürzere Ladezeiten. Die Daten können parallel gelesen werden, auch wenn die Datenblöcke komprimiert sind.
- Es erfordert keine manuellen Eingaben oder Serialisierung.
- ist einfacher zu analysieren, da keine Codierungsprobleme wie in anderen Formaten wie ASCII auftreten.
- Wenn Sie Avro-Dateien in BigQuery laden, wird das Tabellenschema automatisch aus den selbstbeschreibenden Quelldaten abgerufen.
Avro-Schemas
Wenn Sie Avro-Dateien in eine neue BigQuery-Tabelle laden, wird das Tabellenschema automatisch mithilfe der Quelldaten abgerufen. Wenn BigQuery das Schema aus den Quelldaten abruft, wird die alphabetisch letzte Datei verwendet.
In Cloud Storage gibt es z. B. die folgenden Avro-Dateien:
gs://mybucket/00/ a.avro z.avro gs://mybucket/01/ b.avro
Wenn Sie diesen Befehl im bq-Befehlszeilentool ausführen, werden alle Dateien (als durch Kommas getrennte Liste) geladen und das Schema wird von mybucket/01/b.avro
abgeleitet:
bq load \ --source_format=AVRO \ dataset.table \ "gs://mybucket/00/*.avro","gs://mybucket/01/*.avro"
Wenn Sie mehrere Avro-Dateien mit verschiedenen Avro-Schemas importieren, müssen alle Schemas mit der Schema-Auflösung von Avro kompatibel sein.
Wenn das Schema in BigQuery erkannt wird, werden bestimmte Avro-Datentypen in BigQuery-Datentypen konvertiert, damit sie mit der GoogleSQL-Syntax kompatibel sind. Weitere Informationen finden Sie unter Avro-Konvertierungen.
Wenn Sie ein Tabellenschema zum Erstellen externer Tabellen bereitstellen möchten, legen Sie in der BigQuery API oder im--reference_file_schema_uri
-Parameter des bq-Befehlszeilentools das referenceFileSchemaUri
-Attribut auf die URL der Referenzdatei fest.
Beispiel: --reference_file_schema_uri="gs://mybucket/schema.avro"
.
Avro-Komprimierung
BigQuery unterstützt die folgenden Komprimierungscodecs für Avro-Dateiinhalte:
Snappy
DEFLATE
Avro-Daten in eine neue Tabelle laden
Wählen Sie eine der folgenden Optionen, um Avro-Daten aus Cloud Storage in eine neue BigQuery-Tabelle zu laden:
Console
Öffnen Sie in der Google Cloud Console die Seite „BigQuery“.
Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.
Maximieren Sie die Option
Aktionen und klicken Sie auf Öffnen.Klicken Sie im Detailfeld auf Tabelle erstellen.
Gehen Sie auf der Seite Tabelle erstellen im Abschnitt Quelle so vor:
Wählen Sie unter Tabelle erstellen aus die Option Google Cloud Storage aus.
Suchen Sie im Feld für die Quelle nach dem Cloud Storage-URI oder geben Sie ihn direkt ein. In der Google Cloud Console kann zwar nur ein URI eingefügt werden, aber Platzhalter werden unterstützt. Der Cloud Storage-Bucket muss sich am selben Standort wie das Dataset befinden, das die von Ihnen erstellte Tabelle enthält.
Wählen Sie als Dateiformat die Option Avro aus.
Gehen Sie auf der Seite Tabelle erstellen im Abschnitt Ziel folgendermaßen vor:
- Wählen Sie für Dataset name (Dataset-Name) das entsprechende Dataset aus.
- Achten Sie darauf, dass Table type (Tabellentyp) auf Native table (Native Tabelle) eingestellt ist.
- Geben Sie im Feld Table name (Tabellenname) den Namen der Tabelle ein, die Sie in BigQuery erstellen.
Im Abschnitt Schema ist muss nichts unternommen werden. Das Schema ist in Avro-Dateien selbstbeschreibend.
(Optional) Wählen Sie zum Partitionieren der Tabelle die jeweiligen Optionen unter Partition and cluster settings (Partitions- und Clustereinstellungen) aus. Weitere Informationen finden Sie unter Partitionierte Tabellen erstellen.
Optional: Klicken Sie unter Partitionierungsfilter auf das Kästchen Partitionsfilter anfordern, damit Nutzer eine
WHERE
-Klausel zum Angeben der abzufragenden Partitionen einfügen müssen. Das Anfordern eines Partitionsfilters kann die Kosten senken und die Leistung verbessern. Weitere Informationen finden Sie unter Partitionierte Tabellen abfragen. Diese Option ist nicht verfügbar, wenn Keine Partitionierung ausgewählt ist.Optional: Wenn Sie die Tabelle clustern möchten, geben Sie im Feld Clustering-Reihenfolge einen bis vier Feldnamen ein.
(Optional) Klicken Sie auf Erweiterte Optionen.
- Lassen Sie unter Schreibeinstellung die Option Schreiben, wenn leer ausgewählt. Diese Option erstellt eine neue Tabelle und lädt Ihre Daten in diese Tabelle.
- Übernehmen Sie unter Unbekannte Werte das Kästchen Unbekannte Werte ignorieren ohne Häkchen. Diese Option gilt nur für CSV- und JSON-Dateien.
- Klicken Sie unter Verschlüsselung auf Vom Kunden verwalteter Schlüssel, um einen Cloud Key Management Service-Schlüssel zu verwenden. Wenn Sie die Einstellung Von Google verwalteter Schlüssel übernehmen, verschlüsselt BigQuery inaktive Daten.
Klicken Sie auf Tabelle erstellen.
SQL
Verwenden Sie die DDL-Anweisung LOAD DATA
.
Im folgenden Beispiel wird eine Avro-Datei in die neue Tabelle mytable
geladen.
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
LOAD DATA OVERWRITE mydataset.mytable FROM FILES ( format = 'avro', uris = ['gs://bucket/path/file.avro']);
Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
bq
Verwenden Sie den Befehl bq load
, geben Sie AVRO
mit dem Flag --source_format
an und fügen Sie einen Cloud Storage-URI ein.
Sie können einen einzelnen URI, eine durch Kommas getrennte Liste von URIs oder einen URI mit Platzhalter einfügen.
Optional: Geben Sie das Flag --location
an und legen Sie als Wert Ihren Standort fest.
Andere optionale Flags sind:
--time_partitioning_type
: Aktiviert die zeitbasierte Partitionierung für eine Tabelle und legt den Partitionstyp fest. Mögliche Werte sindHOUR
,DAY
,MONTH
undYEAR
. Dieses Flag ist optional, wenn Sie eine Tabelle erstellen, die nach einerDATE
-,DATETIME
- oderTIMESTAMP
-Spalte partitioniert wird. Der Standardpartitionstyp für die zeitbasierte Partitionierung istDAY
. Sie können die Partitionierungsspezifikation für eine vorhandene Tabelle nicht ändern.--time_partitioning_expiration
: Eine Ganzzahl, die (in Sekunden) angibt, wann eine zeitbasierte Partition gelöscht werden soll. Die Ablaufzeit entspricht dem UTC-Datum der Partition plus dem ganzzahligen Wert.--time_partitioning_field
: DieDATE
- oderTIMESTAMP
-Spalte zum Erstellen einer partitionierten Tabelle. Wenn die zeitbasierte Partitionierung ohne Angabe dieses Werts aktiviert wird, erstellt BigQuery eine nach Aufnahmezeit partitionierte Tabelle.--require_partition_filter
: Wenn diese Option aktiviert ist, müssen die Nutzer eineWHERE
-Klausel zur Angabe der abzufragenden Partitionen einfügen. Das Anfordern eines Partitionsfilters kann die Kosten senken und die Leistung verbessern. Weitere Informationen finden Sie unter Partitionierte Tabellen abfragen.--clustering_fields
: Eine durch Kommas getrennte Liste mit bis zu vier Spaltennamen zum Erstellen einer geclusterten Tabelle.--destination_kms_key
: Der Cloud KMS-Schlüssel für die Verschlüsselung der Tabellendaten.Weitere Informationen zu partitionierten Tabellen finden Sie unter:
Weitere Informationen zu geclusterten Tabellen finden Sie unter:
Weitere Informationen zur Tabellenverschlüsselung finden Sie unter:
Mit dem folgenden Befehl können Sie Avro-Daten in BigQuery laden:
bq --location=location load \ --source_format=format \ dataset.table \ path_to_source
Dabei gilt:
- location ist Ihr Standort. Das Flag
--location
ist optional. Wenn Sie BigQuery beispielsweise in der Region Tokio verwenden, können Sie für das Flag den Wertasia-northeast1
festlegen. Mit der Datei .bigqueryrc können Sie einen Standardwert für den Standort festlegen. - format ist
AVRO
. - dataset ist ein vorhandenes Dataset.
- table ist der Name der Tabelle, in die Sie Daten laden.
- path_to_source ist ein vollständig qualifizierter Cloud Storage-URI oder eine durch Kommas getrennte Liste von URIs. Platzhalter werden ebenfalls unterstützt.
Beispiele:
Mit dem folgenden Befehl werden Daten aus gs://mybucket/mydata.avro
in eine Tabelle mit dem Namen mytable
in mydataset
geladen.
bq load \
--source_format=AVRO \
mydataset.mytable \
gs://mybucket/mydata.avro
Mit dem folgenden Befehl werden Daten aus gs://mybucket/mydata.avro
in eine nach Aufnahmezeit partitionierte Tabelle mit dem Namen mytable
in mydataset
geladen:
bq load \
--source_format=AVRO \
--time_partitioning_type=DAY \
mydataset.mytable \
gs://mybucket/mydata.avro
Mit dem folgenden Befehl werden Daten aus gs://mybucket/mydata.avro
in eine neue partitionierte Tabelle mit dem Namen mytable
in mydataset
geladen. Die Tabelle ist nach der Spalte mytimestamp
partitioniert.
bq load \
--source_format=AVRO \
--time_partitioning_field mytimestamp \
mydataset.mytable \
gs://mybucket/mydata.avro
Mit dem folgenden Befehl werden Daten aus mehreren Dateien in gs://mybucket/
in eine Tabelle namens mytable
in mydataset
geladen. Für den Cloud Storage-URI wird ein Platzhalter verwendet.
bq load \
--source_format=AVRO \
mydataset.mytable \
gs://mybucket/mydata*.avro
Mit dem folgenden Befehl werden Daten aus mehreren Dateien in gs://mybucket/
in eine Tabelle namens mytable
in mydataset
geladen. Der Befehl enthält eine durch Kommas getrennte Liste von Cloud Storage-URIs mit Platzhaltern.
bq load \
--source_format=AVRO \
mydataset.mytable \
"gs://mybucket/00/*.avro","gs://mybucket/01/*.avro"
API
Erstellen Sie einen
load
-Job, der auf die Quelldaten in Cloud Storage verweist.Optional: Geben Sie Ihren Standort im Attribut
location
im AbschnittjobReference
der Jobressource an.Das Attribut
source URIs
muss vollständig qualifiziert sein und das Formatgs://bucket/object
haben. Jeder URI kann ein Platzhalterzeichen (*) enthalten.Geben Sie das Avro-Datenformat an. Legen Sie dazu für das Attribut
sourceFormat
den WertAVRO
fest.Rufen Sie zum Prüfen des Jobstatus
jobs.get(job_id*)
auf, wobei job_id die ID des Jobs ist, der von der ursprünglichen Anfrage zurückgegeben wurde.- Wenn
status.state = DONE
zurückgegeben wird, wurde der Job erfolgreich abgeschlossen. - Wenn das Attribut
status.errorResult
zurückgegeben wird, ist die Anfrage fehlgeschlagen. Das Objekt enthält in diesem Fall Angaben zur Fehlerursache. Wenn eine Anfrage fehlschlägt, wird keine Tabelle erstellt und es werden keine Daten geladen. - Wenn das Attribut
status.errorResult
nicht vorhanden ist, wurde der Job erfolgreich abgeschlossen. Es können aber einige nicht schwerwiegende Fehler aufgetreten sein, z. B. Probleme beim Importieren einiger Zeilen. Nicht schwerwiegende Fehler werden im Attributstatus.errors
des Objekts des zurückgegebenen Jobs aufgeführt.
- Wenn
API-Hinweise:
Ladejobs sind atomar und konsistent. Wenn ein Ladejob fehlschlägt, sind keine der zu ladenden Daten verfügbar. Wenn ein Ladejob erfolgreich ist, sind alle Daten verfügbar.
Erstellen Sie als Best Practice eine nur einmal vorkommende ID und übergeben Sie diese als
jobReference.jobId
, wennjobs.insert
zum Erstellen eines Ladejobs aufgerufen wird. Diese Vorgehensweise ist weniger anfällig für Netzwerkfehler, da der Client anhand der bekannten Job-ID einen Abruf oder einen neuen Versuch ausführen kann.Das Aufrufen von
jobs.insert
für eine bestimmte Job-ID ist idempotent. Das bedeutet, dass Sie den Aufruf für dieselbe Job-ID beliebig oft wiederholen können. Höchstens einer dieser Vorgänge ist dann erfolgreich.
Go
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Java
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Node.js
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Python
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
JSON-Daten aus Avro-Daten extrahiere
Es gibt zwei Möglichkeiten, dafür zu sorgen, dass Avro-Daten als JSON
-Daten in BigQuery geladen werden:
Annotieren Sie das Avro-Schema mit
sqlType
, das aufJSON
gesetzt ist. Beispiel: Wenn Sie Daten mit dem folgenden Avro-Schema laden, wird diejson_field
-Spalte alsJSON
-Typ gelesen:{ "type": {"type": "string", "sqlType": "JSON"}, "name": "json_field" }
Geben Sie das Schema der BigQuery-Zieltabelle explizit an und legen Sie den Spaltentyp auf
JSON
fest. Weitere Informationen finden Sie unter Schema angeben.
Wenn Sie JSON weder im Avro-Schema noch im BigQuery-Tabellenschema angeben, werden die Daten als STRING
gelesen.
Avro-Daten an eine Tabelle anfügen oder Tabelle mit Avro-Daten überschreiben
Zusätzliche Daten können entweder aus Quelldateien oder durch das Anfügen von Abfrageergebnissen in eine Tabelle geladen werden.
In der Google Cloud Console können Sie mit der Option Schreibeinstellung festlegen, welche Aktion beim Laden von Daten aus einer Quelldatei oder aus einem Abfrageergebnis ausgeführt werden soll.
Sie haben folgende Möglichkeiten, wenn Sie zusätzliche Daten in eine Tabelle laden:
Console-Option | bq-Tool-Flag | BigQuery API-Attribut | Beschreibung |
---|---|---|---|
Schreiben, wenn leer | Nicht unterstützt | WRITE_EMPTY |
Daten werden nur geschrieben, wenn die Tabelle leer ist. |
An Tabelle anfügen | --noreplace oder --replace=false . Wenn --[no]replace nicht angegeben ist, werden Daten standardmäßig angefügt. |
WRITE_APPEND |
(Standard) Daten werden an das Ende der Tabelle angefügt. |
Tabelle überschreiben | --replace oder --replace=true |
WRITE_TRUNCATE |
Alle vorhandenen Daten in einer Tabelle werden gelöscht, bevor die neuen Daten geschrieben werden. Mit dieser Aktion werden auch das Tabellenschema und die Sicherheit auf Zeilenebene gelöscht und alle Cloud KMS-Schlüssel entfernt. |
Wenn Sie Daten in eine vorhandene Tabelle laden, kann der Ladejob die Daten anfügen oder die Tabelle damit überschreiben.
So fügen Sie Avro-Daten an eine Tabelle an oder überschreiben die Tabelle damit:
Console
Öffnen Sie in der Google Cloud Console die Seite „BigQuery“.
Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.
Maximieren Sie die Option
Aktionen und klicken Sie auf Öffnen.Klicken Sie im Detailfeld auf Tabelle erstellen.
Gehen Sie auf der Seite Tabelle erstellen im Abschnitt Quelle so vor:
- Wählen Sie unter Create table from (Tabelle erstellen aus) die Option "Google Cloud Storage" aus.
Suchen Sie im Feld für die Quelle nach dem Cloud Storage-URI oder geben Sie ihn ein. In der Google Cloud Console kann zwar nur ein URI eingefügt werden, aber Platzhalter werden unterstützt. Der Cloud Storage-Bucket muss sich am selben Standort befinden wie das Dataset, das die Tabelle enthält, in der Sie Daten anfügen oder überschreiben.
Wählen Sie als Dateiformat die Option Avro aus.
Gehen Sie auf der Seite Tabelle erstellen im Abschnitt Ziel folgendermaßen vor:
Wählen Sie für Dataset-Name das entsprechende Dataset aus.
Geben Sie im Feld für den Tabellennamen den Namen der Tabelle ein, in der Daten in BigQuery angefügt oder überschrieben werden.
Achten Sie darauf, dass Table type (Tabellentyp) auf Native table (Native Tabelle) eingestellt ist.
Im Abschnitt Schema ist muss nichts unternommen werden. Das Schema ist in Avro-Dateien selbstbeschreibend.
Behalten Sie für Partitions- und Clustereinstellungen die Standardwerte bei. Sie können eine Tabelle nicht durch Anfügen oder Überschreiben von Daten in eine partitionierte oder geclusterte Tabelle umwandeln. Außerdem ist es mit der Google Cloud Console nicht möglich, Daten in partitionierten oder geclusterten Tabellen in einem Ladejob anzufügen bzw. zu überschreiben.
Klicken Sie auf Erweiterte Optionen.
- Wählen Sie für Write preference (Schreibeinstellung) die Option Append to table (An Tabelle anfügen) oder Overwrite table (Tabelle überschreiben) aus.
- Übernehmen Sie unter Unbekannte Werte das Kästchen Unbekannte Werte ignorieren ohne Häkchen. Diese Option gilt nur für CSV- und JSON-Dateien.
- Klicken Sie unter Verschlüsselung auf Vom Kunden verwalteter Schlüssel, um einen Cloud Key Management Service-Schlüssel zu verwenden. Wenn Sie die Einstellung Von Google verwalteter Schlüssel übernehmen, verschlüsselt BigQuery inaktive Daten.
Klicken Sie auf Tabelle erstellen.
SQL
Verwenden Sie die DDL-Anweisung LOAD DATA
.
Im folgenden Beispiel wird eine Avro-Datei an die mytable
-Tabelle angefügt:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
LOAD DATA INTO mydataset.mytable FROM FILES ( format = 'avro', uris = ['gs://bucket/path/file.avro']);
Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
bq
Geben Sie den Befehl bq load
mit dem Flag --replace
ein, um die Tabelle zu überschreiben. Verwenden Sie das Flag --noreplace
, um Daten an die Tabelle anzufügen. Wenn kein Flag angegeben ist, werden Daten standardmäßig angefügt. Geben Sie das Flag --source_format
an und legen Sie dafür AVRO
fest. Da Avro-Schemas automatisch aus den sich selbst beschreibenden Quelldaten abgerufen werden, müssen Sie keine Schemadefinition angeben.
Optional: Geben Sie das Flag --location
an und legen Sie als Wert Ihren Standort fest.
Andere optionale Flags sind:
--destination_kms_key
: Der Cloud KMS-Schlüssel für die Verschlüsselung der Tabellendaten.
bq --location=location load \ --[no]replace \ --source_format=format \ dataset.table \ path_to_source
Dabei gilt:
- location ist Ihr Standort.
Das Flag
--location
ist optional. Mit der Datei .bigqueryrc können Sie für den Standort einen Standardwert festlegen. - format ist
AVRO
. - dataset ist ein vorhandenes Dataset.
- table ist der Name der Tabelle, in die Sie Daten laden.
- path_to_source ist ein vollständig qualifizierter Cloud Storage-URI oder eine durch Kommas getrennte Liste von URIs. Platzhalter werden ebenfalls unterstützt.
Beispiele:
Der folgende Befehl lädt Daten aus gs://mybucket/mydata.avro
und überschreibt eine Tabelle namens mytable
in mydataset
.
bq load \
--replace \
--source_format=AVRO \
mydataset.mytable \
gs://mybucket/mydata.avro
Mit dem folgenden Befehl werden Daten aus gs://mybucket/mydata.avro
geladen und an eine Tabelle namens mytable
in mydataset
angefügt.
bq load \
--noreplace \
--source_format=AVRO \
mydataset.mytable \
gs://mybucket/mydata.avro
Informationen zum Anfügen und Überschreiben von partitionierten Tabellen über das bq-Befehlszeilentool finden Sie unter Daten in partitionierten Tabellen anfügen und überschreiben.
API
Erstellen Sie einen
load
-Job, der auf die Quelldaten in Cloud Storage verweist.Optional: Geben Sie Ihren Standort im Attribut
location
im AbschnittjobReference
der Jobressource an.Das Attribut
source URIs
muss vollständig qualifiziert sein und das Formatgs://bucket/object
haben. Sie können mehrere URIs als durch Kommas getrennte Liste einfügen. Platzhalter werden ebenfalls unterstützt.Geben Sie das Datenformat an. Legen Sie dazu das Attribut
configuration.load.sourceFormat
aufAVRO
fest.Geben Sie die Schreibeinstellung an. Legen Sie dazu das Attribut
configuration.load.writeDisposition
aufWRITE_TRUNCATE
oderWRITE_APPEND
fest.
Go
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Java
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Node.js
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Python
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Nach Hive partitionierte Avro-Daten laden
BigQuery unterstützt das Laden von mit Hive partitionierten Avro-Daten, die in Cloud Storage gespeichert sind, und füllt die Hive-Partitionierungsspalten so aus, als wären Sie Spalten in der verwalteten BigQuery-Zieltabelle. Weitere Informationen finden Sie unter Extern partitionierte Daten aus Cloud Storage laden.
Avro-Konvertierungen
BigQuery konvertiert Avro-Datentypen in folgende BigQuery-Datentypen:
Einfache Typen
BigQuery-Datentyp | Hinweise | |
---|---|---|
null | Diese Werte werden von BigQuery ignoriert | |
boolean | BOOLEAN | |
int | INTEGER | |
long | INTEGER | |
float | FLOAT | |
double | FLOAT | |
bytes | BYTES | |
string | STRING | Nur UTF-8 |
Logische Typen
Standardmäßig ignoriert BigQuery das Attribut logicalType
für die meisten Typen und verwendet stattdessen den zugrunde liegenden Avro-Typ. Um logische Avro-Typen in die entsprechenden BigQuery-Datentypen zu konvertieren, setzen Sie das Flag --use_avro_logical_types
mit dem bq-Befehlszeilentool auf true
oder legen Sie das Attribut useAvroLogicalTypes
in der Jobressource fest, wenn Sie die Methode jobs.insert
aufrufen, um einen Ladejob zu erstellen.
Die folgende Tabelle zeigt die Umwandlung von logischen Avro-Typen in BigQuery-Datentypen.
BigQuery-Datentyp: Logischer Typ deaktiviert | BigQuery-Datentyp: Logischer Typ aktiviert | |
---|---|---|
date | INTEGER | DATE |
time-millis | INTEGER | TIME |
time-micros | INTEGER (umgewandelt von LONG) | TIME |
timestamp-millis | INTEGER (umgewandelt von LONG) | TIMESTAMP |
timestamp-micros | INTEGER (umgewandelt von LONG) | TIMESTAMP |
local-timestamp-millis | INTEGER (umgewandelt von LONG) | DATETIME |
local-timestamp-micros | INTEGER (umgewandelt von LONG) | DATETIME |
Dauer | BYTES (umgewandelt vom Typ fixed der Größe 12) |
BYTES (umgewandelt vom Typ fixed der Größe 12) |
decimal | NUMERIC, BIGNUMERIC, oder STRING (sieheLogischer Typ "decimal"). | NUMERIC, BIGNUMERIC, oder STRING (sieheLogischer Typ "decimal"). |
Weitere Informationen zu Avro-Datentypen finden Sie in der Spezifikation zu Apache Avro™ 1.8.2.
Logischer Typ "date"
Geben Sie in jeder Avro-Datei, die Sie laden möchten, logische Datumstypen im folgenden Format an:
{
"type": {"logicalType": "date", "type": "int"},
"name": "date_field"
}
Logischer Typ "decimal"
Die logischen Typen Decimal
können in die Typen NUMERIC
, BIGNUMERIC
oder STRING
umgewandelt werden. Der umgewandelte Typ hängt von den Genauigkeits- und Skalierungsparametern des logischen Typs decimal
und den angegebenen Dezimalzieltypen ab. Geben Sie den Dezimalzieltyp so an:
- Verwenden Sie für einen Ladejob mit der
jobs.insert
API das FeldJobConfigurationLoad.decimalTargetTypes
. - Verwenden Sie für einen Ladejob mit dem Befehl
bq load
im bq-Befehlszeilentool das Flag--decimal_target_types
. - Für das Abfragen einer Tabelle mit externen Quellen verwenden Sie das Feld
ExternalDataConfiguration.decimalTargetTypes
. - Für eine nichtflüchtige externe Tabelle, die mit DDL erstellt wurde: Verwenden Sie die Option
decimal_target_types
.
Wenn die dezimalen Zieltypen nicht angegeben sind, können Sie aus Gründen der Abwärtskompatibilität eine Avro-Datei mit einer bytes
-Spalte mit dem logischen Typ decimal
in eine BYTES
-Spalte einer vorhandenen Tabelle laden. In diesem Fall wird der logische Typ decimal
für die Spalte in der Avro-Datei ignoriert. Dieser Conversion-Modus wurde verworfen und wird demnächst möglicherweise entfernt.
Weitere Informationen zum logischen Avro-Typ decimal
finden Sie in der Spezifikation zu Apache Avro™ 1.8.2.
Logischer Typ "time"
In jeder Avro-Datei, die Sie laden möchten, müssen Sie logische Zeittypen in einem der folgenden Formate angeben.
Für eine Genauigkeit im Millisekundenbereich:
{
"type": {"logicalType": "time-millis", "type": "int"},
"name": "time_millis_field"
}
Für eine Genauigkeit im Mikrosekundenbereich:
{
"type": {"logicalType": "time-micros", "type": "int"},
"name": "time_micros_field"
}
Logischer Typ "timestamp"
In jeder Avro-Datei, die Sie laden möchten, müssen Sie logische Zeitstempeltypen in einem der folgenden Formate angeben.
Für eine Genauigkeit im Millisekundenbereich:
{
"type": {"logicalType": "timestamp-millis", "type": "long"},
"name": "timestamp_millis_field"
}
Für eine Genauigkeit im Mikrosekundenbereich:
{
"type": {"logicalType": "timestamp-micros", "type": "long"},
"name": "timestamp_micros_field"
}
Logischer Typ „Local-Timestamp“
In jeder Avro-Datei, die Sie laden möchten, müssen Sie einen logischen Typ „local-timestamp“ in einem der folgenden Formate angeben.
Für eine Genauigkeit im Millisekundenbereich:
{
"type": {"logicalType": "local-timestamp-millis", "type": "long"},
"name": "local_timestamp_millis_field"
}
Für eine Genauigkeit im Mikrosekundenbereich:
{
"type": {"logicalType": "local-timestamp-micros", "type": "long"},
"name": "local_timestamp_micros_field"
}
Komplexe Typen
BigQuery-Datentyp | Hinweise | |
---|---|---|
record | RECORD |
|
enum | STRING |
|
array | Wiederkehrende Felder | Arrays von Arrays werden nicht unterstützt. Arrays, die nur NULL-Typen enthalten, werden ignoriert. |
map<T> | RECORD | BigQuery konvertiert das Avro-Feld "map<T>" in den wiederkehrenden Datentyp RECORD mit zwei Feldern: einem Schlüssel und einem Wert. BigQuery speichert den Schlüssel als STRING und konvertiert den Wert in seinen entsprechenden Datentyp in BigQuery. |
union |
|
|
fixed | BYTES |
|
Beschränkungen
- Die verschachtelte Arrayformatierung wird in BigQuery nicht unterstützt. Avro-Dateien mit diesem Format müssen vor dem Import konvertiert werden.
- In einer Avro-Datei dürfen Namen und Namespaces für einen vollständigen Namen nur alphanumerische Zeichen und den Unterstrich
_
enthalten. Der folgende reguläre Ausdruck zeigt die zulässigen Zeichen:[A-Za-z_][A-Za-z0-9_]*
Weitere Informationen finden Sie unter Limits für BigQuery-Ladejobs.