Google BigQuery

In diesem Artikel wird beschrieben, wie Sie Google BigQuery-Tabellen in Azure Databricks lesen und schreiben.

Hinweis

Möglicherweise bevorzugen Sie Lakehouse Federation für die Verwaltung von Abfragen von BigQuery-Daten. Weitere Informationen unter Was ist Lakehouse Federation.

Sie müssen mithilfe der schlüsselbasierten Authentifizierung eine Verbindung zu BigQuery herstellen.

Berechtigungen

Ihre Projekte müssen über bestimmte Google-Berechtigungen zum Lesen und Schreiben mit BigQuery verfügen.

Hinweis

In diesem Artikel wird erläutert, wie BigQuery Ansichten materialisiert. Ausführliche Informationen finden Sie im Google-Artikel Einführung in materialisierte Ansichten. Weitere BigQuery-Terminologie und das BigQuery-Sicherheitsmodell finden Sie in der Google BigQuery-Dokumentation.

Das Lesen und Schreiben von Daten mit BigQuery hängt von zwei Google Cloud-Projekten ab:

  • Project (project): Die ID für das Google Cloud-Projekt, aus dem Azure Databricks die BigQuery-Tabelle liest oder schreibt.
  • Übergeordnetes Projekt (parentProject): Die ID für das übergeordnete Projekt, bei der es sich um die Google Cloud-Projekt-ID handelt, über die Lese- und Schreibvorgänge abgerechnet werden. Legen Sie dies auf das Google Cloud-Projekt fest, das dem Google-Dienstkonto zugeordnet ist, für das Sie Schlüssel generieren.

Sie müssen die Werte project und parentProject explizit im Code angeben, der auf BigQuery zugreift. Verwenden Sie Code ähnlich dem Folgenden:

spark.read.format("bigquery") \
  .option("table", table) \
  .option("project", <project-id>) \
  .option("parentProject", <parent-project-id>) \
  .load()

Die erforderlichen Berechtigungen für Google Cloud-Projekte hängen davon ab, ob project und parentProject identisch sind. In den folgenden Abschnitten werden die erforderlichen Berechtigungen für jedes Szenario aufgeführt.

Erforderliche Berechtigungen, wenn project und parentProject übereinstimmungen

Wenn die IDs für Ihr project und Ihr parentProject identisch sind, verwenden Sie die folgende Tabelle, um Mindestberechtigungen festzulegen:

Azure Databricks-Aufgabe Für das Projekt erforderliche Google-Berechtigungen
Lesen einer BigQuery-Tabelle ohne materialisierte Sicht Im project-Projekt:

* BigQuery-Lesesitzungsbenutzer
* BigQuery-Daten-Viewer (gewähren Sie dies optional auf Dataset-/Tabellenebene statt auf Projektebene)
Lesen einer BigQuery-Tabelle mit materialisierter Sicht Im project-Projekt:

* BigQuery-Einzelvorgangsbenutzer
* BigQuery-Lesesitzungsbenutzer
* BigQuery-Daten-Viewer (gewähren Sie dies optional auf Dataset-/Tabellenebene statt auf Projektebene)

Im Materialisierungsprojekt:

* BigQuery Data Editor
Schreiben einer BigQuery-Tabelle Im project-Projekt:

* BigQuery-Einzelvorgangsbenutzer
* BigQuery Data Editor

Erforderliche Berechtigungen, wenn project und parentProject unterschiedlich sind

Wenn die IDs für Ihr project und Ihr parentProject unterschiedlich sind, verwenden Sie die folgende Tabelle, um Mindestberechtigungen festzulegen:

Azure Databricks-Aufgabe Erforderliche Google-Berechtigungen
Lesen einer BigQuery-Tabelle ohne materialisierte Sicht Im parentProject-Projekt:

* BigQuery-Lesesitzungsbenutzer

Im project-Projekt:

* BigQuery-Daten-Viewer (gewähren Sie dies optional auf Dataset-/Tabellenebene statt auf Projektebene)
Lesen einer BigQuery-Tabelle mit materialisierter Sicht Im parentProject-Projekt:

* BigQuery-Lesesitzungsbenutzer
* BigQuery-Einzelvorgangsbenutzer

Im project-Projekt:

* BigQuery-Daten-Viewer (gewähren Sie dies optional auf Dataset-/Tabellenebene statt auf Projektebene)

Im Materialisierungsprojekt:

* BigQuery Data Editor
Schreiben einer BigQuery-Tabelle Im parentProject-Projekt:

* BigQuery-Einzelvorgangsbenutzer

Im project-Projekt:

* BigQuery Data Editor

Schritt 1: Einrichten von Google Cloud

Aktivieren der BigQuery-Storage-API

Die BigQuery Storage-API ist standardmäßig in neuen Google Cloud-Projekten aktiviert, in denen BigQuery aktiviert ist. Wenn Sie jedoch über ein vorhandenes Projekt verfügen und die BigQuery-Storage-API ist nicht aktiviert, führen Sie die Schritte in diesem Abschnitt aus, um sie zu aktivieren.

Sie können die BigQuery-Storage-API mithilfe der Google Cloud CLI oder der Google Cloud Console aktivieren.

Aktivieren der BigQuery-Storage-API mithilfe der Google Cloud CLI

gcloud services enable bigquerystorage.googleapis.com

Aktivieren der BigQuery-Storage-API mithilfe der Google Cloud Console

  1. Klicken Sie im Navigationsbereich links auf APIs und Dienste.

  2. Klicken Sie auf die Schaltfläche APIS UND DIENSTE AKTIVIEREN.

    Google Dienste aktivieren

  3. Geben Sie bigquery storage api in die Suchleiste ein, und wählen Sie das erste Ergebnis aus.

    Google BigQuery Storage

  4. Stellen Sie sicher, dass die BigQuery-Storage-API aktiviert ist.

    Google BigQuery

Erstellen eines Google-Dienstkontos für Azure Databricks

Erstellen Sie ein Dienstkonto für den Azure Databricks-Cluster. Databricks empfiehlt, diesem Dienstkonto für die Durchführung seiner Aufgaben die geringsten Berechtigungen zuzuweisen. Siehe BigQuery-Rollen und -Berechtigungen.

Sie können ein Dienstkonto mithilfe der Google Cloud CLI oder der Google Cloud Console erstellen.

Erstellen eines Google-Dienstkontos mithilfe der Google Cloud CLI

gcloud iam service-accounts create <service-account-name>

gcloud projects add-iam-policy-binding <project-name> \
--role roles/bigquery.user \
--member="serviceAccount:<service-account-name>@<project-name>.iam.gserviceaccount.com"

gcloud projects add-iam-policy-binding <project-name> \
--role roles/bigquery.dataEditor \
--member="serviceAccount:<service-account-name>@<project-name>.iam.gserviceaccount.com"

Erstellen Sie die Schlüssel für Ihr Dienstkonto:

gcloud iam service-accounts keys create --iam-account \
"<service-account-name>@<project-name>.iam.gserviceaccount.com" \
<project-name>-xxxxxxxxxxx.json

Erstellen eines Google-Dienstkontos mithilfe der Google Cloud Console

So erstellen Sie das Konto:

  1. Klicken Sie im Navigationsbereich links auf IAM und Admin.

  2. Klicken Sie auf Dienstkonten.

  3. Klicken Sie auf + DIENSTKONTO ERSTELLEN.

  4. Geben Sie den Dienstkontonamen und die Beschreibung ein.

    Google Dienstkonto erstellen

  5. Klicken Sie auf ERSTELLEN.

  6. Geben Sie Rollen für Ihr Dienstkonto an. Geben Sie in der Dropdown-Liste zum Auswählen einer RolleBigQuery ein, und fügen Sie die folgenden Rollen hinzu:

    Google-Berechtigungen

  7. Klicken Sie auf CONTINUE (WEITER).

  8. Klicken Sie auf FERTIG.

So erstellen Sie Schlüssel für Ihr Dienstkonto:

  1. Klicken Sie in der Liste der Dienstkonten auf Ihr neu erstelltes Konto.

  2. Wählen Sie im Schlüsselabschnitt KEY HINZUFÜGEN> Neuen Schlüssel erstellen aus.

    Google Schlüssel erstellen

  3. Akzeptieren Sie den Schlüsseltyp JSON.

  4. Klicken Sie auf ERSTELLEN. Die JSON-Schlüsseldatei wird auf Ihren Computer heruntergeladen.

    Wichtig

    Die JSON-Schlüsseldatei, die Sie für das Dienstkonto generieren, ist ein privater Schlüssel, der nur für autorisierte Benutzer freigegeben werden sollte, da er den Zugriff auf Datasets und Ressourcen in Ihrem Google Cloud-Konto steuert.

Erstellen eines Google Cloud Storage-(GCS-)Buckets als temporären Speicher

Zum Schreiben von Daten in BigQuery benötigt die Datenquelle Zugriff auf einen GCS-Bucket.

  1. Klicken Sie im Navigationsbereich links auf Storage.

  2. Klicken Sie auf BUCKET ERSTELLEN.

    Google Bucket erstellen

  3. Konfigurieren Sie die Bucketdetails.

    Google Bucketdetails

  4. Klicken Sie auf ERSTELLEN.

  5. Klicken Sie auf die Registerkarte Berechtigungen und auf Mitglieder hinzufügen.

  6. Geben Sie die folgenden Berechtigungen für das Dienstkonto im Bucket an.

    Google Bucket-Berechtigungen

  7. Klicken Sie auf SPEICHERN.

Schritt 2: Einrichten von Azure Databricks

Um einen Cluster für den Zugriff auf BigQuery-Tabellen zu konfigurieren, müssen Sie Ihre JSON-Schlüsseldatei als Spark-Konfiguration bereitstellen. Verwenden Sie ein lokales Tool, um Ihre JSON-Schlüsseldatei mit Base64 zu codieren. Verwenden Sie aus Sicherheitsgründen kein webbasiertes oder Remotetool, das auf Ihre Schlüssel zugreifen könnte.

Wenn Sie Ihren Cluster konfigurieren:

Fügen Sie auf der Registerkarte "Spark Config" die folgende Spark-Konfiguration hinzu. Ersetzen Sie sie <base64-keys> durch die Zeichenfolge Ihrer Base64-codierten JSON-Schlüsseldatei. Ersetzen Sie die anderen Elemente in Klammern (z. B <client-email>) durch die Werte dieser Felder aus Ihrer JSON-Schlüsseldatei.

credentials <base64-keys>

spark.hadoop.google.cloud.auth.service.account.enable true
spark.hadoop.fs.gs.auth.service.account.email <client-email>
spark.hadoop.fs.gs.project.id <project-id>
spark.hadoop.fs.gs.auth.service.account.private.key <private-key>
spark.hadoop.fs.gs.auth.service.account.private.key.id <private-key-id>

Lesen einer und Schreiben in eine BigQuery-Tabelle

Um eine BigQuery-Tabelle zu lesen, geben Sie Folgendes an

df = spark.read.format("bigquery") \
  .option("table",<table-name>) \
  .option("project", <project-id>)  \
  .option("parentProject", <parent-project-id>) \
  .load()

Um in eine BigQuery-Tabelle zu schreiben, geben Sie Folgendes an

df.write.format("bigquery") \
  .mode("<mode>") \
  .option("temporaryGcsBucket", "<bucket-name>") \
  .option("table", <table-name>) \
  .option("project", <project-id>) \
  .option("parentProject", <parent-project-id>) \
  .save()

wobei <bucket-name> der Name des Buckets ist, den Sie unter Erstellen eines Google Cloud Storage-(GCS-)Buckets als temporären Speicher erstellt haben. Informationen zu Anforderungen für <project-id> und <parent-id> Werten finden Sie unter "Berechtigungen".

Erstellen einer externen Tabelle aus BigQuery

Wichtig

Diese Funktion wird von Unity Catalog nicht unterstützt.

Sie können eine nicht verwaltete Tabelle in Databricks deklarieren, die Daten direkt aus BigQuery liest:

CREATE TABLE chosen_dataset.test_table
USING bigquery
OPTIONS (
  parentProject 'gcp-parent-project-id',
  project 'gcp-project-id',
  temporaryGcsBucket 'some-gcp-bucket',
  materializationDataset 'some-bigquery-dataset',
  table 'some-bigquery-dataset.table-to-copy'
)

Python-Notebookbeispiel: Laden einer Google BigQuery-Tabelle in einen DataFrame

Das folgende Python-Notebook lädt eine Google BigQuery-Tabelle in einen Azure Databricks DataFrame.

Google BigQuery Python-Beispielnotebook

Notebook abrufen

Scala-Notebookbeispiel: Laden einer Google BigQuery-Tabelle in einen DataFrame

Das folgende Scala-Notebook lädt eine Google BigQuery-Tabelle in einen Azure Databricks DataFrame.

Google BigQuery Scala-Beispielnotebook

Notebook abrufen