Externe Cloud Storage-Tabellen erstellen
BigQuery unterstützt die Abfrage von Cloud Storage-Daten in den folgenden Formaten:
- Kommagetrennte Werte (CSV)
- JSON (durch Zeilenumbruch getrennt)
- Avro
- ORC
- Parquet
- Datastore-Exporte
- Firestore-Exporte
BigQuery unterstützt die Abfrage von Cloud Storage-Daten aus den folgenden Speicherklassen:
- Standard
- Nearline
- Coldline
- Archivieren
Zum Abfragen einer externen Cloud Storage-Tabelle benötigen Sie Berechtigungen sowohl für die externe Tabelle als auch für die Cloud Storage-Dateien. Wir empfehlen, wenn möglich stattdessen eine BigLake-Tabelle zu verwenden. BigLake-Tabellen bieten Zugriffsdelegation, sodass Sie nur Berechtigungen für die BigLake-Tabelle benötigen, um die Cloud Storage-Daten abzufragen.
Beachten Sie den Standort Ihres Datasets und Ihres Cloud Storage-Buckets bei der Abfrage von in Cloud Storage gespeicherten Daten.
Hinweis
Erteilen Sie IAM-Rollen (Identity and Access Management), die Nutzern die erforderlichen Berechtigungen zum Ausführen der einzelnen Aufgaben in diesem Dokument geben. Die Berechtigungen, die zum Ausführen einer Aufgabe erforderlich sind (sofern zutreffend), werden im Abschnitt "Erforderliche Berechtigungen" der Aufgabe aufgelistet.
Erforderliche Rollen
Zum Erstellen einer externen Tabelle benötigen Sie die IAM-Berechtigung (BigQuery Identity and Access Management) bigquery.tables.create
.
Jede der folgenden vordefinierten Rollen für das Identity and Access Management enthält diese Berechtigung:
- BigQuery Datenmitbearbeiter (
roles/bigquery.dataEditor
) - BigQuery Dateninhaber (
roles/bigquery.dataOwner
) - BigQuery Administrator (
roles/bigquery.admin
)
Sie benötigen außerdem die folgenden Berechtigungen, um auf den Cloud Storage-Bucket zuzugreifen, der Ihre Daten enthält:
storage.buckets.get
storage.objects.get
storage.objects.list
(erforderlich, wenn Sie einen URI-Platzhalter verwenden)
Die vordefinierte Rolle Identity and Access Management des „Cloud Identity Storage-Administrator“ (roles/storage.admin
) enthält diese Berechtigungen.
Wenn Sie in keiner dieser Rollen ein Hauptkonto sind, bitten Sie Ihren Administrator, Ihnen Zugriff zu gewähren oder die externe Tabelle für Sie zu erstellen.
Weitere Informationen zu Rollen und Berechtigungen für das Identity and Access Management in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.
Zugriffsbereiche für Compute Engine-Instanzen
Wenn Sie von einer Compute Engine-Instanz aus eine externe Tabelle abfragen müssen, die mit einer Cloud Storage-Quelle verknüpft ist, muss die Instanz mindestens den Lesezugriff auf Cloud Storage haben (https://www.googleapis.com/auth/devstorage.read_only
).
Mit den Bereichen steuern Sie den Zugriff der Compute Engine-Instanz auf Google Cloud-Produkte wie Cloud Storage. Anwendungen, die auf der Instanz ausgeführt werden, rufen die Google Cloud APIs über das mit der Instanz verknüpfte Dienstkonto auf.
Wenn Sie eine Compute Engine-Instanz als Standard-Compute Engine-Dienstkonto einrichten, wird der Instanz standardmäßig eine Reihe von Standardbereichen zugewiesen, einschließlich des Bereichs https://www.googleapis.com/auth/devstorage.read_only
.
Wenn Sie die Instanz stattdessen mit einem benutzerdefinierten Dienstkonto einrichten, müssen Sie der Instanz explizit den Bereich https://www.googleapis.com/auth/devstorage.read_only
zuweisen.
Wie Sie Bereiche auf eine Compute Engine-Instanz anwenden, erfahren Sie unter Dienstkonto und Zugriffsbereiche für eine Instanz ändern. Weitere Informationen zu Compute Engine-Dienstkonten finden Sie unter Dienstkonten.
Externe Tabellen für nicht partitionierte Daten erstellen
So können Sie eine permanente Tabelle erstellen, die mit der externen Datenquelle verknüpft ist:
- Google Cloud Console verwenden
bq mk
-Befehl verwenden- Durch Erstellen einer
ExternalDataConfiguration
, wenn Sie die API-Methodetables.insert
verwenden - Verwenden Sie die Datendefinitionssprachen-Anweisung (DDL)
CREATE EXTERNAL TABLE
. - Mithilfe der Clientbibliotheken
Wählen Sie eine der folgenden Optionen aus:
Console
Rufen Sie die Seite BigQuery auf.
Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.
Maximieren Sie die Option
Aktionen und klicken Sie auf Tabelle erstellen.Geben Sie im Bereich Quelle die folgenden Details an:
Wählen Sie unter Tabelle erstellen aus die Option Google Cloud Storage aus.
Wählen Sie unter Datei aus GCS-Bucket auswählen oder URI-Muster auswählen einen Bucket und eine Datei aus, die verwendet werden sollen, oder geben Sie den Pfad im Format
gs://bucket_name/[folder_name/]file_name
ein.In der Google Cloud Console können Sie nicht mehrere URIs angeben. Sie können jedoch mehrere Dateien auswählen, indem Sie ein Platzhalterzeichen (
*
) angeben. Beispiel:gs://mybucket/file_name*
. Weitere Informationen finden Sie unter Unterstützung von Platzhaltern für Cloud Storage-URIs.Der Cloud Storage-Bucket muss sich am selben Standort wie das Dataset befinden, das die von Ihnen erstellte Tabelle enthält.
Wählen Sie bei Dateiformat das Format aus, das zu Ihrer Datei passt.
Geben Sie im Bereich Ziel die folgenden Details an:
Wählen Sie unter Projekt das Projekt aus, in dem die Tabelle erstellt werden soll.
Wählen Sie unter Dataset das Dataset aus, in dem die Tabelle erstellt werden soll.
Geben Sie unter Tabelle den Namen der Tabelle ein, die Sie in BigQuery erstellen.
Wählen Sie als Tabellentyp die Option Externe Tabelle aus.
Im Abschnitt Schema können Sie entweder die automatische Schemaerkennung aktivieren oder ein Schema manuell angeben, wenn Sie eine Quelldatei haben. Wenn Sie keine Quelldatei haben, müssen Sie ein Schema manuell angeben.
Klicken Sie auf die Option Automatisch erkennen, um die automatische Schemaerkennung zu aktivieren.
Wenn Sie ein Schema manuell angeben möchten, klicken Sie das Kästchen Automatisch erkennen nicht an. Klicken Sie auf Als Text bearbeiten und geben Sie das Tabellenschema als JSON-Array ein.
Wenn Sie Zeilen mit zusätzlichen Spaltenwerten Zeilen ignorieren möchten, die nicht mit dem Schema übereinstimmen, maximieren Sie den Abschnitt Erweiterte Optionen und wählen Sie Unbekannte Werte aus.
Klicken Sie anschließend auf Tabelle erstellen.
Nachdem die permanente Tabelle erstellt wurde, können Sie die Tabelle wie eine native BigQuery-Tabelle abfragen. Nach Abschluss der Abfrage können Sie die Ergebnisse als CSV- oder JSON-Dateien exportieren oder als Tabelle bzw. in Google Sheets speichern.
SQL
Sie können eine permanente externe Tabelle erstellen, indem Sie die CREATE EXTERNAL TABLE
DDL-Anweisung ausführen.
Sie können das Schema explizit angeben oder die automatische Schemaerkennung verwenden, um das Schema aus den externen Daten abzuleiten.
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` OPTIONS ( format ="TABLE_FORMAT", uris = ['BUCKET_PATH'[,...]] );
Ersetzen Sie Folgendes:
PROJECT_ID
: der Name Ihres Projekts, in dem Sie die Tabelle erstellen möchten, z. B.myproject
DATASET
: der Name des BigQuery-Datasets, in dem Sie die Tabelle erstellen möchten, z. B.mydataset
EXTERNAL_TABLE_NAME
: der Name der Tabelle, die Sie erstellen möchten, z. B.mytable
TABLE_FORMAT
: das Format der Tabelle, die Sie erstellen möchten, z. B.PARQUET
BUCKET_PATH
: der Pfad zum Cloud Storage-Bucket, der die Daten für die externe Tabelle im Format['gs://bucket_name/[folder_name/]file_name']
enthält.Sie können mehrere Dateien aus dem Bucket auswählen, indem Sie im Pfad ein Sternchenzeichen (
*
) angeben. Beispiel:['gs://mybucket/file_name*']
. Weitere Informationen finden Sie unter Unterstützung von Platzhaltern für Cloud Storage-URIs.Sie können mehrere Buckets für die Option
uris
angeben, indem Sie mehrere Pfade angeben.Die folgenden Beispiele zeigen gültige
uris
-Werte:['gs://bucket/path1/myfile.csv']
['gs://bucket/path1/*.csv']
['gs://bucket/path1/*', 'gs://bucket/path2/file00*']
Wenn Sie
uris
-Werte angeben, die auf mehrere Dateien abzielen, müssen alle diese Dateien ein kompatibles Schema verwenden.Weitere Informationen zur Verwendung von Cloud Storage-URIs in BigQuery finden Sie unter Cloud Storage-Ressourcenpfad.
Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
Beispiele
Im folgenden Beispiel wird die automatische Schemaerkennung verwendet, um eine externe Tabelle namens sales
zu erstellen, die mit einer in Cloud Storage gespeicherten CSV-Datei verknüpft ist:
CREATE OR REPLACE EXTERNAL TABLE mydataset.sales OPTIONS ( format = 'CSV', uris = ['gs://mybucket/sales.csv']);
Im nächsten Beispiel wird ein Schema explizit angegeben und die erste Zeile der CSV-Datei wird übersprungen:
CREATE OR REPLACE EXTERNAL TABLE mydataset.sales ( Region STRING, Quarter STRING, Total_Sales INT64 ) OPTIONS ( format = 'CSV', uris = ['gs://mybucket/sales.csv'], skip_leading_rows = 1);
bq
Verwenden Sie zum Erstellen einer externen Tabelle den Befehl bq mk
mit dem --external_table_definition
-Flag. Dieses Flag enthält entweder einen Pfad zu einer Tabellendefinitionsdatei oder eine Inline-Tabellendefinition.
Option 1: Tabellendefinitionsdatei
Verwenden Sie den Befehl bq mkdef
, um eine Tabellendefinitionsdatei zu erstellen, und übergeben Sie dann den Dateipfad an den bq mk
-Befehl so:
bq mkdef --source_format=SOURCE_FORMAT \ BUCKET_PATH > DEFINITION_FILE bq mk --table \ --external_table_definition=DEFINITION_FILE \ DATASET_NAME.TABLE_NAME \ SCHEMA
Dabei gilt:
SOURCE_FORMAT
: das Format der externen Datenquelle Beispiel:CSV
.BUCKET_PATH
: der Pfad zum Cloud Storage-Bucket, der die Daten für die Tabelle im Formatgs://bucket_name/[folder_name/]file_pattern
enthält.Sie können mehrere Dateien aus dem Bucket auswählen, indem Sie im
file_pattern
ein Sternchenzeichen (*
) angeben. Beispiel:gs://mybucket/file00*.parquet
. Weitere Informationen finden Sie unter Unterstützung von Platzhaltern für Cloud Storage-URIs.Sie können mehrere Buckets für die Option
uris
angeben, indem Sie mehrere Pfade angeben.Die folgenden Beispiele zeigen gültige
uris
-Werte:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.parquet
gs://bucket/path1/file1*
,gs://bucket1/path1/*
Wenn Sie
uris
-Werte angeben, die auf mehrere Dateien abzielen, müssen alle diese Dateien ein kompatibles Schema verwenden.Weitere Informationen zur Verwendung von Cloud Storage-URIs in BigQuery finden Sie unter Cloud Storage-Ressourcenpfad.
DEFINITION_FILE
: der Pfad zur Tabellendefinitionsdatei auf Ihrem lokalen Rechner.DATASET_NAME
: der Name des Datasets, das die Tabelle enthältTABLE_NAME
: Der Name der Tabelle, die Sie erstellen.SCHEMA
: gibt einen Pfad zu einer JSON-Schemadatei oder das Schema im Formatfield:data_type,field:data_type,...
an.
Beispiel:
bq mkdef --source_format=CSV gs://mybucket/sales.csv > mytable_def
bq mk --table --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
Um die automatische Schemaerkennung zu verwenden, geben Sie im mkdef
-Befehl das --autodetect=true
-Flag an und lassen das Schema weg:
bq mkdef --source_format=CSV --autodetect=true \
gs://mybucket/sales.csv > mytable_def
bq mk --table --external_table_definition=mytable_def \
mydataset.mytable
Option 2: Inline-Tabellendefinition
Anstatt eine Tabellendefinitionsdatei zu erstellen, können Sie die Tabellendefinition direkt an den bq mk
-Befehl übergeben:
bq mk --table \ --external_table_definition=@SOURCE_FORMAT=BUCKET_PATH \ DATASET_NAME.TABLE_NAME \ SCHEMA
Dabei gilt:
SOURCE_FORMAT
: das Format der externen DatenquelleBeispiel:
CSV
.BUCKET_PATH
: der Pfad zum Cloud Storage-Bucket, der die Daten für die Tabelle im Formatgs://bucket_name/[folder_name/]file_pattern
enthält.Sie können mehrere Dateien aus dem Bucket auswählen, indem Sie im
file_pattern
ein Sternchenzeichen (*
) angeben. Beispiel:gs://mybucket/file00*.parquet
. Weitere Informationen finden Sie unter Unterstützung von Platzhaltern für Cloud Storage-URIs.Sie können mehrere Buckets für die Option
uris
angeben, indem Sie mehrere Pfade angeben.Die folgenden Beispiele zeigen gültige
uris
-Werte:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.parquet
gs://bucket/path1/file1*
,gs://bucket1/path1/*
Wenn Sie
uris
-Werte angeben, die auf mehrere Dateien abzielen, müssen alle diese Dateien ein kompatibles Schema verwenden.Weitere Informationen zur Verwendung von Cloud Storage-URIs in BigQuery finden Sie unter Cloud Storage-Ressourcenpfad.
DATASET_NAME
: der Name des Datasets, das die Tabelle enthält.TABLE_NAME
: Der Name der Tabelle, die Sie erstellen.SCHEMA
: gibt einen Pfad zu einer JSON-Schemadatei oder das Schema im Formatfield:data_type,field:data_type,...
an. Wenn Sie die automatische Schemaerkennung verwenden möchten, lassen Sie dieses Argument weg.
Beispiel:
bq mkdef --source_format=CSV gs://mybucket/sales.csv > mytable_def
bq mk --table --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
API
Rufen Sie die API-Methode tables.insert
auf und erstellen Sie eine ExternalDataConfiguration
in der Ressource Table
, die Sie übergeben.
Geben Sie das Attribut schema
an oder setzen Sie das Attribut autodetect
auf true
, um die automatische Schemaerkennung für unterstützte Datenquellen zu aktivieren.
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.
Externe Tabellen für partitionierte Daten erstellen
Sie können eine externe Tabelle für mit Hive partitionierte Daten erstellen, die sich in Cloud Storage befinden. Nachdem Sie eine extern partitionierte Tabelle erstellt haben, können Sie den Partitionsschlüssel nicht mehr ändern. Sie müssen die Tabelle neu erstellen, um den Partitionierungsschlüssel zu ändern.
Wählen Sie eine der folgenden Optionen aus, um eine externe Tabelle für partitionierte Hive-Daten zu erstellen:
Console
Wechseln Sie in der Google Cloud Console zu BigQuery.
- Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.
- Klicken Sie auf Aktionen ansehen und dann auf Tabelle erstellen. Der Bereich Tabelle erstellen wird geöffnet.
- Geben Sie im Bereich Quelle die folgenden Details an:
- Wählen Sie unter Tabelle erstellen aus die Option Google Cloud Storage aus.
- Geben Sie unter Datei aus Cloud Storage-Bucket auswählen den Pfad zum Cloud Storage-Ordner mithilfe von Platzhaltern ein.
Beispiel:
my_bucket/my_files*
Der Cloud Storage-Bucket muss sich am selben Standort wie das Dataset befinden, das die Tabelle enthält, die Sie erstellen, anhängen oder überschreiben möchten. - Wählen Sie in der Liste Dateiformat den Dateityp aus.
- Klicken Sie auf das Kästchen Quelldatenpartitionierung und geben Sie dann für Quell-URI-Präfix auswählen das Cloud Storage-URI-Präfix ein. Beispiel:
gs://my_bucket/my_files
- Wählen Sie im Bereich Partitionsinferenzmodus eine der folgenden Optionen aus:
- Typen automatisch ableiten: Legen Sie den Erkennungsmodus des Partitionsschemas auf
AUTO
fest. - Alle Spalten sind Strings: Legen Sie den Modus für die Erkennung des Partitionsschemas auf
STRINGS
fest. - Eigene bereitstellen: Legen Sie den Erkennungsmodus für das Partitionsschema auf
CUSTOM
fest und geben Sie die Schemainformationen für die Partitionierungsschlüssel manuell ein. Weitere Informationen finden Sie unter Benutzerdefiniertes Partitionierungsschlüsselschema bereitstellen.
- Typen automatisch ableiten: Legen Sie den Erkennungsmodus des Partitionsschemas auf
- Optional: Wenn Sie einen Partitionsfilter für alle Abfragen für diese Tabelle benötigen, klicken Sie das Kästchen Partitionsfilter anfordern an. Der Partitionsfilter, den Sie dadurch obligatorisch machen, kann die Kosten senken und die Leistung verbessern. Weitere Informationen finden Sie unter Prädikatfilter für Partitionsschlüssel in Abfragen erforderlich.
- Geben Sie im Bereich Ziel die folgenden Details an:
- Wählen Sie unter Projekt das Projekt aus, in dem Sie die Tabelle erstellen möchten.
- Wählen Sie bei Dataset das Dataset aus, in dem Sie die Tabelle erstellen möchten.
- Geben Sie unter Tabelle den Namen der Tabelle ein, die Sie erstellen möchten.
- Wählen Sie als Tabellentyp die Option Externe Tabelle aus.
- Geben Sie im Abschnitt Schema die Schemadefinition ein.
- Wählen Sie Automatisch erkennen aus, um die automatische Erkennung des Schemas zu aktivieren.
- Wenn Sie Zeilen mit zusätzlichen Spaltenwerten ignorieren möchten, die nicht mit dem Schema übereinstimmen, maximieren Sie den Abschnitt Erweiterte Optionen und wählen Sie Unbekannte Werte aus.
- Klicken Sie auf Tabelle erstellen.
SQL
Verwenden Sie die DDL-Anweisung CREATE EXTERNAL TABLE
.
Das folgende Beispiel verwendet die automatische Erkennung von Hive-Partitionsschlüsseln:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH PARTITION COLUMNS OPTIONS ( format = 'SOURCE_FORMAT', uris = ['GCS_URIS'], hive_partition_uri_prefix = 'GCS_URI_SHARED_PREFIX', require_hive_partition_filter = BOOLEAN);
Dabei gilt:
SOURCE_FORMAT
ist das Format der externen Datenquelle, z. B.PARQUET
GCS_URIS
ist der Pfad zum Cloud Storage-Ordner im PlatzhalterformatGCS_URI_SHARED_PREFIX
ist das Präfix des Quell-URI ohne den PlatzhalterBOOLEAN
gibt an, ob ein Prädikatfilter zur Zeit der Abfrage erforderlich ist Dieses Flag ist optional. Der Standardwert istfalse
.
Das folgende Beispiel verwendet benutzerdefinierte Hive-Partitionsschlüssel und -Typen, die in der WITH PARTITION COLUMNS
-Klausel aufgelistet werden:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH PARTITION COLUMNS (PARTITION_COLUMN_LIST) OPTIONS ( format = 'SOURCE_FORMAT', uris = ['GCS_URIS'], hive_partition_uri_prefix = 'GCS_URI_SHARED_PREFIX', require_hive_partition_filter = BOOLEAN);
Dabei gilt:
PARTITION_COLUMN_LIST
ist eine Liste an Spalten, die der Reihenfolge im Pfad des Cloud Storage-Ordners folgen und folgendes Format haben:
KEY1 TYPE1, KEY2 TYPE2
Im folgenden Beispiel wird eine extern partitionierte Tabelle erstellt. Mit der automatischen Schemaerkennung wird sowohl das Dateisystem als auch das Hive-Partitionierungslayout ermittelt. Ist der externe Pfad gs://bucket/path/field_1=first/field_2=1/data.parquet
, werden die Partitionsspalten als field_1
(STRING
) und field_2
(INT64
) erkannt.
CREATE EXTERNAL TABLE dataset.AutoHivePartitionedTable WITH PARTITION COLUMNS OPTIONS ( uris = ['gs://bucket/path/*'], format = 'PARQUET', hive_partition_uri_prefix = 'gs://bucket/path', require_hive_partition_filter = false);
Im folgenden Beispiel wird eine extern partitionierte Tabelle erstellt, indem die Partitionsspalten explizit angegeben werden. In diesem Beispiel wird davon ausgegangen, dass der externe Dateipfad das Muster gs://bucket/path/field_1=first/field_2=1/data.parquet
hat.
CREATE EXTERNAL TABLE dataset.CustomHivePartitionedTable WITH PARTITION COLUMNS ( field_1 STRING, -- column order must match the external path field_2 INT64) OPTIONS ( uris = ['gs://bucket/path/*'], format = 'PARQUET', hive_partition_uri_prefix = 'gs://bucket/path', require_hive_partition_filter = false);
bq
Verwenden Sie zuerst den Befehl bq mkdef
, um eine Tabellendefinitionsdatei zu erstellen:
bq mkdef \ --source_format=SOURCE_FORMAT \ --hive_partitioning_mode=PARTITIONING_MODE \ --hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX \ --require_hive_partition_filter=BOOLEAN \ GCS_URIS > DEFINITION_FILE
Dabei gilt:
SOURCE_FORMAT
: das Format der externen Datenquelle. Beispiel:CSV
PARTITIONING_MODE
: der Hive-Partitionierungsmodus. Verwenden Sie einen der folgenden Werte:AUTO
: Schlüsselnamen und -typen automatisch erkennen.STRINGS
: Schlüsselnamen automatisch in Strings konvertieren.CUSTOM
: Schlüsselschema im Präfix des Quell-URI codieren.
GCS_URI_SHARED_PREFIX
: das Präfix des Quell-URI.BOOLEAN
gibt an, ob ein Prädikatfilter zum Zeitpunkt der Abfrage erforderlich ist. Dieses Flag ist optional. Der Standardwert istfalse
.GCS_URIS
: der Pfad zum Cloud Storage-Ordner im Platzhalterformat.DEFINITION_FILE
: der Pfad zur Tabellendefinitionsdatei auf Ihrem lokalen Rechner.
Wenn PARTITIONING_MODE
den Wert CUSTOM
hat, fügen Sie das Partitionsschlüsselschema im Präfix des Quell-URI im folgenden Format ein:
--hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX/{KEY1:TYPE1}/{KEY2:TYPE2}/...
Verwenden Sie nach dem Erstellen der Tabellendefinitionsdatei den Befehl bq mk
, um die externe Tabelle zu erstellen:
bq mk --external_table_definition=DEFINITION_FILE \ DATASET_NAME.TABLE_NAME \ SCHEMA
Dabei gilt:
DEFINITION_FILE
: der Pfad zur Tabellendefinitionsdatei.DATASET_NAME
: der Name des Datasets, das die Tabelle enthältTABLE_NAME
: Der Name der Tabelle, die Sie erstellen.SCHEMA
: gibt einen Pfad zu einer JSON-Schemadatei oder das Schema im Formatfield:data_type,field:data_type,...
an. Wenn Sie die automatische Schemaerkennung verwenden möchten, lassen Sie dieses Argument weg.
Beispiele
Im folgenden Beispiel wird der Hive-Partitionierungsmodus AUTO
verwendet:
bq mkdef --source_format=CSV \
--hive_partitioning_mode=AUTO \
--hive_partitioning_source_uri_prefix=gs://myBucket/myTable \
gs://myBucket/myTable/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
Im folgenden Beispiel wird der Hive-Partitionierungsmodus STRING
verwendet:
bq mkdef --source_format=CSV \
--hive_partitioning_mode=STRING \
--hive_partitioning_source_uri_prefix=gs://myBucket/myTable \
gs://myBucket/myTable/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
Im folgenden Beispiel wird der Hive-Partitionierungsmodus CUSTOM
verwendet:
bq mkdef --source_format=CSV \
--hive_partitioning_mode=CUSTOM \
--hive_partitioning_source_uri_prefix=gs://myBucket/myTable/{dt:DATE}/{val:STRING} \
gs://myBucket/myTable/* > mytable_def
bq mk --external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
API
Wenn Sie die Hive-Partitionierung mithilfe der BigQuery API festlegen möchten, fügen Sie einhivePartitioningOptions-Objekt in derExternalDataConfiguration ein, wenn Sie dieTabellendefinitionsdatei erstellen.
Wenn Sie das Feld hivePartitioningOptions.mode
auf CUSTOM
festlegen, müssen Sie das Schema für den Partitionierungsschlüssel im Feld hivePartitioningOptions.sourceUriPrefix
folgendermaßen codieren: gs://BUCKET/PATH_TO_TABLE/{KEY1:TYPE1}/{KEY2:TYPE2}/...
Wenn Sie die Verwendung eines Prädikatfilters zum Zeitpunkt der Abfrage erzwingen möchten, legen Sie das Feld hivePartitioningOptions.requirePartitionFilter
auf true
fest.
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.
Externe Tabellen abfragen
Weitere Informationen finden Sie unter Cloud Storage-Daten in externen Tabellen abfragen.
Externe Tabellen auf BigLake aktualisieren
Sie können ein Upgrade auf Cloud Storage auf BigLake-Tabellen ausführen, wenn Sie die externe Tabelle einer Verbindung zuordnen. Wenn Sie Metadaten-Caching mit der BigLake-Tabelle verwenden möchten, können Sie gleichzeitig Einstellungen dafür festlegen. Tabellendetails wie das Quellformat und den Quell-URI finden Sie unter Tabelleninformationen abrufen.
Wählen Sie eine der folgenden Optionen, um eine externe Tabelle auf eine BigLake-Tabelle zu aktualisieren:
SQL
Verwenden Sie die DDL-Anweisung CREATE OR REPLACE EXTERNAL TABLE
, um eine Tabelle zu aktualisieren:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
CREATE OR REPLACE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH CONNECTION `REGION.CONNECTION_ID` OPTIONS( format ="TABLE_FORMAT", uris = ['BUCKET_PATH'], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE' );
Ersetzen Sie Folgendes:
PROJECT_ID
: der Name des Projekts, das die Verbindung enthältDATASET
: der Name des Datasets, das die Tabelle enthältEXTERNAL_TABLE_NAME
: der Name der TabelleREGION
: die Region, die die Verbindung enthältCONNECTION_ID
: der Name der zu verwendenden VerbindungTABLE_FORMAT
: das von der Tabelle verwendete FormatDies kann beim Aktualisieren der Tabelle nicht geändert werden.
BUCKET_PATH
: der Pfad zum Cloud Storage-Bucket, der die Daten für die externe Tabelle im Format['gs://bucket_name/[folder_name/]file_name']
enthält.Sie können mehrere Dateien aus dem Bucket auswählen, indem Sie im Pfad ein Sternchenzeichen (
*
) angeben. Beispiel:['gs://mybucket/file_name*']
. Weitere Informationen finden Sie unter Unterstützung von Platzhaltern für Cloud Storage-URIs.Sie können mehrere Buckets für die Option
uris
angeben, indem Sie mehrere Pfade angeben.Die folgenden Beispiele zeigen gültige
uris
-Werte:['gs://bucket/path1/myfile.csv']
['gs://bucket/path1/*.csv']
['gs://bucket/path1/*', 'gs://bucket/path2/file00*']
Wenn Sie
uris
-Werte angeben, die auf mehrere Dateien abzielen, müssen alle diese Dateien ein kompatibles Schema verwenden.Weitere Informationen zur Verwendung von Cloud Storage-URIs in BigQuery finden Sie unter Cloud Storage-Ressourcenpfad.
STALENESS_INTERVAL
: Gibt an, ob im Cache gespeicherte Metadaten von Vorgängen für die Tabelle verwendet werden und wie aktuell die im Cache gespeicherten Metadaten sein müssen, damit der Vorgang sie verwenden kann.Weitere Informationen zu Überlegungen zum Metadaten-Caching finden Sie unter Leistungsmetadaten-Caching.
Geben Sie 0 an, um das Caching von Metadaten zu deaktivieren. Das ist die Standardeinstellung.
Geben Sie zum Aktivieren des Metadaten-Cachings für das Intervallliteral einen Wert zwischen 30 Minuten und 7 Tagen an. Beispiel: Geben Sie
INTERVAL 4 HOUR
für ein Veralterungsintervall von vier Stunden an. Mit diesem Wert verwenden Vorgänge im Zusammenhang mit der Tabelle im Cache gespeicherte Metadaten, wenn sie innerhalb der letzten vier Stunden aktualisiert wurden. Sind die im Cache gespeicherten Metadaten älter, werden für den Vorgang stattdessen Metadaten aus Cloud Storage abgerufen.CACHE_MODE
: gibt an, ob der Metadaten-Cache automatisch oder manuell aktualisiert wird.Weitere Informationen zu Überlegungen zum Metadaten-Caching finden Sie unter Leistungsmetadaten-Caching.
Legen Sie
AUTOMATIC
fest, damit der Metadaten-Cache in einem systemdefinierten Intervall aktualisiert wird, normalerweise zwischen 30 und 60 Minuten.Legen Sie
MANUAL
fest, wenn Sie den Metadaten-Cache nach einem von Ihnen bestimmten Zeitplan aktualisieren möchten. In diesem Fall können Sie den SystemvorgangBQ.REFRESH_EXTERNAL_METADATA_CACHE
aufrufen, um den Cache zu aktualisieren.Sie müssen
CACHE_MODE
festlegen, wennSTALENESS_INTERVAL
auf einen Wert größer als 0 festgelegt ist.
Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
bq
Verwenden Sie die Befehle bq mkdef
und bq update
, um eine Tabelle zu aktualisieren:
Generieren Sie eine externe Tabellendefinition, in der die Aspekte der zu ändernden Tabelle beschrieben werden:
bq mkdef --connection_id=PROJECT_ID.REGION.CONNECTION_ID \ --source_format=TABLE_FORMAT \ --metadata_cache_mode=CACHE_MODE \ "BUCKET_PATH" > /tmp/DEFINITION_FILE
Ersetzen Sie dabei Folgendes:
PROJECT_ID
: der Name des Projekts, das die Verbindung enthältREGION
: die Region, die die Verbindung enthältCONNECTION_ID
: Name der zu verwendenden VerbindungTABLE_FORMAT
: das von der Tabelle verwendete Format Dies kann beim Aktualisieren der Tabelle nicht geändert werden.CACHE_MODE
: gibt an, ob der Metadaten-Cache automatisch oder manuell aktualisiert wird. Weitere Informationen zu Überlegungen zum Metadaten-Caching finden Sie unter Leistungsmetadaten-Caching.Legen Sie
AUTOMATIC
fest, damit der Metadaten-Cache in einem systemdefinierten Intervall aktualisiert wird, normalerweise zwischen 30 und 60 Minuten.Legen Sie
MANUAL
fest, wenn Sie den Metadaten-Cache nach einem von Ihnen bestimmten Zeitplan aktualisieren möchten. In diesem Fall können Sie den SystemvorgangBQ.REFRESH_EXTERNAL_METADATA_CACHE
aufrufen, um den Cache zu aktualisieren.Sie müssen
CACHE_MODE
festlegen, wennSTALENESS_INTERVAL
auf einen Wert größer als 0 festgelegt ist.BUCKET_PATH
: der Pfad zum Cloud Storage-Bucket, der die Daten für die externe Tabelle im Formatgs://bucket_name/[folder_name/]file_name
enthält.Sie können die aus dem Bucket ausgewählten Dateien einschränken, indem Sie im Pfad ein Sternchenzeichen (
*
) angeben. Beispiel:gs://mybucket/file_name*
. Weitere Informationen finden Sie unter Unterstützung von Platzhaltern für Cloud Storage-URIs.Sie können mehrere Buckets für die Option
uris
angeben, indem Sie mehrere Pfade angeben.Die folgenden Beispiele zeigen gültige
uris
-Werte:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.csv
gs://bucket/path1/*,gs://bucket/path2/file00*
Wenn Sie
uris
-Werte angeben, die auf mehrere Dateien abzielen, müssen alle diese Dateien ein kompatibles Schema verwenden.Weitere Informationen zur Verwendung von Cloud Storage-URIs in BigQuery finden Sie unter Cloud Storage-Ressourcenpfad.
DEFINITION_FILE
: der Name der Tabellendefinitionsdatei, die Sie erstellen.
Aktualisieren Sie die Tabelle mit der neuen externen Tabellendefinition:
bq update --max_staleness=STALENESS_INTERVAL \ --external_table_definition=/tmp/DEFINITION_FILE \ PROJECT_ID:DATASET.EXTERNAL_TABLE_NAME
Ersetzen Sie dabei Folgendes:
STALENESS_INTERVAL
: Gibt an, ob im Cache gespeicherte Metadaten von Vorgängen für die Tabelle verwendet werden und wie aktuell die im Cache gespeicherten Metadaten sein müssen, damit der Vorgang sie verwenden kann. Weitere Informationen zu Überlegungen zum Metadaten-Caching finden Sie unter Leistungsmetadaten-Caching.Geben Sie 0 an, um das Caching von Metadaten zu deaktivieren. Das ist die Standardeinstellung.
Geben Sie zum Aktivieren des Metadaten-Cachings einen Intervallwert zwischen 30 Minuten und 7 Tagen unter Verwendung des in der
INTERVAL
-Datentypdokumentation beschriebenen FormatsY-M D H:M:S
. Beispiel: Geben Sie0-0 0 4:0:0
für ein Veralterungsintervall von vier Stunden an. Mit diesem Wert verwenden Vorgänge im Zusammenhang mit der Tabelle im Cache gespeicherte Metadaten, wenn sie innerhalb der letzten vier Stunden aktualisiert wurden. Sind die im Cache gespeicherten Metadaten älter, werden für den Vorgang stattdessen Metadaten aus Cloud Storage abgerufen.DEFINITION_FILE
: der Name der Tabellendefinitionsdatei, die Sie erstellt oder aktualisiert haben.PROJECT_ID
: der Name des Projekts, das die Verbindung enthältDATASET
: der Name des Datasets, das die Tabelle enthältEXTERNAL_TABLE_NAME
: der Name der Tabelle
Cloud Storage-Ressourcenpfad
Wenn Sie eine externe Tabelle basierend auf einer Cloud Storage-Datenquelle erstellen, müssen Sie den Pfad zu den Daten angeben.
Der Cloud Storage-Ressourcenpfad enthält den Bucket-Namen und das Objekt (Dateiname). Wenn der Cloud Storage-Bucket beispielsweise den Namen mybucket
hat und die Datendatei den Namen myfile.csv
hat, lautet der Bucket-URI gs://mybucket/myfile.csv
.
BigQuery unterstützt keine Cloud Storage-Ressourcenpfade, die nach dem anfänglichen doppelten Schrägstrich weitere, aufeinanderfolgende Schrägstriche enthalten.
Cloud Storage-Objektnamen können mehrere aufeinanderfolgende Schrägstriche ("/") enthalten. BigQuery wandelt diese jedoch in einen einzelnen Schrägstrich um. Der folgende Ressourcenpfad ist beispielsweise in Cloud Storage gültig, funktioniert aber nicht in BigQuery: gs://bucket/my//object//name
So rufen Sie den Cloud Storage-Ressourcenpfad ab:
Öffnen Sie die Cloud Storage-Konsole.
Gehen Sie zum Standort des Objekts (Datei), das die Quelldaten enthält.
Klicken Sie auf den Namen des gewünschten Objekts.
Die Seite Objektdetails wird geöffnet.
Kopieren Sie den Wert im Feld gsutil URI, der mit
gs://
beginnt.
Unterstützung von Platzhaltern für Cloud Storage-URIs
Wenn Ihre Daten auf mehrere Dateien verteilt sind, können Sie mehrere Dateien mit einem Sternchenplatzhalter (*) auswählen. Die Verwendung des Sternchenplatzhalters muss folgenden Regeln entsprechen:
- Das Sternchen kann innerhalb oder am Ende des Objektnamens stehen.
- Die Verwendung mehrerer Sternchen wird nicht unterstützt. Beispiel: Der Pfad
gs://mybucket/fed-*/temp/*.csv
ist ungültig. - Die Verwendung eines Sternchens mit dem Bucket-Namen wird nicht unterstützt.
Beispiele:
Im folgenden Beispiel wird gezeigt, wie Sie alle Dateien in allen Ordnern auswählen, die mit dem Präfix
gs://mybucket/fed-samples/fed-sample
beginnen:gs://mybucket/fed-samples/fed-sample*
Im folgenden Beispiel wird gezeigt, wie nur Dateien mit der
.csv
-Erweiterung im Ordner mit dem Namenfed-samples
und allen Unterordnern vonfed-samples
ausgewählt werden:gs://mybucket/fed-samples/*.csv
Das folgende Beispiel zeigt, wie Sie Dateien mit dem Benennungsmuster
fed-sample*.csv
im Ordnerfed-samples
auswählen. In diesem Beispiel werden keine Dateien in Unterordnern vonfed-samples
ausgewählt.gs://mybucket/fed-samples/fed-sample*.csv
Bei der Verwendung des bq-Befehlszeilentools müssen Sie das Sternchen auf einigen Plattformen unter Umständen mit einem Escape-Zeichen versehen.
Sie können keinen Sternchenplatzhalter verwenden, wenn Sie externe Tabellen erstellen, die mit Datastore- oder Firestore-Exporten verknüpft sind.
Beschränkungen
Informationen zu Einschränkungen für externe Tabellen finden Sie unter Einschränkungen für externe Tabellen.
Nächste Schritte
- Externe Tabellen
- Informationen zu BigLake-Tabellen.