BigQuery-Tabellen abfragen

In diesem Dokument wird beschrieben, wie Sie Spark SQL und die Spark DataFrame API in Managed Service for Apache Spark-Arbeitslasten verwenden können, um BigQuery-Tabellen abzufragen.

Hinweis

Aktivieren Sie die APIs und gewähren Sie bei Bedarf IAM-Rollen (Identity and Access Management).

APIs aktivieren

  1. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Dataproc and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

Identity and Access Management-Rollen zuweisen

Zum Ausführen der Beispiele auf dieser Seite sind Rollenzuweisungen für Managed Service for Apache Spark und BigQuery erforderlich. Je nach Organisationsrichtlinie wurden diese Rollen möglicherweise bereits gewährt. Informationen zum Prüfen von Rollenzuweisungen finden Sie unter Müssen Sie Rollen zuweisen?.

Rollen für Managed Service for Apache Spark

Standardmäßig werden Batches und Sitzungen als Compute Engine-Standarddienstkonto ausgeführt, sofern kein benutzerdefiniertes Dienstkonto für die Arbeitslast oder Sitzung angegeben ist.

Rolle "Dienstkontonutzer"

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Dienstkontonutzer (roles/iam.serviceAccountUser) für das Compute Engine-Standarddienstkonto zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Einreichen einer Batcharbeitslast benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Rolle „Dataproc Worker“

Bitten Sie Ihren Administrator, dem Compute Engine-Standarddienstkonto die IAM-Rolle Dataproc-Worker (roles/dataproc.worker) für das Projekt zuzuweisen, damit das Compute Engine-Standarddienstkonto die erforderlichen Berechtigungen zum Einreichen einer Batcharbeitslast hat.

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Ihr Administrator kann dem Compute Engine-Standarddienstkonto möglicherweise auch die erforderlichen Berechtigungen über benutzerdefinierte Rollen oder andere vordefinierte Rollen erteilen.

BigQuery-Rollen

Dem Dienstkonto, das zum Ausführen einer Batcharbeitslast oder interaktiven Sitzung für Managed Service for Apache Spark verwendet wird, müssen die folgenden IAM-Rollen für die folgenden Ressourcen zugewiesen werden:

  • BigQuery Data Viewer (roles/bigquery.dataViewer) zum Lesen von Daten aus Tabellen:

    • Lesen aus bigquery.DATASET_ID.SOURCE_TABLE in den Beispielen für Spark SQL SELECT und INSERT INTO.
    • Daten aus INFORMATION_SCHEMA lesen – Beispiel für die DataFrame API
  • BigQuery-Nutzer (roles/bigquery.user), damit Spark Jobs ausführen kann, die mit BigQuery interagieren.

  • BigQuery-Dateneditor (roles/bigquery.dataEditor) zum Schreiben von Daten oder Metadaten:

    • Um im Spark SQL-Beispiel für INSERT INTO in bigquery.DATASET_ID.DESTINATION_TABLE zu schreiben,
    • Für das DataFrame API-Beispiel, in dem INFORMATION_SCHEMA abgefragt wird, ist diese Rolle für das in .option('materializationDataset', ...) bereitgestellte DATASET_ID erforderlich, damit der Connector temporäre Tabellen für die Ergebnisse erstellen kann.

Spark-Batcharbeitslast senden

Sie können die Google Cloud -Konsole, die Google Cloud CLI oder die Managed Service for Apache Spark API verwenden, um eine Batcharbeitslast für Managed Service for Apache Spark zu senden.

Spark SQL nutzen

Mit dem Spark BigQuery-Katalog können Sie Standard-BigQuery-Tabellen direkt aus Batch-Arbeitslasten oder interaktiven Sitzungen abfragen. Mit dieser Methode können Sie Standard-GoogleSQL-Syntax verwenden, um in spark-sql-Jobs mit BigQuery-Daten zu interagieren, ohne PySpark-Code schreiben oder temporäre Ansichten mit der DataFrame API erstellen zu müssen.

BigQuery-Katalog konfigurieren

Um den BigQuery-Katalog zu aktivieren, geben Sie die folgenden Spark-Attribute für Ihren Spark SQL-Batch-Arbeitslast oder Ihre interaktive Sitzung an:

  • dataproc.sparkBqConnector.version=CONNECTOR_VERSION: Gibt die Version des Spark BigQuery-Connectors an.
  • spark.sql.catalog.bigquery=com.google.cloud.spark.bigquery.BigQueryCatalog: (Optional) Registriert den bigquery-Katalog als Spark SQL-Katalog.

Beispiel für Google Cloud CLI:

gcloud dataproc batches submit spark-sql \
    --project=PROJECT_ID \
    --region=REGION \
    --version=RUNTIME_VERSION \
    --subnet=SUBNET \
    --service-account=SERVICE_ACCOUNT \
    --properties="dataproc.sparkBqConnector.version=CONNECTOR_VERSION,spark.sql.catalog.bigquery=com.google.cloud.spark.bigquery.BigQueryCatalog" \
    gs://BUCKET/my_query.sql

Ersetzen Sie Folgendes:

BigQuery-Tabellen abfragen

Nachdem Sie den Katalog konfiguriert haben, können Sie in einem SQL-Skript mit dem folgenden Format auf BigQuery-Tabellen verweisen: bigquery.DATASET_ID.TABLE_ID.

SQL-Beispielabfrage:

-- Query data from a BigQuery table.
SELECT
  column_a,
  SUM(column_b)
FROM
  bigquery.DATASET_ID.SOURCE_TABLE
WHERE
  partition_date = CURRENT_DATE()
GROUP BY column_a;

-- Insert results into another BigQuery table.
INSERT INTO bigquery.DATASET_ID.DESTINATION_TABLE
SELECT column_a, column_b
FROM bigquery.DATASET_ID.SOURCE_TABLE
WHERE column_c = 'some_value';

Ersetzen Sie Folgendes:

  • DATASET_ID: BigQuery-Dataset-ID.
  • SOURCE_TABLE: Die ID der Tabelle, die abgefragt werden soll.
  • DESTINATION_TABLE: ID der Tabelle, in die Daten eingefügt werden sollen.

DataFrame API verwenden

Die DataFrame API ist erforderlich, um auf INFORMATION_SCHEMA-Ansichten zuzugreifen.

  • So fragen Sie INFORMATION_SCHEMA ab:

    • Legen Sie dazu spark.conf.set('viewsEnabled', 'true') fest.
    • Geben Sie .option('materializationDataset', 'DATASET_ID') an, damit der Connector temporäre Ergebnisse schreiben kann.

Beispiel für eine PySpark-Abfrage:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName('BigQuery Info Schema Test').getOrCreate()

# Required for INFORMATION_SCHEMA.
spark.conf.set('viewsEnabled', 'true')

# Query INFORMATION_SCHEMA.TABLES.
info_schema_df = spark.read.format('bigquery') \
  .option('project', 'PROJECT_ID') \
  .option('materializationDataset', 'DATASET_ID') \
  .load(f'SELECT table_name, creation_time FROM `PROJECT_ID.DATASET_ID.INFORMATION_SCHEMA.TABLES`')
info_schema_df.show(5, truncate=False)

Ersetzen Sie Folgendes:

  • PROJECT_ID: Projekt-ID. Projekt-IDs werden im Bereich Projektinformationen im Dashboard der Google Cloud Console aufgeführt.
  • DATASET_ID: BigQuery-Dataset-ID, in die der Spark-zu-BigQuery-Connector temporäre Daten schreiben kann.

Ein PySpark-Beispiel, das Daten aus einer BigQuery-Standardtabelle liest und die Ergebnisse dann in eine Ausgabetabelle schreibt, finden Sie unter PySpark-Batcharbeitslast für Wordcount senden.

Nächste Schritte