Cloud Storage-Daten in externen Tabellen abfragen
In diesem Dokument wird gezeigt, wie Sie Daten abfragen, die in einer externen Cloud Storage-Tabelle gespeichert sind.
Hinweis
Prüfen Sie, ob die externe Cloud Storage-Tabelle vorhanden ist.
Erforderliche Rollen
Zum Abfragen externer Cloud Storage-Tabellen benötigen Sie die folgenden Rollen:
- BigQuery Datenbetrachter (
roles/bigquery.dataViewer
) - BigQuery-Nutzer (
roles/bigquery.user
) - Storage-Objekt-Betrachter (
roles/storage.objectViewer
)
Abhängig von Ihren Berechtigungen können Sie diese Rollen selbst zuweisen oder Ihren Administrator bitten, sie Ihnen zu gewähren. Weitere Informationen zum Gewähren von Rollen finden Sie unter Zuweisbare Rollen für Ressourcen aufrufen.
Wenn Sie die genauen BigQuery-Berechtigungen sehen möchten, die zum Abfragen externer Tabellen erforderlich sind, maximieren Sie den Abschnitt Erforderliche Berechtigungen:
Erforderliche Berechtigungen
bigquery.jobs.create
bigquery.readsessions.create
(Nur erforderlich, wenn Sie Daten mit der BigQuery Storage Read API lesen)bigquery.tables.get
bigquery.tables.getData
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Dauerhafte externe Tabellen abfragen
Nachdem Sie eine externe Cloud Storage-Tabelle erstellt haben, können Sie sie mit der GoogleSQL-Syntax abfragen, so als wäre sie eine BigQuery-Standardtabelle. Beispiel: SELECT field1, field2
FROM mydataset.my_cloud_storage_table;
.
Temporäre externe Tabellen abfragen
Das Abfragen einer externen Datenquelle mithilfe einer temporären Tabelle eignet sich für einmalige Ad-hoc-Abfragen von externen Daten sowie für ETL-Vorgänge (Extraktion, Transformation, Laden).
Wenn Sie eine externe Datenquelle abfragen möchten, ohne eine permanente Tabelle zu erstellen, geben Sie eine Tabellendefinition für die temporäre Tabelle an und verwenden Sie diese Tabellendefinition dann in einem Befehl oder Aufruf, um die temporäre Tabelle abzufragen. Sie können die Tabellendefinition auf eine der folgenden Arten angeben:
- Eine Tabellendefinitionsdatei
- Mit einer Inline-Schemadefinition
- Eine JSON-Schemadatei
Die temporäre externe Tabelle wird mit der Tabellendefinition bzw. dem bereitgestellten Schema erstellt. Anschließend erfolgt die Abfrage der temporären externen Tabelle.
Wenn Sie eine temporäre externe Tabelle verwenden, erstellen Sie keine Tabelle in einem Ihrer BigQuery-Datasets. Da die Tabelle nicht permanent in einem Dataset gespeichert wird, kann sie nicht für andere Nutzer freigegeben werden.
Sie können eine temporäre Tabelle erstellen und abfragen, die mit einer externen Datenquelle verknüpft ist, indem Sie das bq-Befehlszeilentool, die API oder die Clientbibliotheken verwenden.
bq
Verwenden Sie den Befehl bq query
mit dem Flag --external_table_definition
, um eine mit einer externen Datenquelle verknüpfte temporäre Tabelle abzufragen.
Wenn Sie eine temporäre Tabelle, die mit einer externen Datenquelle verknüpft ist, mit dem bq-Befehlszeilentool abfragen, können Sie das Schema der Tabelle folgendermaßen identifizieren:
- Mit einer Tabellendefinitionsdatei, die auf Ihrem lokalen Rechner gespeichert ist
- Mit einer Inline-Schemadefinition
- Mit einer JSON-Schemadatei, die auf Ihrem lokalen Rechner gespeichert ist
Optional: Geben Sie das Flag --location
an und legen Sie als Wert Ihren Standort fest.
Geben Sie den folgenden Befehl ein, um eine mit der externen Datenquelle verknüpfte temporäre Tabelle mit einer Tabellendefinitionsdatei abzufragen:
bq --location=LOCATION query \ --external_table_definition=TABLE::DEFINITION_FILE \ 'QUERY'
Dabei gilt:
LOCATION
: Name Ihres Standorts. Das Flag--location
ist optional. Wenn Sie beispielsweise BigQuery in der Region "Tokio" verwenden, können Sie den Wert des Flags aufasia-northeast1
setzen. Mit der Datei .bigqueryrc können Sie einen Standardwert für den Standort festlegen.TABLE
: der Name der vorläufigen Tabelle, die Sie erstellen.DEFINITION_FILE
: der Pfad zur Tabellendefinitionsdatei auf Ihrem lokalen Rechner.QUERY
: die Abfrage, die Sie an die temporäre Tabelle stellen.
Mit dem folgenden Befehl wird beispielsweise die temporäre Tabelle sales
mithilfe der Tabellendefinitionsdatei sales_def
erstellt und abgefragt:
bq query \
--external_table_definition=sales::sales_def \
'SELECT
Region,
Total_sales
FROM
sales'
Geben Sie den folgenden Befehl ein, um eine mit der externen Datenquelle verknüpfte temporäre Tabelle mit einer Inline-Schemadefinition abzufragen:
bq --location=LOCATION query \ --external_table_definition=TABLE::SCHEMA@SOURCE_FORMAT=BUCKET_PATH \ 'QUERY'
Dabei gilt:
LOCATION
: Name Ihres Standorts. Das Flag--location
ist optional. Wenn Sie beispielsweise BigQuery in der Region "Tokio" verwenden, können Sie den Wert des Flags aufasia-northeast1
setzen. Mit der Datei .bigqueryrc können Sie einen Standardwert für den Standort festlegen.TABLE
: der Name der vorläufigen Tabelle, die Sie erstellen.SCHEMA
: die Inline-Schemadefinition im Formatfield:data_type,field:data_type
.SOURCE_FORMAT
: das Format der externen Datenquelle, z. B.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.
QUERY
: die Abfrage, die Sie an die temporäre Tabelle stellen.
Mit dem folgenden Befehl wird beispielsweise die temporäre Tabelle sales
erstellt und abgefragt. Die Tabelle ist mit einer in Cloud Storage gespeicherten CSV-Datei verknüpft und verwendet die Schemadefinition Region:STRING,Quarter:STRING,Total_sales:INTEGER
.
bq query \
--external_table_definition=sales::Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=gs://mybucket/sales.csv \
'SELECT
Region,
Total_sales
FROM
sales'
Geben Sie den folgenden Befehl ein, um eine mit der externen Datenquelle verknüpfte temporäre Tabelle mit einer JSON-Schemadatei abzufragen:
bq --location=LOCATION query \ --external_table_definition=SCHEMA_FILE@SOURCE_FORMAT=BUCKET_PATH \ 'QUERY'
Dabei gilt:
LOCATION
: Name Ihres Standorts. Das Flag--location
ist optional. Wenn Sie beispielsweise BigQuery in der Region "Tokio" verwenden, können Sie den Wert des Flags aufasia-northeast1
setzen. Mit der Datei .bigqueryrc können Sie einen Standardwert für den Standort festlegen.SCHEMA_FILE
: der Pfad zur JSON-Schemadatei auf Ihrem lokalen Rechner.SOURCE_FORMAT
: das Format der externen Datenquelle, z. B.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.
QUERY
: die Abfrage, die Sie an die temporäre Tabelle stellen.
Mit dem folgenden Befehl wird beispielsweise die temporäre Tabelle sales
erstellt und abgefragt. Die Tabelle ist mit einer in Cloud Storage gespeicherten CSV-Datei verknüpft und verwendet die Schemadatei /tmp/sales_schema.json
.
bq query \ --external_table_definition=sales::/tmp/sales_schema.json@CSV=gs://mybucket/sales.csv \ 'SELECT Region, Total_sales FROM sales'
API
So führen Sie eine Abfrage mithilfe der API aus:
- Erstellen Sie ein
Job
-Objekt. - Füllen Sie den Abschnitt
configuration
des ObjektsJob
mit einemJobConfiguration
-Objekt. - Füllen Sie den Abschnitt
query
des ObjektsJobConfiguration
mit einemJobConfigurationQuery
-Objekt. - Füllen Sie den Abschnitt
tableDefinitions
des ObjektsJobConfigurationQuery
mit einemExternalDataConfiguration
-Objekt. - Rufen Sie die Methode
jobs.insert
auf, um die Abfrage asynchron auszuführen, oder die Methodejobs.query
, um die Abfrage synchron auszuführen. Übergeben Sie dabei dasJob
-Objekt.
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ühren Sie eine Abfrage an der Pseudospalte _FILE_NAME
aus:
Auf externen Datenquellen basierende Tabellen enthalten die Pseudospalte _FILE_NAME
. In dieser Spalte wird der vollqualifizierte Pfad zu der Datei angegeben, zu der die Zeile gehört. Diese Spalte ist nur für Tabellen verfügbar, die auf externe Daten verweisen, die in Cloud Storage, Google Drive, Amazon S3 oder Azure Blob Storage gespeichert sind.
Der Spaltenname _FILE_NAME
ist reserviert, d. h. Sie können keine Spalte mit diesem Namen in Ihren Tabellen erstellen. Zur Auswahl des Werts _FILE_NAME
müssen Sie ein Alias verwenden. Die folgende Beispielabfrage zeigt, wie Sie _FILE_NAME
auswählen, indem Sie der Pseudospalte den Alias fn
zuweisen.
bq query \
--project_id=PROJECT_ID \
--use_legacy_sql=false \
'SELECT
name,
_FILE_NAME AS fn
FROM
`DATASET.TABLE_NAME`
WHERE
name contains "Alex"'
Ersetzen Sie Folgendes:
-
PROJECT_ID
ist eine gültige Projekt-ID. Dieses Flag ist nicht erforderlich, wenn Sie Cloud Shell verwenden oder in der Google Cloud CLI ein Standardprojekt einrichten. -
DATASET
ist der Name des Datasets, in dem die permanente externe Tabelle gespeichert ist. -
TABLE_NAME
ist der Name der permanenten externen Tabelle.
Wenn die Abfrage ein Filterprädikat in der Pseudospalte _FILE_NAME
hat, versucht BigQuery, beim Lesen Dateien zu überspringen, die nicht dem Filter entsprechen. Ähnliche Empfehlungen wie beim
Abfragen von nach Aufnahmezeit partitionierten Tabellen mithilfe von Pseudospalten
gelten bei der Erstellung von Abfrageprädikaten mit der Pseudospalte _FILE_NAME
.