Tabellenschemas ändern
In diesem Dokument wird beschrieben, wie Sie die Schemadefinitionen für vorhandene BigQuery-Tabellen ändern können.
Sie können die meisten in diesem Dokument beschriebenen Schemaänderungen mit DDL-Anweisungen (Data Definition Language, Datendefinitionssprache) vornehmen. Für diese Anweisungen fallen keine Gebühren an.
Sie können ein Tabellenschema auf alle hier beschriebenen Arten ändern. Exportieren Sie Ihre Tabellendaten zuerst nach Cloud Storage, und laden Sie die Daten dann in eine neue Tabelle mit der geänderten Schemadefinition. BigQuery-Lade- und Exportjobs sind kostenlos. Es fallen jedoch Kosten für das Speichern der exportierten Daten in Cloud Storage an. In den folgenden Abschnitten werden andere Möglichkeiten zum Ausführen verschiedener Arten von Schemaänderungen beschrieben.
Spalte hinzufügen
Sie haben folgende Möglichkeiten, Spalten zur Schemadefinition einer vorhandenen Tabelle hinzuzufügen:
- Fügen Sie eine neue leere Spalte hinzu.
- Überschreiben Sie eine Tabelle mit einem Lade- oder Abfragejob.
- Hängen Sie Daten an eine Tabelle mit einem Lade- oder Abfragejob an.
Beim Hinzufügen von Spalten müssen die BigQuery-Regeln für Spaltennamen beachtet werden. Weitere Informationen zum Erstellen von Schemakomponenten finden Sie unter Schema angeben.
Leere Spalte hinzufügen
Wenn Sie einem vorhandenen Tabellenschema neue Spalten hinzufügen, müssen die Spalten den Modus NULLABLE
oder REPEATED
haben. Sie können einem vorhandenen Tabellenschema keine REQUIRED
-Spalte hinzufügen. Das Hinzufügen einer REQUIRED
-Spalte zu einem vorhandenen Tabellenschema in der API oder dem -Befehlszeilentool führt zu einem Fehler. Sie können jedoch eine verschachtelte Spalte vom Typ REQUIRED
als Teil des neuen RECORD
-Felds erstellen.
REQUIRED
-Spalten können nur hinzugefügt werden, wenn Sie beim Laden von Daten eine Tabelle erstellen oder wenn Sie eine leere Tabelle mit einer Schemadefinition erstellen.
So fügen Sie der Schemadefinition einer Tabelle leere Spalten hinzu:
Console
Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.
Maximieren Sie im Bereich Explorer Ihr Projekt und das Dataset und wählen Sie dann die Tabelle aus.
Klicken Sie im Detailbereich auf den Tab Schema.
Klicken Sie auf Schema bearbeiten. Eventuell müssen Sie scrollen, um diese Schaltfläche zu sehen.
Klicken Sie auf der Seite Aktuelles Schema unter Neue Felder auf Feld hinzufügen.
Wenn Sie die gewünschten Spalten hinzugefügt haben, klicken Sie auf Save (Speichern).
SQL
Verwenden Sie die DDL-Anweisung ALTER TABLE ADD COLUMN
:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
ALTER TABLE mydataset.mytable ADD COLUMN new_column STRING;
Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
bq
Führen Sie den Befehl bq update
aus und geben Sie dabei eine JSON-Schemadatei an. Wenn sich die zu aktualisierende Tabelle in einem anderen Projekt als Ihrem Standardprojekt befindet, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu: PROJECT_ID:DATASET
.
bq update PROJECT_ID:DATASET.TABLE SCHEMA
Dabei gilt:
PROJECT_ID
ist Ihre Projekt-ID.DATASET
: der Name des Datasets, das die zu aktualisierende Tabelle enthält.TABLE
: der Name der zu aktualisierenden Tabelle.SCHEMA
: der Pfad zur JSON-Schemadatei auf Ihrem lokalen Rechner.
Wenn Sie ein Inline-Schema angeben, können Sie nicht die Spaltenbeschreibung, den Modus und den Typ RECORD
(STRUCT
) angeben. Alle Spaltenmodi sind standardmäßig auf NULLABLE
gesetzt. Wenn Sie also einem RECORD
eine neue verschachtelte Spalte hinzufügen, müssen Sie eine JSON-Schemadatei bereitstellen.
Wenn Sie versuchen, Spalten mithilfe einer Inline-Schemadefinition hinzuzufügen, müssen Sie die gesamte Schemadefinition einschließlich der neuen Spalten angeben. Da Sie keine Spaltenmodi mithilfe einer Inline-Schemadefinition angeben können, ändert jede Aktualisierung alle vorhandenen REPEATED
-Spalten in NULLABLE
, was folgenden Fehler erzeugt: BigQuery error in update
operation: Provided Schema does not match Table
PROJECT_ID:dataset.table. Field field has changed mode
from REPEATED to NULLABLE.
Die bevorzugte Methode zum Hinzufügen von Spalten zu einer vorhandenen Tabelle mit dem -Befehlszeilentool ist das Bereitstellen einer JSON-Schemadatei.
So fügen Sie dem Schema einer Tabelle mithilfe einer JSON-Schemadatei leere Spalten hinzu:
Führen Sie zuerst den Befehl
bq show
mit dem Flag--schema
aus und schreiben Sie das vorhandene Tabellenschema in eine Datei. Wenn sich die zu aktualisierende Tabelle in einem anderen Projekt als Ihrem Standardprojekt befindet, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu:PROJECT_ID:DATASET
.bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA
Dabei gilt:
PROJECT_ID
ist Ihre Projekt-ID.DATASET
: der Name des Datasets, das die zu aktualisierende Tabelle enthält.TABLE
: der Name der zu aktualisierenden Tabelle.SCHEMA
: die Schemadefinitionsdatei, die auf Ihren lokalen Rechner geschrieben wird.
Wenn Sie beispielsweise die Schemadefinition von
mydataset.mytable
in eine Datei schreiben möchten, geben Sie den unten aufgeführten Befehl ein.mydataset.mytable
befindet sich in Ihrem Standardprojekt.bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.json
Öffnen Sie die Schemadatei in einem Texteditor. Das Schema sollte so aussehen:
[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]
Fügen Sie die neuen Spalten am Ende der Schemadefinition hinzu. Wenn Sie versuchen, neue Spalten an anderer Stelle im Array hinzuzufügen, wird der folgende Fehler zurückgegeben:
BigQuery error in update operation: Precondition Failed
.Mit einer JSON-Datei können Sie für neue Spalten Beschreibungen, die Modi
NULLABLE
oderREPEATED
undRECORD
-Typen angeben. Wenn Sie beispielsweise die Schemadefinition aus dem vorherigen Schritt verwenden, sieht Ihr neues JSON-Array so aus. In diesem Beispiel wird die neuecolumn4
-Spalte mit dem NamenNULLABLE
hinzugefügt.column4
enthält eine Beschreibung.[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" }, { "description": "my new column", "mode": "NULLABLE", "name": "column4", "type": "STRING" } ]
Weitere Informationen zum Arbeiten mit JSON-Schemadateien finden Sie unter JSON-Schemadatei festlegen.
Nachdem Sie die Schemadatei aktualisiert haben, führen Sie den folgenden Befehl aus, um die Schemadefinition der Tabelle zu aktualisieren. Wenn sich die zu aktualisierende Tabelle in einem anderen Projekt als Ihrem Standardprojekt befindet, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu:
PROJECT_ID:DATASET
.bq update PROJECT_ID:DATASET.TABLE SCHEMA
Dabei gilt:
PROJECT_ID
ist Ihre Projekt-ID.DATASET
: der Name des Datasets, das die zu aktualisierende Tabelle enthält.TABLE
: der Name der zu aktualisierenden Tabelle.SCHEMA
: die Schemadefinitionsdatei, die auf Ihren lokalen Rechner geschrieben wird.
Geben Sie beispielsweise den unten aufgeführten Befehl ein, um die Schemadefinition von
mydataset.mytable
in Ihrem Standardprojekt zu aktualisieren. Der Pfad zur Schemadatei auf Ihrem lokalen Rechner lautet/tmp/myschema.json
.bq update mydataset.mytable /tmp/myschema.json
API
Rufen Sie die Methode tables.patch
auf und verwenden Sie das Attribut schema
, um Ihrer Schemadefinition leere Spalten hinzuzufügen. Da die Methode tables.update
die gesamte Tabellenressource ersetzt, ist die Methode tables.patch
zu bevorzugen.
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.
Fügen Sie an eine Kopie von Table.schema ein neues SchemaField-Objekt an und ersetzen Sie den Wert des Attributs Table.schema durch das aktualisierte Schema.Verschachtelte Spalte einer RECORD
-Spalte hinzufügen
Zusätzlich zum Einfügen neuer Spalten in das Schema einer Tabelle können Sie einer RECORD
-Spalte auch neue verschachtelte Spalten hinzufügen. Der Vorgang zum Einfügen einer neuen verschachtelten Spalte ähnelt dem Vorgang zum Hinzufügen einer neuen Spalte.
Console
Das Einfügen eines neuen verschachtelten Felds in eine vorhandene RECORD
-Spalte wird von der Google Cloud Console nicht unterstützt.
SQL
Das Einfügen eines neuen verschachtelten Felds in eine vorhandene RECORD
-Spalte mithilfe einer SQL-DDL-Anweisung wird nicht unterstützt.
bq
Führen Sie den Befehl bq update
aus und stellen Sie dabei eine JSON-Schemadatei bereit, die das verschachtelte Feld zur Schemadefinition der vorhandenen RECORD
-Spalte hinzufügt. Wenn sich die zu aktualisierende Tabelle in einem anderen Projekt als Ihrem Standardprojekt befindet, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu: PROJECT_ID:DATASET
.
bq update PROJECT_ID:DATASET.TABLE SCHEMA
Dabei gilt:
PROJECT_ID
ist Ihre Projekt-ID.DATASET
: der Name des Datasets, das die zu aktualisierende Tabelle enthält.TABLE
: der Name der zu aktualisierenden Tabelle.SCHEMA
: der Pfad zur JSON-Schemadatei auf Ihrem lokalen Rechner.
Wenn Sie ein Inline-Schema angeben, können Sie nicht die Spaltenbeschreibung, den Modus und den Typ RECORD
(STRUCT
) angeben. Alle Spaltenmodi sind standardmäßig auf NULLABLE
gesetzt. Wenn Sie also einem RECORD
eine neue verschachtelte Spalte hinzufügen, müssen Sie eine JSON-Schemadatei bereitstellen.
So fügen Sie einem RECORD
mit einer JSON-Schemadatei eine verschachtelte Spalte hinzu:
Führen Sie zuerst den Befehl
bq show
mit dem Flag--schema
aus und schreiben Sie das vorhandene Tabellenschema in eine Datei. Wenn sich die zu aktualisierende Tabelle in einem anderen Projekt als Ihrem Standardprojekt befindet, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu:PROJECT_ID:DATASET.TABLE
.bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA
Dabei gilt:
PROJECT_ID
ist Ihre Projekt-ID.DATASET
: der Name des Datasets, das die zu aktualisierende Tabelle enthält.TABLE
: der Name der zu aktualisierenden Tabelle.SCHEMA
: die Schemadefinitionsdatei, die auf Ihren lokalen Rechner geschrieben wird.
Wenn Sie beispielsweise die Schemadefinition von
mydataset.mytable
in eine Datei schreiben möchten, geben Sie den unten aufgeführten Befehl ein.mydataset.mytable
befindet sich in Ihrem Standardprojekt.bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.json
Öffnen Sie die Schemadatei in einem Texteditor. Das Schema sollte wie unten dargestellt aussehen. In diesem Beispiel ist
column3
eine verschachtelte wiederholte Spalte. Die verschachtelten Spalten sindnested1
undnested2
. Das Arrayfields
listet die incolumn3
verschachtelten Felder auf.[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "fields": [ { "mode": "NULLABLE", "name": "nested1", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested2", "type": "STRING" } ], "mode": "REPEATED", "name": "column3", "type": "RECORD" } ]
Fügen Sie die neue verschachtelte Spalte am Ende des Arrays
fields
hinzu. In diesem Beispiel istnested3
die neue verschachtelte Spalte.[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "fields": [ { "mode": "NULLABLE", "name": "nested1", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested2", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested3", "type": "STRING" } ], "mode": "REPEATED", "name": "column3", "type": "RECORD" } ]
Weitere Informationen zum Arbeiten mit JSON-Schemadateien finden Sie unter JSON-Schemadatei festlegen.
Nachdem Sie die Schemadatei aktualisiert haben, führen Sie den folgenden Befehl aus, um die Schemadefinition der Tabelle zu aktualisieren. Wenn sich die zu aktualisierende Tabelle in einem anderen Projekt als Ihrem Standardprojekt befindet, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu:
PROJECT_ID:DATASET
.bq update PROJECT_ID:DATASET.TABLE SCHEMA
Dabei gilt:
PROJECT_ID
ist Ihre Projekt-ID.DATASET
: der Name des Datasets, das die zu aktualisierende Tabelle enthält.TABLE
: der Name der zu aktualisierenden Tabelle.SCHEMA
: der Pfad zur JSON-Schemadatei auf Ihrem lokalen Rechner.
Geben Sie beispielsweise den unten aufgeführten Befehl ein, um die Schemadefinition von
mydataset.mytable
in Ihrem Standardprojekt zu aktualisieren. Der Pfad zur Schemadatei auf Ihrem lokalen Rechner lautet/tmp/myschema.json
.bq update mydataset.mytable /tmp/myschema.json
API
Rufen Sie die Methode tables.patch
auf und verwenden Sie das Attribut schema
, um der Schemadefinition die verschachtelten Spalten hinzuzufügen. Da die Methode tables.update
die gesamte Tabellenressource ersetzt, ist die Methode tables.patch
zu bevorzugen.
Spalten beim Überschreiben oder Anfügen von Daten hinzufügen
Sie können einer vorhandenen Tabelle neue Spalten hinzufügen, wenn Sie Daten in sie laden und die vorhandene Tabelle überschreiben. Wenn Sie eine vorhandene Tabelle überschreiben, wird das dazugehörige Schema mit dem Schema der Daten überschrieben, die Sie laden. Informationen zum Überschreiben einer Tabelle mit einem Ladejob finden Sie im Dokument zu Ihrem Datenformat:
Spalten im Rahmen eines Anfüge-/Ladejobs hinzufügen
Sie können einer Tabelle Spalten hinzufügen, wenn Sie Daten in einem Ladejob an sie anfügen. Das neue Schema wird durch einen der folgenden Aspekte bestimmt:
- Automatische Erkennung (für CSV- und JSON-Dateien)
- Ein in einer JSON-Schemadatei angegebenes Schema (für CSV- und JSON-Dateien)
- Die selbstbeschreibenden Quelldaten für Avro-, ORC-, Parquet- und Datastore-Exportdateien
Wenn Sie das Schema in einer JSON-Datei angeben, müssen die neuen Spalten darin definiert sein. Wenn die neuen Spaltendefinitionen fehlen und Sie versuchen, die Daten anzufügen, wird ein Fehler zurückgegeben.
Wenn Sie während eines Anfügevorgangs neue Spalten hinzufügen, werden die Werte in den neuen Spalten für vorhandene Zeilen auf NULL
gesetzt.
Mit einer der folgenden Optionen können Sie eine neue Spalte hinzufügen, wenn Sie während eines Ladejobs einer Tabelle Daten anfügen:
bq
Laden Sie Ihre Daten mit dem Befehl bq load
und fügen Sie das Flag --noreplace
hinzu, um anzugeben, dass Sie die Daten an eine vorhandene Tabelle anfügen.
Wenn die von Ihnen angefügten Daten im CSV-Format oder im JSON-Format mit Zeilenumbrüchen vorliegen, geben Sie das Flag --autodetect
für die automatische Schemaerkennung an oder stellen das Schema in einer JSON-Schemadatei bereit. Die hinzugefügten Spalten können automatisch aus Avro- oder Datastore-Exportdateien übernommen werden.
Setzen Sie das Flag --schema_update_option
auf ALLOW_FIELD_ADDITION
, um anzugeben, dass die von Ihnen angefügten Daten neue Spalten enthalten.
Wenn sich die anzufügende Tabelle in einem Dataset befindet, das in einem anderen Projekt als Ihrem Standardprojekt enthalten ist, geben Sie im Dataset-Namen die Projekt-ID im folgenden Format ein: PROJECT_ID:DATASET
.
Optional: Geben Sie das Flag --location
an und legen Sie als Wert Ihren Standort fest.
Geben Sie den Befehl load
so ein:
bq --location=LOCATION load \ --noreplace \ --autodetect \ --schema_update_option=ALLOW_FIELD_ADDITION \ --source_format=FORMAT \ PROJECT_ID:DATASET.TABLE \ PATH_TO_SOURCE \ SCHEMA
Dabei gilt:
LOCATION
: Name Ihres Standorts. Das Flag--location
ist optional. Wenn Sie beispielsweise BigQuery in der Region Tokio verwenden, legen Sie den Wert des Flags aufasia-northeast1
fest. Mit der Datei .bigqueryrc können Sie einen Standardwert für den Standort festlegen.FORMAT
: das Format des Schemas.NEWLINE_DELIMITED_JSON
,CSV
,AVRO
,PARQUET
,ORC
, oderDATASTORE_BACKUP
.PROJECT_ID
ist Ihre Projekt-ID.DATASET
: der Name des Datasets, das die Tabelle enthält.TABLE
: der Name der Tabelle, die Sie anhängen.PATH_TO_SOURCE
ist ein vollständig qualifizierter Cloud Storage-URI, eine Liste von durch Kommas getrennten URIs oder der Pfad zu einer Datendatei auf dem lokalen Rechner.SCHEMA
: der Pfad zu einer lokalen JSON-Schemadatei Eine Schemadatei ist nur für CSV- und JSON-Dateien erforderlich, wenn--autodetect
nicht angegeben wurde. Avro- und Datastore-Schemas werden aus den Quelldaten abgeleitet.
Beispiele:
Geben Sie den folgenden Befehl ein, um eine lokale Avro-Datendatei (/tmp/mydata.avro
) mithilfe eines Ladejobs an mydataset.mytable
anzufügen. Da Schemas automatisch aus Avro-Daten abgeleitet werden können, müssen Sie das Flag --autodetect
nicht verwenden. mydataset
befindet sich in Ihrem Standardprojekt.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=AVRO \
mydataset.mytable \
/tmp/mydata.avro
Geben Sie den folgenden Befehl ein, um mithilfe eines Ladejobs eine durch Zeilenumbruch getrennte JSON-Datei in Cloud Storage an mydataset.mytable
anzufügen. Das Flag --autodetect
wird verwendet, um die neuen Spalten zu erkennen. mydataset
befindet sich in Ihrem Standardprojekt.
bq load \
--noreplace \
--autodetect \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=NEWLINE_DELIMITED_JSON \
mydataset.mytable \
gs://mybucket/mydata.json
Geben Sie den folgenden Befehl ein, um mithilfe eines Ladejobs eine durch Zeilenumbruch getrennte JSON-Datei in Cloud Storage an mydataset.mytable
anzufügen. Das Schema mit den neuen Spalten wird in der lokalen JSON-Schemadatei /tmp/myschema.json
angegeben. mydataset
befindet sich in myotherproject
, nicht in Ihrem Standardprojekt.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=NEWLINE_DELIMITED_JSON \
myotherproject:mydataset.mytable \
gs://mybucket/mydata.json \
/tmp/myschema.json
API
Rufen Sie die Methode jobs.insert
auf. Konfigurieren Sie einen Ladejob (load
) und legen Sie die folgenden Attribute fest:
- Verweisen Sie mit dem Attribut
sourceUris
auf Ihre Daten in Cloud Storage. - Geben Sie das Datenformat an. Legen Sie dazu das Attribut
sourceFormat
fest. - Geben Sie das Schema im Attribut
schema
an. - Geben Sie die Aktualisierungsoption des Schemas mit dem Attribut
schemaUpdateOptions
an. - Legen Sie die Schreibanordnung der Zieltabelle mit dem Attribut
writeDisposition
alsWRITE_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.
Spalten im Rahmen eines Abfrage-/Anfügejobs hinzufügen
Sie können einer Tabelle Spalten hinzufügen, wenn Sie Abfrageergebnisse an diese anfügen.
Wenn Sie Spalten über einen Anfügevorgang in einem Abfragejob hinzufügen, wird das Schema der Zieltabelle mit dem Schema der Abfrageergebnisse aktualisiert. Beachten Sie, dass Sie nicht eine Tabelle an einem Standort abfragen und die Ergebnisse in eine Tabelle an einem anderen Standort schreiben können.
Wählen Sie eine der folgenden Optionen, um beim Anfügen von Daten an eine Tabelle während eines Abfragejobs eine neue Spalte hinzuzufügen:
bq
Zum Abfragen Ihrer Daten verwenden Sie den Befehl bq query
. Mit dem Flag --destination_table
legen Sie dabei fest, an welche Tabelle Sie anfügen.
Mit dem Flag --append_table
können Sie angeben, dass Sie Abfrageergebnisse an eine vorhandene Zieltabelle anfügen.
Setzen Sie das Flag --schema_update_option
auf ALLOW_FIELD_ADDITION
, um anzugeben, dass die angehängten Abfrageergebnisse neue Spalten enthalten.
Geben Sie das Flag use_legacy_sql=false
an, um die GoogleSQL-Syntax für die Abfrage zu verwenden.
Wenn sich die anzufügende Tabelle in einem Dataset befindet, das in einem anderen Projekt als Ihrem Standardprojekt enthalten ist, geben Sie im Dataset-Namen die Projekt-ID im folgenden Format ein: PROJECT_ID:DATASET
. Beachten Sie, dass sich die Tabelle, die Sie abfragen, und die Zieltabelle am selben Standort befinden müssen.
Optional: Geben Sie das Flag --location
an und legen Sie als Wert Ihren Standort fest.
bq --location=LOCATION query \ --destination_table PROJECT_ID:DATASET.TABLE \ --append_table \ --schema_update_option=ALLOW_FIELD_ADDITION \ --use_legacy_sql=false \ 'QUERY'
Ersetzen Sie dabei Folgendes:
LOCATION
: Name Ihres Standorts. Das Flag--location
ist optional. Wenn Sie beispielsweise BigQuery in der Region Tokio verwenden, legen Sie den Wert des Flags aufasia-northeast1
fest. Mit der Datei .bigqueryrc können Sie einen Standardwert für den Standort festlegen. Beachten Sie, dass Sie Abfrageergebnisse nicht an eine Tabelle an einem anderen Standort anfügen können.PROJECT_ID
ist Ihre Projekt-ID.dataset
: der Name des Datasets, das die Tabelle enthält, die Sie anfügen.TABLE
: der Name der Tabelle, die Sie anhängen.QUERY
: eine Abfrage in der GoogleSQL-Syntax.
Beispiele:
Geben Sie den folgenden Befehl ein, um mydataset.mytable
in Ihrem Standardprojekt abzufragen und die Abfrageergebnisse an mydataset.mytable2
anzufügen. Dies ist auch in Ihrem Standardprojekt möglich.
bq query \
--destination_table mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_ADDITION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
Geben Sie den folgenden Befehl ein, um mydataset.mytable
in Ihrem Standardprojekt abzufragen und die Abfrageergebnisse an mydataset.mytable2
in myotherproject
anzufügen.
bq query \
--destination_table myotherproject:mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_ADDITION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
API
Rufen Sie die Methode jobs.insert
auf. Konfigurieren Sie einen Ladejob (query
) und legen Sie die folgenden Attribute fest:
- Geben Sie die Zieltabelle mit dem Attribut
destinationTable
an. - Legen Sie die Schreibanordnung der Zieltabelle mit dem Attribut
writeDisposition
alsWRITE_APPEND
fest. - Geben Sie die Aktualisierungsoption des Schemas mit dem Attribut
schemaUpdateOptions
an. - Geben Sie die GoogleSQL-Abfrage mit dem Attribut
query
an.
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.
Name einer Spalte ändern
Mit der DDL-Anweisung ALTER TABLE RENAME COLUMN
können Sie eine Spalte in einer Tabelle umbenennen. Im folgenden Beispiel wird die Spalte old_name
für mytable
in new_name
umbenannt:
ALTER TABLE mydataset.mytable RENAME COLUMN old_name TO new_name;
Weitere Informationen zu ALTER TABLE RENAME COLUMN
-Anweisungen finden Sie unter DDL-Details.
Datentyp einer Spalte ändern
Das Ändern des Datentyps einer Spalte wird von der Google Cloud Console, dem bq-Befehlszeilentool und der BigQuery API nicht unterstützt. Beim Versuch, eine Tabelle durch Anwenden eines Schemas zu aktualisieren, in dem ein neuer Datentyp für eine Spalte angegeben wird, wird ein Fehler zurückgegeben:
Datentyp einer Spalte mit einer DDL-Anweisung ändern
Mithilfe von GoogleSQL können Sie bestimmte Änderungen am Datentyp einer Spalte vornehmen. Weitere Informationen und eine vollständige Liste der unterstützten Datentyp-Konvertierungen finden Sie in der DDL-Anweisung ALTER COLUMN SET DATA TYPE
.
Im folgenden Beispiel wird eine Tabelle mit einer Spalte vom Typ INT64
erstellt. Anschließend wird der Typ auf NUMERIC
aktualisiert:
CREATE TABLE mydataset.mytable(c1 INT64); ALTER TABLE mydataset.mytable ALTER COLUMN c1 SET DATA TYPE NUMERIC;
Im folgenden Beispiel wird eine Tabelle mit einer verschachtelten Spalte mit zwei Feldern erstellt. Anschließend wird der Typ einer der Spalten von INT
auf NUMERIC
aktualisiert:
CREATE TABLE mydataset.mytable(s1 STRUCT<a INT64, b STRING>); ALTER TABLE mydataset.mytable ALTER COLUMN s1 SET DATA TYPE STRUCT<a NUMERIC, b STRING>;
Datentyp einer Spalte umwandeln
Wenn Sie den Datentyp einer Spalte in einen umwandelbaren Typ ändern möchten, verwenden Sie eine SQL-Abfrage, um die Tabellendaten auszuwählen, wandeln die relevante Spalte um, und überschreiben die Tabelle. Umwandeln und Überschreiben wird für sehr große Tabellen nicht empfohlen, da dafür ein vollständiger Tabellenscan erforderlich ist.
Im folgenden Beispiel sehen Sie eine SQL-Abfrage, mit der alle Daten aus column_two
und column_three
in mydataset.mytable
ausgewählt werden und column_one
von DATE
in STRING
umgewandelt wird. Die vorhandene Tabelle wird mit dem Abfrageergebnis überschrieben. In der überschriebenen Tabelle wird column_one
als Datentyp STRING
gespeichert.
Eine Abfrage mit CAST
kann fehlschlagen, wenn BigQuery die Umwandlung nicht ausführen kann. Weitere Informationen zu Umwandlungsregeln in GoogleSQL finden Sie unter Umwandeln.
Console
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Geben Sie im Abfrageeditor die folgende Abfrage ein, um alle Daten aus
column_two
undcolumn_three
inmydataset.mytable
auszuwählen undcolumn_one
vonDATE
inSTRING
umzuwandeln. In der Abfrage wird ein Alias verwendet, umcolumn_one
mit demselben Namen umzuwandeln.mydataset.mytable
befindet sich in Ihrem Standardprojekt.SELECT column_two, column_three, CAST(column_one AS STRING) AS column_one FROM mydataset.mytable;
Klicken Sie auf More (Mehr) und wählen Sie Query settings (Abfrageeinstellungen) aus.
Führen Sie im Abschnitt Ziel folgende Schritte aus:
Wählen Sie Zieltabelle für Abfrageergebnisse festlegen.
Behalten Sie für Projektname das Standardprojekt als Wert bei. Dies ist das Projekt, das
mydataset.mytable
enthält.Wählen Sie für Dataset die Option
mydataset
aus.Geben Sie im Feld Tabllen-ID den Wert
mytable
ein.Wählen Sie für Schreibeinstellung für Zieltabelle die Option Tabelle überschreiben. Diese Option überschreibt
mytable
mit den Abfrageergebnissen.
Optional: Wählen Sie den Standort Ihrer Daten aus.
Klicken Sie zum Aktualisieren der Einstellungen auf Speichern.
Klicken Sie auf
Ausführen.Wenn der Abfragejob abgeschlossen ist, hat
column_one
den DatentypSTRING
.
bq
Geben Sie den folgenden bq query
-Befehl ein, um alle Daten aus column_two
und column_three
in mydataset.mytable
auszuwählen und column_one
von DATE
in STRING
umzuwandeln. In der Abfrage wird ein Alias verwendet, um column_one
mit demselben Namen umzuwandeln. mydataset.mytable
befindet sich in Ihrem Standardprojekt.
Die Abfrageergebnisse werden mit dem Flag --destination_table
in mydataset.mytable
geschrieben. Das Flag --replace
wird verwendet, um mytable
zu überschreiben. Mit dem Flag use_legacy_sql=false
legen Sie die GoogleSQL-Syntax fest.
Optional können Sie das Flag --location
angeben und Ihren Standort als dessen Wert festlegen.
bq query \
--destination_table mydataset.mytable \
--replace \
--use_legacy_sql=false \
'SELECT
column_two,
column_three,
CAST(column_one AS STRING) AS column_one
FROM
mydataset.mytable'
API
Rufen Sie die Methode jobs.insert
auf und konfigurieren Sie einen query
-Job, um alle Daten aus column_two
und column_three
in mydataset.mytable
auszuwählen und column_one
von DATE
in STRING
umzuwandeln. Optional: Geben Sie im Abschnitt jobReference
im Attribut location
Ihren Standort an.
Die im Abfragejob verwendete SQL-Abfrage würde so lauten: SELECT column_two,
column_three, CAST(column_one AS STRING) AS column_one FROM
mydataset.mytable
. In der Abfrage wird ein Alias verwendet, um column_one
mit demselben Namen umzuwandeln.
Fügen Sie mydataset.mytable
im Attribut configuration.query.destinationTable
hinzu und geben Sie WRITE_TRUNCATE
im Attribut configuration.query.writeDisposition
an, um mytable
mit den Abfrageergebnissen zu überschreiben.
Modus einer Spalte ändern
Derzeit können Sie den Modus einer Spalte nur von REQUIRED
in NULLABLE
ändern. Das Ändern des Spaltenmodus von REQUIRED
zu NULLABLE
wird auch als Spaltenlockerung bezeichnet. Sie können eine Spalte auch lockern, wenn Sie Daten laden, um eine vorhandene Tabelle zu überschreiben, oder wenn Sie Daten an eine vorhandene Tabelle anfügen. Sie können den Modus einer Spalte nicht von NULLABLE
zu REQUIRED
ändern.
Spalte in einer vorhandenen Tabelle als NULLABLE
deklarieren
Wählen Sie eine der folgenden Optionen aus, um den Modus einer Spalte von REQUIRED
zu NULLABLE
zu ändern:
Console
Rufen Sie die Seite BigQuery auf.
Maximieren Sie im Bereich Explorer Ihr Projekt und das Dataset und wählen Sie dann die Tabelle aus.
Klicken Sie im Detailbereich auf den Tab Schema.
Klicken Sie auf Schema bearbeiten. Eventuell müssen Sie scrollen, um diese Schaltfläche zu sehen.
Suchen Sie auf der Seite Aktuelles Schema das Feld, das Sie ändern möchten.
Wählen Sie in der Drop-down-Liste Modus für das Feld
NULLABLE
aus.Klicken Sie zum Aktualisieren der Einstellungen auf Speichern.
SQL
Verwenden Sie die DDL-Anweisung ALTER COLUMN DROP NOT NULL
.
Im folgenden Beispiel wird der Modus der Spalte mycolumn
von REQUIRED
in NULLABLE
geändert:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
ALTER TABLE mydataset.mytable ALTER COLUMN mycolumn DROP NOT NULL;
Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
bq
Führen Sie zuerst den Befehl
bq show
mit dem Flag--schema
aus und schreiben Sie das vorhandene Tabellenschema in eine Datei. Wenn sich die zu aktualisierende Tabelle in einem anderen Projekt als Ihrem Standardprojekt befindet, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu:PROJECT_ID:DATASET
.bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA_FILE
Dabei gilt:
PROJECT_ID
ist Ihre Projekt-ID.DATASET
: der Name des Datasets, das die zu aktualisierende Tabelle enthält.TABLE
: der Name der zu aktualisierenden Tabelle.SCHEMA_FILE
: die Schemadefinitionsdatei, die auf Ihren lokalen Rechner geschrieben wurde.
Wenn Sie beispielsweise die Schemadefinition von
mydataset.mytable
in eine Datei schreiben möchten, geben Sie den unten aufgeführten Befehl ein.mydataset.mytable
befindet sich in Ihrem Standardprojekt.bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.json
Öffnen Sie die Schemadatei in einem Texteditor. Das Schema sollte so aussehen:
[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]
Ändern Sie den Modus einer vorhandenen Spalte von
REQUIRED
zuNULLABLE
. In diesem Beispiel wird der Modus fürcolumn1
gelockert.[ { "mode": "NULLABLE", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]
Weitere Informationen zum Arbeiten mit JSON-Schemadateien finden Sie unter JSON-Schemadatei angeben.
Nachdem Sie die Schemadatei aktualisiert haben, führen Sie den folgenden Befehl aus, um die Schemadefinition der Tabelle zu aktualisieren. Wenn sich die zu aktualisierende Tabelle in einem anderen Projekt als Ihrem Standardprojekt befindet, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu:
PROJECT_ID:DATASET
.bq update PROJECT_ID:DATASET.TABLE SCHEMA
Dabei gilt:
PROJECT_ID
ist Ihre Projekt-ID.DATASET
: der Name des Datasets, das die zu aktualisierende Tabelle enthält.TABLE
: der Name der zu aktualisierenden Tabelle.SCHEMA
: der Pfad zur JSON-Schemadatei auf Ihrem lokalen Rechner.
Geben Sie beispielsweise den unten aufgeführten Befehl ein, um die Schemadefinition von
mydataset.mytable
in Ihrem Standardprojekt zu aktualisieren. Der Pfad zur Schemadatei auf Ihrem lokalen Rechner lautet/tmp/myschema.json
.bq update mydataset.mytable /tmp/myschema.json
API
Rufen Sie die Methode tables.patch
auf und verwenden Sie das Attribut schema
, um eine REQUIRED
-Spalte in Ihrer Schemadefinition in NULLABLE
zu ändern. Da die Methode tables.update
die gesamte Tabellenressource ersetzt, ist die Methode tables.patch
zu bevorzugen.
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.
Überschreiben Sie das Attribut Table.schema mit einer Liste von SchemaField-Objekten. Dabei muss für das Attribut mode der Wert'NULLABLE'
festgelegt sein.
Spalte mit einem Anfüge-Ladejob als NULLABLE
deklarieren
Sie können den Modus einer Spalte lockern, wenn Sie Daten an eine Tabelle in einem Ladejob anhängen. Wählen Sie je nach Dateityp eine der folgenden Optionen aus:
- Wenn Sie Daten aus CSV- und JSON-Dateien anhängen können Sie eine JSON-Schemadatei angeben, um den Modus für einzelne Spalten zu lockern.
- Wenn Sie Daten aus Avro-, ORC- oder Parquet-Dateien anhängen, lockern Sie die Spalten in Ihrem Schema auf
NULL
und lassen die Schemainferenz die gelockerten Spalten erkennen.
Wählen Sie eine der folgenden Optionen, um eine Spalte von REQUIRED
zu NULLABLE
zu lockern, wenn Sie während eines Ladejobs Daten an eine Tabelle anfügen:
Console
Sie können den Modus einer Spalte nicht mit der Google Cloud Console lockern.
bq
Laden Sie Ihre Daten mit dem Befehl bq load
und fügen Sie das Flag --noreplace
hinzu, um anzugeben, dass Sie die Daten an eine vorhandene Tabelle anfügen.
Wenn die von Ihnen angefügten Daten im CSV-Format oder im JSON-Format mit Zeilenumbrüchen vorliegen, geben Sie die gelockerten Spalten in einer lokalen JSON-Schemadatei an oder verwenden das Flag --autodetect
, um gelockerte Spalten in den Quelldaten mit der Schemaerkennung zu ermitteln.
Gelockerte Spalten können automatisch aus Avro-, ORC- und Parquet-Dateien abgeleitet werden. Das Lockern von Spalten gilt nicht für das Anfügen von Exportdaten aus Datastore. Die Spalten in Tabellen, die beim Laden aus Datastore-Exportdateien erstellt wurden, sind immer NULLABLE
.
Setzen Sie das Flag --schema_update_option
auf ALLOW_FIELD_RELAXATION
, um anzugeben, dass die von Ihnen angefügten Daten neue Spalten enthalten.
Wenn sich die anzufügende Tabelle in einem Dataset befindet, das in einem anderen Projekt als Ihrem Standardprojekt enthalten ist, geben Sie im Dataset-Namen die Projekt-ID im folgenden Format ein: PROJECT_ID:DATASET
.
Optional: Geben Sie das Flag --location
an und legen Sie als Wert Ihren Standort fest.
Geben Sie den Befehl load
so ein:
bq --location=LOCATION load \ --noreplace \ --schema_update_option=ALLOW_FIELD_RELAXATION \ --source_format=FORMAT \ PROJECT_ID:DATASET.TABLE \ PATH_TO_SOURCE \ SCHEMA
Dabei gilt:
LOCATION
: Name Ihres Standorts. Das Flag--location
ist optional. Wenn Sie beispielsweise BigQuery in der Region Tokio verwenden, legen Sie den Wert des Flags aufasia-northeast1
fest. Mit der Datei .bigqueryrc können Sie einen Standardwert für den Standort festlegen.FORMAT
:NEWLINE_DELIMITED_JSON
,CSV
,PARQUET
,ORC
oderAVRO
.DATASTORE_BACKUP
-Dateien erfordern keine Spaltenlockerung. Die Spalten in Tabellen, die aus Datastore-Exportdateien erstellt wurden, haben immer den ModusNULLABLE
.PROJECT_ID
ist Ihre Projekt-ID.dataset ist der Name des Datasets, das die Tabelle enthält.
TABLE
: der Name der Tabelle, die Sie anhängen.PATH_TO_SOURCE
ist ein vollständig qualifizierter Cloud Storage-URI, eine Liste von durch Kommas getrennten URIs oder der Pfad zu einer Datendatei auf dem lokalen Rechner.SCHEMA
: der Pfad zu einer lokalen JSON-Schemadatei Diese Option wird nur für CSV- und JSON-Dateien verwendet. Aus Avro-Dateien werden gelockerte Spalten automatisch abgeleitet.
Beispiele:
Geben Sie den folgenden Befehl ein, um eine lokale Avro-Datendatei (/tmp/mydata.avro
) mithilfe eines Ladejobs an mydataset.mytable
anzufügen. Da gelockerte Spalten automatisch aus Avro-Daten abgeleitet werden können, müssen Sie keine Schemadatei angeben. mydataset
befindet sich in Ihrem Standardprojekt.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=AVRO \
mydataset.mytable \
/tmp/mydata.avro
Geben Sie den folgenden Befehl ein, um Daten aus einer durch Zeilenumbrüche getrennten JSON-Datei in Cloud Storage mithilfe eines Ladejobs an mydataset.mytable
anzufügen. Das Schema mit den gelockerten Spalten befindet sich in einer lokalen JSON-Schemadatei – /tmp/myschema.json
. mydataset
befindet sich in Ihrem Standardprojekt.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=NEWLINE_DELIMITED_JSON \
mydataset.mytable \
gs://mybucket/mydata.json \
/tmp/myschema.json
Geben Sie den folgenden Befehl ein, um Daten aus einer CSV-Datei auf Ihrem lokalen Rechner mithilfe eines Ladejobs an mydataset.mytable
anzufügen. Der Befehl verwendet die automatische Schemaerkennung, um gelockerte Spalten in den Quelldaten zu ermitteln. mydataset
befindet sich in myotherproject
, nicht in Ihrem Standardprojekt.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=CSV \
--autodetect \
myotherproject:mydataset.mytable \
mydata.csv
API
Rufen Sie die Methode jobs.insert
auf. Konfigurieren Sie einen Ladejob (load
) und legen Sie die folgenden Attribute fest:
- Verweisen Sie mit dem Attribut
sourceUris
auf Ihre Daten in Cloud Storage. - Geben Sie das Datenformat an. Legen Sie dazu das Attribut
sourceFormat
fest. - Geben Sie das Schema im Attribut
schema
an. - Geben Sie die Aktualisierungsoption des Schemas mit dem Attribut
schemaUpdateOptions
an. - Legen Sie die Schreibanordnung der Zieltabelle mit dem Attribut
writeDisposition
alsWRITE_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.
Alle Spalten mit einem Anfügejob als NULLABLE
deklarieren
Sie können alle Spalten in einer Tabelle lockern, wenn Sie Abfrageergebnisse an diese anfügen. Sie können alle Pflichtfelder in der Zieltabelle lockern. Setzen Sie dazu das Flag --schema_update_option
auf ALLOW_FIELD_RELAXATION
. Einzelne Spalten in einer Zieltabelle können nicht mit einem Abfrage-/Anfügejob gelockert werden. Informationen zum Lockern einzelner Spalten mit einem Anfüge-/Ladejob finden Sie unter Spalte NULLABLE
mit einem Anfügejob erstellen.
Wählen Sie eine der folgenden Optionen, um alle Spalten beim Anfügen von Abfrageergebnissen an eine Zieltabelle zu lockern:
Console
Sie können den Modus einer Spalte nicht mit der Google Cloud Console lockern.
bq
Zum Abfragen Ihrer Daten verwenden Sie den Befehl bq query
. Mit dem Flag --destination_table
legen Sie dabei fest, an welche Tabelle Sie anfügen.
Mit dem Flag --append_table
können Sie angeben, dass Sie Abfrageergebnisse an eine vorhandene Zieltabelle anfügen.
Setzen Sie das Flag --schema_update_option
auf ALLOW_FIELD_RELAXATION
, um anzugeben, dass alle REQUIRED
-Spalten in der Tabelle, die Sie anfügen, in NULLABLE
geändert werden müssen.
Geben Sie das Flag use_legacy_sql=false
an, um die GoogleSQL-Syntax für die Abfrage zu verwenden.
Wenn sich die anzufügende Tabelle in einem Dataset befindet, das in einem anderen Projekt als Ihrem Standardprojekt enthalten ist, geben Sie im Dataset-Namen die Projekt-ID im folgenden Format ein: PROJECT_ID:DATASET
.
Optional: Geben Sie das Flag --location
an und legen Sie als Wert Ihren Standort fest.
bq --location=LOCATION query \ --destination_table PROJECT_ID:DATASET.TABLE \ --append_table \ --schema_update_option=ALLOW_FIELD_RELAXATION \ --use_legacy_sql=false \ 'QUERY'
Ersetzen Sie dabei Folgendes:
LOCATION
: Name Ihres Standorts. Das Flag--location
ist optional. Wenn Sie beispielsweise BigQuery in der Region Tokio verwenden, legen Sie den Wert des Flags aufasia-northeast1
fest. Mit der Datei .bigqueryrc können Sie einen Standardwert für den Standort festlegen.PROJECT_ID
ist Ihre Projekt-ID.DATASET
: der Name des Datasets, das die Tabelle enthält, die Sie anfügen.TABLE
: der Name der Tabelle, die Sie anhängen.QUERY
: eine Abfrage in der GoogleSQL-Syntax.
Beispiele:
Geben Sie den folgenden Befehl ein, um mydataset.mytable
in Ihrem Standardprojekt abzufragen und die Abfrageergebnisse an mydataset.mytable2
anzufügen. Dies ist auch in Ihrem Standardprojekt möglich. Der Befehl ändert alle REQUIRED
-Spalten in der Zieltabelle zu NULLABLE
.
bq query \
--destination_table mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
Geben Sie den folgenden Befehl ein, um mydataset.mytable
in Ihrem Standardprojekt abzufragen und die Abfrageergebnisse an mydataset.mytable2
in myotherproject
anzufügen. Der Befehl ändert alle REQUIRED
-Spalten in der Zieltabelle zu NULLABLE
.
bq query \
--destination_table myotherproject:mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
API
Rufen Sie die Methode jobs.insert
auf. Konfigurieren Sie einen Ladejob (query
) und legen Sie die folgenden Attribute fest:
- Geben Sie die Zieltabelle mit dem Attribut
destinationTable
an. - Legen Sie die Schreibanordnung der Zieltabelle mit dem Attribut
writeDisposition
alsWRITE_APPEND
fest. - Geben Sie die Aktualisierungsoption des Schemas mit dem Attribut
schemaUpdateOptions
an. - Geben Sie die GoogleSQL-Abfrage mit dem Attribut
query
an.
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.
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.
Standardwert einer Spalte ändern
Wählen Sie eine der folgenden Optionen aus, um den Standardwert für eine Spalte zu ändern:
Console
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Maximieren Sie im Bereich Explorer Ihr Projekt und das Dataset und wählen Sie dann die Tabelle aus.
Klicken Sie im Detailbereich auf den Tab Schema.
Klicken Sie auf Schema bearbeiten. Eventuell müssen Sie scrollen, um diese Schaltfläche zu sehen.
Suchen Sie auf der Seite Aktuelles Schema das Feld auf oberster Ebene, das Sie ändern möchten.
Geben Sie den Standardwert für dieses Feld ein.
Klicken Sie auf Speichern.
SQL
Verwenden Sie die DDL-Anweisung ALTER COLUMN SET DEFAULT
.
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
ALTER TABLE mydataset.mytable ALTER COLUMN column_name SET DEFAULT default_expression;
Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
Spalte löschen
Mit der DDL-Anweisung ALTER TABLE DROP COLUMN
können Sie eine Spalte aus einer vorhandenen Tabelle löschen.
Durch die Anweisung wird der Speicher, der der verworfenen Spalte zugeordnet ist, nicht sofort freigegeben. Weitere Informationen zu den Auswirkungen auf den Speicher beim Löschen einer Spalte auf den Speicher finden Sie unter Details zur ALTER TABLE DROP COLUMN
-Anweisung.
Es gibt zwei Möglichkeiten, sofort den Speicher zurückzugewinnen:
- Eine Tabelle mit einer
SELECT * EXCEPT
-Abfrage überschreiben. - Die Daten in Cloud Storage exportieren, die unerwünschten Spalten löschen und die Daten dann in eine neue Tabelle mit dem richtigen Schema laden.