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

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:

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 auf asia-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 auf asia-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 Format field: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 Format gs://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 auf asia-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 Format gs://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:

  1. Erstellen Sie ein Job-Objekt.
  2. Füllen Sie den Abschnitt configuration des Objekts Job mit einem JobConfiguration-Objekt.
  3. Füllen Sie den Abschnitt query des Objekts JobConfiguration mit einem JobConfigurationQuery-Objekt.
  4. Füllen Sie den Abschnitt tableDefinitions des Objekts JobConfigurationQuery mit einem ExternalDataConfiguration-Objekt. Geben Sie im Feld connectionId die Verbindung an, die für die Verbindung mit Cloud Storage verwendet werden soll.
  5. Rufen Sie die Methode jobs.insert auf, um die Abfrage asynchron auszuführen, oder die Methode jobs.query, um die Abfrage synchron auszuführen. Übergeben Sie dabei das Job-Objekt.

Nächste Schritte