BigLake-Tabellen erstellen und verwalten

In diesem Dokument wird beschrieben, wie BigLake-Tabellen implementiert werden. Es wird davon ausgegangen, dass Sie mit Datenbanktabellen und Berechtigungsverwaltung vertraut sind. Eine Übersicht über BigLake-Tabellen finden Sie unter Einführung in BigLake-Tabellen.

Vorbereitung

  1. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

    Für diese Anleitung empfehlen wir die Erstellung eines Testprojekts, damit Ihre Produktionsarbeitslasten nicht beeinträchtigt werden.

  2. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  3. BigQuery Connection API aktivieren.

    Aktivieren Sie die API

    Wenn Sie BigLake-Tabellen aus Open-Source-Engines wie Apache Spark lesen möchten, müssen Sie die BigQuery Storage Read API aktivieren.

  4. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

  5. Prüfen Sie, ob Ihre Version des Google Cloud SDK 366.0.0 oder höher ist:

    gcloud version
    

    Aktualisieren Sie das Google Cloud SDK bei Bedarf.

  6. Optional: Verwenden Sie bei Terraform die Terraform-GCP-Version 4.25.0 oder höher. Sie können die neueste Version von HashiCorp Terraform-Downloads herunterladen.

IAM-Berechtigungen

Zur Verwendung von BigLake-Tabellen benötigen Ihre Nutzer die folgenden Berechtigungen zur Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM) entsprechend ihrer Rolle in Ihrer Organisation. Weitere Informationen zu Nutzerrollen finden Sie unter Sicherheitsmodell. Weitere Informationen zum Gewähren von Berechtigungen finden Sie unter Zuweisbare Rollen für Ressourcen aufrufen.

  • Data-Lake-Administrator:
    • bigquery.connections.create
    • bigquery.connections.delete
    • bigquery.connections.list
    • bigquery.connections.update
  • Data Warehouse-Administrator:
    • bigquery.tables.create
    • bigquery.tables.update
    • bigquery.connections.delegate
  • Datenanalyst:
    • bigquery.jobs.create
    • bigquery.tables.get
    • bigquery.tables.getData
    • bigquery.readsessions.create

Standortberücksichtigung

Wenn Sie Datendateien in Cloud Storage speichern, empfehlen wir die Verwendung einer einzelnen oder einer dualen Cloud Storage-Bucket-Region für eine optimale Leistung. Buckets mit mehreren Regionen werden nicht empfohlen.

Verbindungsressource erstellen und aufrufen

BigLake verwendet eine Verbindungsressource für den Zugriff auf Data Lakes. Sie können eine Verbindungsressource einer einzelnen Tabelle oder einer beliebigen Gruppe von Tabellen in einem Projekt zuordnen.

Cloud-Ressourcen-Verbindung erstellen

Wählen Sie eine der folgenden Optionen aus:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Klicken Sie zum Erstellen einer Verbindung auf Daten hinzufügen und dann auf Externe Datenquelle.

  3. Wählen Sie in der Liste Verbindungstyp die Option BigLake und Remotefunktionen (Cloud Resource) aus.

  4. Geben Sie im Feld Verbindungs-ID einen Namen für die Verbindung ein.

  5. Klicken Sie auf Verbindung erstellen.

  6. Klicken Sie im Bereich Explorer auf die Verbindung in dem Projekt, in dem Sie die Verbindungsressource erstellt haben. Die Verbindungsinformationen werden angezeigt:

    Verbindungsinformationen ansehen.

  7. Kopieren Sie im Abschnitt Verbindungsinformationen die Dienstkonto-ID, da Sie sie in einem späteren Schritt benötigen.

bq

  1. Erstellen Sie in einer Befehlszeilenumgebung eine Verbindung:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID
    

    Der Parameter --project_id überschreibt das Standardprojekt.

    Dabei gilt:

    • REGION: Ihre Verbindungsregion
    • PROJECT_ID: Ihre Cloud-Projekt-ID
    • CONNECTION_ID: eine ID für Ihre Verbindung

    Wenn Sie eine Verbindungsressource herstellen, erstellt BigQuery ein eindeutiges Systemdienstkonto und ordnet es der Verbindung zu.

  2. Rufen Sie die Dienstkonto-ID ab und kopieren Sie sie, da Sie sie in einem anderen Schritt benötigen:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID
    

    Die Ausgabe sieht etwa so aus:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

Hängen Sie folgenden Abschnitt an Ihre main.tf-Datei an.

 ## This creates a cloud resource connection.
 ## Note: The cloud resource nested object has only one output only field - serviceAccountId.
 resource "google_bigquery_connection" "connection" {
    connection_id = "CONNECTION_ID"
    project = "PROJECT_ID"
    location = "REGION"
    cloud_resource {}
}        
Dabei gilt:

  • CONNECTION_ID: eine ID für Ihre Verbindung
  • PROJECT_ID: Ihre Cloud-Projekt-ID
  • REGION: Ihre Verbindungsregion

Wird der folgende Verbindungsfehler angezeigt, aktualisieren Sie das Google Cloud SDK:

Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...

BigQuery-AWS-Verbindung erstellen

Wenn Sie eine Verbindung zu AWS herstellen möchten, müssen Sie eine BigQuery-AWS-Verbindung erstellen. Beim Erstellen einer Verbindungsressource erstellt BigQuery eine eindeutige ID und verknüpft sie mit der Verbindung.

BigQuery-Azure-Verbindung erstellen

BigQuery bietet zwei Methoden für den sicheren Zugriff auf Daten aus Azure Blob Storage. Sie können die Identitätsföderation verwenden und einem Google Cloud-Dienstkonto Zugriff auf Ihre Azure-Anwendung gewähren, oder direkt Zugriff auf die Azure Active Directory-Anwendung (AD) in Ihrem Mandanten gewähren.

Zugriff auf einen Data Lake einrichten

In den folgenden Schritten gewähren Sie der neuen Verbindungsressource den Lesezugriff auf einen Data Lake, damit BigQuery im Namen von Nutzern auf Dateien zugreifen kann.

Zugriff auf Cloud Storage einrichten

Wählen Sie eine der folgenden Optionen aus:

Console

Wir empfehlen, dem Dienstkonto der Verbindungsressource die IAM-Rolle Storage-Objekt-Betrachter (roles/storage.objectViewer) zuzuweisen, damit das Dienstkonto auf Cloud Storage-Buckets zugreifen kann.

Console

  1. Zur Seite IAM & Verwaltung.

    IAM & Verwaltung aufrufen

  2. Klicken Sie auf Hinzufügen.

    Das Dialogfeld Principals hinzufügen wird geöffnet.

  3. Geben Sie im Feld Neue Hauptkonten die Dienstkonto-ID ein, die Sie zuvor kopiert haben.

  4. Wählen Sie im Feld Rolle auswählen die Option Cloud Storage und dann Storage-Objekt-Betrachter aus.

  5. Klicken Sie auf Speichern.

gsutil

Führen Sie folgenden gsutil iam ch-Befehl aus:

gsutil iam ch serviceAccount:MEMBER:objectViewer gs://example-bucket

Ersetzen Sie MEMBER durch die zuvor kopierte Dienstkonto-ID, z. B. example@gcp-sa-bigquery-condel.iam.gserviceaccount.com.

Weitere Informationen finden Sie unter Hauptkonto zu einer Richtlinie auf Bucket-Ebene hinzufügen.

Terraform

Hängen Sie folgenden Abschnitt an Ihre main.tf-Datei an.

## This grants permissions to the service account of the connection created in the last step.
resource "google_project_iam_member" "connectionPermissionGrant" {
    project = "PROJECT_ID"
    role = "roles/storage.objectViewer"
    member = format("serviceAccount:%s", google_bigquery_connection.connection.cloud_resource[0].service_account_id)
}    

Nachdem Sie Nutzer zu BigLake-Tabellen migriert haben, entfernen Sie ihre Berechtigungen, um direkt auf Cloud Storage zuzugreifen. Durch den direkten Dateizugriff können Nutzer Governance-Richtlinien (z. B. Sicherheit auf Zeilen- und Spaltenebene) umgehen, die für BigLake-Tabellen festgelegt sind.

Zugriff auf Amazon S3 einrichten

Für den Zugriff auf die S3-Daten müssen Sie eine Vertrauensstellung zur AWS-Rolle hinzufügen. Wenn Ihr AWS-Konto jedoch über einen benutzerdefinierten Identitätsanbieter verfügt, folgen Sie der Anleitung unter Benutzerdefinierten AWS-Identitätsanbieter konfigurieren.

Zugriff auf Azure einrichten

Die Schritte zum Einrichten des Zugriffs auf Ihre Azure-Anwendung hängen davon ab, wie Sie eine Verbindung zu Azure herstellen. Wenn Sie für den Zugriff auf Daten, die in Azure gespeichert sind, die Identitätsföderation verwenden, gehen Sie so vor:

  1. Fügen Sie die Azure-Anmeldedaten zur Azure-Anwendung hinzu.
  2. Weisen Sie den BigQuery-Azure-Anwendungen eine Rolle zu.

Wenn Sie eine nicht föderierte Identität verwendet haben, gehen Sie so vor:

  1. Azure AD-Diensthauptkonto erstellen
  2. Azure AD-Anwendungen von BigQuery eine Rolle zuweisen

BigLake-Tabelle erstellen

Wenn Sie mit dem Erstellen von Tabellen in BigQuery vertraut sind, gehen Sie beim Erstellen einer BigLake-Tabelle ähnlich vor. Ihre Tabelle kann jedes Dateiformat haben, das von BigLake unterstützt wird. Weitere Informationen finden Sie unter Einschränkungen.

BigLake-Tabelle für Cloud Storage erstellen

Zum Erstellen einer BigLake-Tabelle benötigen Sie ein Dataset. Wählen Sie eine der folgenden Optionen, um eine BigLake-Tabelle zu erstellen:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Wählen Sie im Bereich Explorer das Dataset aus, in dem Sie eine Tabelle erstellen möchten, und klicken Sie dann auf Tabelle erstellen.

  3. Wählen Sie unter Tabelle erstellen aus die Option Google Cloud Storage und wählen Sie dann die Datenquelle für die externe Tabelle aus Ihrem Cloud Storage-Bucket aus.

  4. Wählen Sie bei Dateiformat das Format aus, das zu Ihrer Datei passt.

  5. Geben Sie im Feld Tabelle einen Namen für die Tabelle ein, z. B. mytable.

  6. Legen Sie unter Tabellentyp den Tabellentyp auf Externe Tabelle fest. Standardmäßig ist das Kästchen BigLake-Tabelle mit einer Cloud-Ressourcenverbindung erstellen aktiviert.

  7. Wählen Sie unter Verbindungs-ID die Verbindung aus, die Sie zuvor erstellt haben.

  8. Klicken Sie auf Tabelle erstellen.

SQL

Verwenden Sie die DDL-Anweisung CREATE EXTERNAL TABLE, um eine BigLake-Tabelle durch Verbindung zu einer externen Cloud Storage-Tabelle zu erstellen:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME`
      WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
      OPTIONS (
        format ="TABLE_FORMAT",
        uris = ['FILE_PATH']);
    

    Dabei gilt:

    • DATASET: der Name des BigQuery-Datasets, in dem Sie eine Tabelle erstellen möchten, z. B. mydataset
    • EXTERNAL_FILE_NAME: der Name der Tabelle, die Sie erstellen möchten, z. B. mytable
    • TABLE_FORMAT: das Format der Tabelle, die Sie erstellen möchten, z. B. PARQUET
    • FILE_PATH: der Pfad zur Datenquelle für die externe Tabelle, die Sie erstellen möchten, z. B. gs://mybucket/myfile.parquet

  3. Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfragen ausführen.

bq

In einer Befehlszeilenumgebung geben Sie mit dem Decorator @connection die Verbindung an, die am Ende des Parameters --external_table_definition verwendet werden soll:

bq mk \
    --table \
    --external_table_definition=TABLE_FORMAT=FILE_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \
    PROJECT_ID:DATASET.EXTERNAL_TABLE_NAME

Dabei gilt:

  • TABLE_FORMAT: das Format der Tabelle, die Sie erstellen möchten, z. B. PARQUET
  • FILE_PATH: Pfad zur Datenquelle für die externe Tabelle, die Sie erstellen möchten, z. B. gs://mybucket/myfile.parquet
  • DATASET: der Name des BigQuery-Datasets, in dem Sie eine Tabelle erstellen möchten, z. B. mydataset
  • EXTERNAL_TABLE_NAME: der Name der Tabelle, die Sie erstellen möchten, z. B. mytable

Terraform

Hängen Sie folgenden Abschnitt an Ihre main.tf-Datei an. Wenn Sie die automatische Schemaerkennung verwenden, entfernen Sie die Kommentare aus den relevanten Zeilen im folgenden Abschnitt.

## This creates a dataset for your table.
resource "google_bigquery_dataset" "dataset" {
    provider                    = google
    project                     = "PROJECT_ID"
    dataset_id                  = "DATASET"
    location                    = "REGION"
}
## If you are using schema autodetect, uncomment the following to set up ## a delay to give IAM changes time to propagate. #resource "time_sleep" "wait_7_min" { #depends_on = [google_project_iam_member.connectionPermissionGrant] #create_duration = "7m" #}
## This creates a table using the connection id. resource "google_bigquery_table" "biglakeTable" { ## If you are using schema autodetect, uncomment the following to ## set up a dependency on the prior delay. # depends_on = [time_sleep.wait_7_min] dataset_id = google_bigquery_dataset.dataset.dataset_id table_id = "EXTERNAL_TABLE_NAME" project = "PROJECT_ID" schema = <<EOF [ { "name": "country", "type": "STRING" }, { "name": "product", "type": "STRING" }, { "name": "price", "type": "INT64" } ] EOF external_data_configuration { ## Autodetect determines whether schema autodetect is active or inactive. autodetect = AUTODETECT_BOOLEAN source_format = "PARQUET" connection_id = google_bigquery_connection.connection.name source_uris = [ "gs://huron-userguide-demo/orders/*.parquet", ] } deletion_protection = false }

Dabei gilt:

  • DATASET: der Name des BigQuery-Datasets, in dem Sie eine Tabelle erstellen möchten, z. B. mydataset
  • EXTERNAL_TABLE_NAME: der Name der Tabelle, die Sie erstellen möchten, z. B. mytable
  • AUTODETECT_BOOLEAN: Definiert, ob Sie die automatische Schemaerkennung in Ihrem Projekt verwenden, z. B. "true" oder "false"

BigLake unterstützt die automatische Schemaerkennung. Wenn Sie kein Schema angegeben haben und dem Dienstkonto in den vorherigen Schritten kein Zugriff gewährt wurde, schlagen diese Schritte bei der automatischen Schemaerkennung jedoch mit der Meldung „Zugriff verweigert“ fehl.

BigLake-Tabelle für Amazon S3 erstellen

Für den Zugriff auf Daten in S3 benötigen Sie eine externe Tabelle. Folgen Sie der Anleitung unter Externe Tabelle für Amazon S3-Daten erstellen, um eine BigLake-Tabelle für Amazon S3 zu erstellen.

BigLake-Tabelle für Azure erstellen

Für den Zugriff auf Daten in Azure Storage benötigen Sie eine externe Tabelle. Folgen Sie der Anleitung unter Externe Tabelle für Azure Storage-Daten erstellen, um eine BigLake-Tabelle für Azure Storage zu erstellen.

Upgrade externer Tabellen auf BigLake-Tabellen ausführen

Sie können externe Tabellen auf BigLake-Tabellen aktualisieren. Ordnen Sie dazu die externe Tabelle einer Cloud-Ressourcenverbindung zu. Eine vollständige Liste der Flags und Argumente finden Sie in den Referenzthemen bq update und bq mkdef.

Sie können jedes von BigLake unterstützte Quellformat verwenden. Weitere Informationen finden Sie unter Einschränkungen.

Wählen Sie eine der folgenden Optionen, um eine externe Tabelle auf eine BigLake-Tabelle zu aktualisieren:

SQL

Im folgenden Beispiel wird die DDL-Anweisung CREATE OR REPLACE EXTERNAL TABLE verwendet, um externe Tabellen auf BigLake-Tabellen zu aktualisieren. Dazu wird die externe Tabelle einer Cloud-Ressourcenverbindung zugeordnet:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    CREATE OR REPLACE EXTERNAL TABLE
      `EXTERNAL_TABLE_NAME`
      WITH CONNECTION `CONNECTION_ID`
      OPTIONS(
        format="TABLE_FORMAT",
        uris="[FILE_PATH]"
        )
    

    Dabei gilt:

    • DATASET: der Name des BigQuery-Datasets, in dem Sie eine Tabelle erstellen möchten, z. B. mydataset
    • EXTERNAL_FILE_NAME: der Name der Tabelle, die Sie erstellen möchten, z. B. mytable
    • TABLE_FORMAT: das Format der Tabelle, die Sie erstellen möchten, z. B. PARQUET
    • FILE_PATH: der Pfad zur Datenquelle für die externe Tabelle, die Sie erstellen möchten, z. B. gs://mybucket/myfile.parquet

  3. Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfragen ausführen.

bq

  1. Generieren Sie eine neue externe Tabellendefinition, die die zu verwendende Verbindung angibt:

    bq mkdef --connection_id=PROJECT_ID.REGION.CONNECTION_ID \
      --source_format=TABLE_FORMAT \
      "FILE_PATH" > /tmp/DEFINITION_FILE
    

    Ersetzen Sie DEFINITION_FILE durch den Namen der Tabellendefinitionsdatei, die Sie erstellen möchten, z. B. tabledefinition.json.

  2. Aktualisieren Sie die Tabelle mit der neuen externen Tabellendefinition:

bq update --external_table_definition=/tmp/DEFINITION_FILE PROJECT_ID:DATASET.EXTERNAL_TABLE_NAME

Zugriffssteuerungsrichtlinien einrichten

Zum Erstellen von Zugriffssteuerungsrichtlinien für BigLake-Tabellen erstellen Sie zuerst in Data Catalog eine Taxonomie von Richtlinien-Tags. Anschließend wenden Sie die Richtlinien-Tags auf die sensiblen Zeilen oder Spalten an.

  • Eine Anleitung zum Einrichten der Sicherheit auf Spaltenebene finden Sie im Sicherheitsleitfaden auf Spaltenebene.

    Der Workflow zum Definieren von Zugriffssteuerungsrichtlinien auf Spaltenebene für BigLake ist mit dem Workflow für von BigQuery verwaltete Tabellen identisch.

  • Eine Anleitung zum Einrichten der Sicherheit auf Zeilenebene finden Sie im Sicherheitsleitfaden auf Zeilenebene.

Angenommen, Sie möchten den Zeilenzugriff für die Tabelle mytable im Dataset mydataset beschränken:

+---------+---------+-------+
| country | product | price |
+---------+---------+-------+
| US      | phone   |   100 |
| JP      | tablet  |   300 |
| UK      | laptop  |   200 |
+---------+---------+-------+

Sie können einen Filter auf Zeilenebene für Kim (kim@example.com) erstellen, der den Zugriff auf Zeilen beschränkt, in denen country gleich US ist.

CREATE ROW ACCESS POLICY only_us_filter
ON mydataset.mytable
GRANT TO ('user:kim@example.com')
FILTER USING (country = 'US');

Dann führt vCenter die folgende Abfrage aus:

SELECT * FROM projectid.mydataset.mytable;

Die Ausgabe zeigt nur die Zeilen, in denen country gleich US ist:

+---------+---------+-------+
| country | product | price |
+---------+---------+-------+
| US      | phone   |   100 |
+---------+---------+-------+

BigLake-Tabelle über BigQuery abfragen

Sie können eine beliebige Abfrage mit einem beliebigen BigQuery-Client senden. Wenn Sie den Befehlszeilenclient bq verwenden, verwenden Sie den query-Befehl und geben die Google Standard-SQL-Syntax mit einem der Flags --nouse_legacy_sql oder --use_legacy_sql=false an. Beispiel:

bq query --nouse_legacy_sql "SELECT * FROM PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME;"

BigLake-Tabelle mit Connectors abfragen

Sie können auf BigLake-Tabellen in Cloud Storage mit anderen Datenverarbeitungstools als BigQuery zugreifen. Sie können beispielsweise Apache Spark, Trino oder Apache Hive mithilfe von BigQuery-Connectors verwenden. Die BigQuery Storage API erzwingt Richtlinien für die Zeilen- und Spaltenebene für alle BigLake-Tabellen in Cloud Storage oder BigQuery.

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.

  • 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-us-central1/connectors/connectors.sh \
        --metadata bigquery-connector-url=gs://spark-lib/bigquery/spark-bigquery-latest_2.12.jar \
        --metadata spark-bigquery-connector-url=gs://spark-lib/bigquery/spark-bigquery-latest_2.12.jar
    

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.

Audit-Logging

Weitere Informationen zum Logging in BigQuery finden Sie unter Einführung in BigQuery-Monitoring. Weitere Informationen zum Logging in Google Cloud finden Sie unter Cloud Logging.