Cloud Storage-Daten in BigLake-Tabellen abfragen
In diesem Dokument wird gezeigt, wie Sie Daten abfragen, die in einer Cloud Storage BigLake-Tabelle gespeichert sind.
Hinweis
Prüfen Sie, ob die Cloud Storage BigLake-Tabelle vorhanden ist.
Erforderliche Rollen
Zum Abfragen von Cloud Storage-BigLake-Tabellen benötigen Sie die folgenden Rollen:
- BigQuery Datenbetrachter (
roles/bigquery.dataViewer
) - BigQuery-Nutzer (
roles/bigquery.user
)
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.
Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die genauen Berechtigungen anzuzeigen, die zum Abfragen von Cloud Storage-BigLake-Tabellen erforderlich sind:
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.
BigLake-Tabellen abfragen
Nachdem Sie eine Cloud Storage-BigLake-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;
BigLake-Tabellen mit externen Datenverarbeitungstools abfragen
Sie können BigQuery-Connectors mit anderen Datenverarbeitungstools verwenden, um auf BigLake-Tabellen in Cloud Storage zuzugreifen. Weitere Informationen finden Sie unter Connectors.
Apache Spark
Im folgenden Beispiel wird Dataproc verwendet. Es funktioniert jedoch auch mit jeder Spark-Bereitstellung, die den Spark-BigQuery-Connector verwendet.
In diesem Beispiel geben Sie den Spark-BigQuery-Connector als Initialisierungsaktion an, wenn Sie einen Cluster erstellen. Mit dieser Aktion können Sie ein Zeppelin-Notebook verwenden und das Nutzerverhalten des Datenanalysten ausüben.
Spark-BigQuery-Connector-Versionen sind im GitHub-Repository GoogleCloudDataproc/spark-bigquery-connector aufgeführt.
Erstellen Sie einen Cluster mit einem einzelnen Knoten mithilfe der Initialisierungsaktion für den Spark-BigQuery-Connector:
gcloud dataproc clusters create biglake-demo-cluster \ --optional-components=ZEPPELIN \ --region=REGION \ --enable-component-gateway \ --single-node \ --initialization-actions gs://goog-dataproc-initialization-actions-REGION/connectors/connectors.sh \ --metadata spark-bigquery-connector-url= gs://spark-lib/bigquery/spark-bigquery-with-dependencies_SCALA_VERSION-CONNECTOR_VERSION.jar
Apache Hive
Im folgenden Beispiel wird Dataproc verwendet. Es funktioniert jedoch auch mit jeder Hive-Bereitstellung, die den Hive-BigQuery-Connector verwendet.
In diesem Beispiel geben Sie den Hive-BigQuery-Connector als Initialisierungsaktion an, wenn Sie einen Cluster erstellen.
Hive-BigQuery-Connector-Versionen sind im GitHub-Repository GoogleCloudDataproc/hive-bigquery-connector aufgeführt.
Erstellen Sie einen Cluster mit einem einzelnen Knoten mithilfe der Initialisierungsaktion für den Hive-BigQuery-Connector:
gcloud dataproc clusters create biglake-hive-demo-cluster \ --region=REGION \ --single-node \ --initialization-actions gs://goog-dataproc-initialization-actions-REGION/connectors/connectors.sh \ --metadata hive-bigquery-connector-url=gs://goog-dataproc-artifacts-REGION/hive-bigquery/hive-bigquery-connector-CONNECTOR_VERSION.jar
Weitere Informationen zum Hive-BigQuery-Connector finden Sie unter Hive-BigQuery-Connector verwenden.
Dataflow
Verwenden Sie zum Lesen von BigLake-Tabellen aus Dataflow den Dataflow-Connector im Modus DIRECT_READ
, um die BigQuery Storage API zu verwenden. Das Lesen aus einem Abfragestring wird ebenfalls unterstützt. Siehe BigQuery-E/A in der Apache Beam-Dokumentation.
Temporäre BigLake-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
Führen Sie den Befehl bq query
mit dem Flag --external_table_definition
aus.
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@us.myconnection \
'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@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \ '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.
PROJECT_ID
: das Projekt, das die Verbindung enthält.REGION
: Die Region, die die Verbindung enthält, z. B.us
.CONNECTION_ID
: der Name der Verbindung, z. B.myconnection
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@us.myconnection \
'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@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \ '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.
PROJECT_ID
: das Projekt, das die Verbindung enthält.REGION
: Die Region, die die Verbindung enthält, z. B.us
.CONNECTION_ID
: der Name der Verbindung, z. B.myconnection
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@us.myconnection \ '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. Geben Sie im FeldconnectionId
die Verbindung an, die für die Verbindung mit Cloud Storage verwendet werden soll. - 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.
Nächste Schritte
- SQL in BigQuery verwenden
- Informationen zu BigLake-Tabellen.
- BigQuery-Kontingente