Föderierte AWS Glue-Datasets erstellen

In diesem Dokument wird beschrieben, wie Sie ein föderiertes Dataset in BigQuery erstellen, das mit einer vorhandenen Datenbank in AWS Glue verknüpft ist.

Ein Verbunddataset ist eine Verbindung zwischen BigQuery und einer externen Datenquelle auf Dataset-Ebene. Die Tabellen in einem föderierten Dataset werden automatisch aus den Tabellen in der entsprechenden externen Datenquelle gefüllt. Sie können diese Tabellen direkt in BigQuery abfragen, aber keine Änderungen vornehmen, etwas hinzufügen oder löschen. Alle Änderungen, die Sie an der externen Datenquelle vornehmen, werden jedoch automatisch in BigQuery übernommen.

Hinweise

Sie benötigen eine Verbindung, um auf AWS Glue-Daten zuzugreifen.

  • Folgen Sie der Anleitung unter Verbindung zu Amazon S3 herstellen, um eine Verbindung zu erstellen oder zu ändern. Wenn Sie diese Verbindung erstellen, fügen Sie die folgende Richtlinienanweisung für AWS Glue in Ihre AWS-Identitäts- und Zugriffsverwaltungsrichtlinie für BigQuery ein. Fügen Sie diese Anweisung zusätzlich zu den anderen Berechtigungen für den Amazon S3-Bucket ein, in dem die Daten in Ihren AWS Glue-Tabellen gespeichert sind.

    {
     "Effect": "Allow",
     "Action": [
       "glue:GetDatabase",
       "glue:GetTable",
       "glue:GetTables",
       "glue:GetPartitions"
     ],
     "Resource": [
       "arn:aws:glue:REGION:ACCOUNT_ID:catalog",
       "arn:aws:glue:REGION:ACCOUNT_ID:database/DATABASE_NAME",
       "arn:aws:glue:REGION:ACCOUNT_ID:table/DATABASE_NAME/*"
     ]
    }

    Ersetzen Sie Folgendes:

    • REGION: durch die AWS-Region, z. B. us-east-1
    • ACCOUNT_ID:: Geben Sie die 12-stellige AWS-Konto-ID ein
    • DATABASE_NAME: der Name der AWS Glue-Datenbank

Erforderliche Berechtigungen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle BigQuery-Administrator (roles/bigquery.admin) zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines föderierten Datasets benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierte Rolle enthält die Berechtigungen, die zum Erstellen eines föderierten Datasets erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind zum Erstellen eines föderierten Datensatzes erforderlich:

  • bigquery.datasets.create
  • bigquery.connections.use
  • bigquery.connections.delegate

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Einführung in IAM.

Föderiertes Dataset erstellen

So erstellen Sie ein Föderation-Dataset:

Console

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

    Zur Seite "BigQuery"

  2. Klicken Sie im linken Bereich auf  Explorer:

    Hervorgehobene Schaltfläche für den Explorer-Bereich.

    Wenn Sie den linken Bereich nicht sehen, klicken Sie auf  Linken Bereich maximieren, um ihn zu öffnen.

  3. Wählen Sie im Bereich Explorer das Projekt aus, in dem Sie das Dataset erstellen möchten.

  4. Klicken Sie auf Aktionen ansehen und dann auf Dataset erstellen.

  5. Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:

    • Geben Sie für die Dataset-ID einen eindeutigen Dataset-Namen ein.
    • Wählen Sie unter Standorttyp einen AWS-Standort für das Dataset aus, z. B. aws-us-east-1. Nachdem Sie ein Dataset erstellt haben, kann der Standort nicht mehr geändert werden.
    • Gehen Sie für Externes Dataset so vor:

      • Klicken Sie auf das Kästchen neben Link zu einem externen Dataset.
      • Wählen Sie für Typ des externen Datasets die Option AWS Glue aus.
      • Geben Sie für Externe Quelle aws-glue:// gefolgt vom Amazon-Ressourcennamen (ARN) der AWS Glue-Datenbank ein, z. B. aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database.
      • Wählen Sie unter Verbindungs-ID Ihre AWS-Verbindung aus.
    • Übernehmen Sie die anderen Einstellungen.

  6. Klicken Sie auf Dataset erstellen.

SQL

Verwenden Sie die Datendefinitionssprachen-Anweisung (DDL) CREATE EXTERNAL SCHEMA.

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

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    CREATE EXTERNAL SCHEMA DATASET_NAME
    WITH CONNECTION PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME
      OPTIONS (
        external_source = 'AWS_GLUE_SOURCE',
        location = 'LOCATION');

    Ersetzen Sie Folgendes:

    • DATASET_NAME: der Name Ihres neuen Datasets in BigQuery.
    • PROJECT_ID: Ihre Projekt-ID.
    • CONNECTION_LOCATION: der Speicherort Ihrer AWS-Verbindung, z. B. aws-us-east-1.
    • CONNECTION_NAME: der Name Ihrer AWS-Verbindung.
    • AWS_GLUE_SOURCE: der Amazon Resource Name (ARN) der AWS Glue-Datenbank mit einem Präfix, das die Quelle identifiziert, z. B. aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database.
    • LOCATION: der Speicherort Ihres neuen Datasets in BigQuery, z. B. aws-us-east-1. Nachdem Sie ein Dataset erstellt haben, können Sie seinen Standort nicht mehr ändern.

  3. Klicken Sie auf Ausführen.

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

bq

Erstellen Sie in einer Befehlszeilenumgebung ein Dataset mit dem Befehl bq mk:

bq --location=LOCATION mk --dataset \
    --external_source aws-glue://AWS_GLUE_SOURCE \
    --connection_id PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME \
    DATASET_NAME

Ersetzen Sie Folgendes:

  • LOCATION: der Standort Ihres neuen Datasets in BigQuery, z. B. aws-us-east-1. Nachdem Sie ein Dataset erstellt haben, können Sie seinen Standort nicht mehr ändern. Mit der Datei .bigqueryrc können Sie einen Standardwert für den Standort festlegen.
  • AWS_GLUE_SOURCE: der Amazon Resource Name (ARN) der AWS Glue-Datenbank, z. B. arn:aws:glue:us-east-1:123456789:database/test_database.
  • PROJECT_ID: Ihre BigQuery-Projekt-ID.
  • CONNECTION_LOCATION: der Standort Ihrer AWS-Verbindung, z. B. aws-us-east-1.
  • CONNECTION_NAME: der Name Ihrer AWS-Verbindung.
  • DATASET_NAME: der Name Ihres neuen Datasets in BigQuery. Wenn Sie ein Dataset in einem anderen Projekt als dem Standardprojekt erstellen möchten, fügen Sie die Projekt-ID im Format PROJECT_ID:DATASET_NAME dem Dataset-Namen hinzu.

Terraform

Verwenden Sie die Ressource google_bigquery_dataset:

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

Im folgenden Beispiel wird ein föderiertes AWS Glue-Dataset erstellt:

resource "google_bigquery_dataset" "dataset" {
  provider                    = google-beta
  dataset_id                  = "example_dataset"
  friendly_name               = "test"
  description                 = "This is a test description."
  location                    = "aws-us-east-1"

external_dataset_reference {
  external_source = "aws-glue://arn:aws:glue:us-east-1:999999999999:database/database"
  connection      = "projects/project/locations/aws-us-east-1/connections/connection"
  }
}

Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud -Projekt anzuwenden.

Cloud Shell vorbereiten

  1. Rufen Sie Cloud Shell auf.
  2. Legen Sie das Standardprojekt Google Cloud fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.

    Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.

Verzeichnis vorbereiten

Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet).

  1. Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung .tf haben, z. B. main.tf. In dieser Anleitung wird die Datei als main.tf bezeichnet.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.

    Kopieren Sie den Beispielcode in das neu erstellte main.tf.

    Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.

  3. Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
  4. Speichern Sie die Änderungen.
  5. Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
    terraform init

    Fügen Sie optional die Option -upgrade ein, um die neueste Google-Anbieterversion zu verwenden:

    terraform init -upgrade

Änderungen anwenden

  1. Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
    terraform plan

    Korrigieren Sie die Konfiguration nach Bedarf.

  2. Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie yes an der Eingabeaufforderung ein:
    terraform apply

    Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.

  3. Öffnen Sie Ihr Google Cloud Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.

API

Rufen Sie datasets.insert Methode mit einem definierten Dataset-Ressource und externalDatasetReference Feld für Ihre AWS Glue-Datenbank auf.

Tabellen in einem föderierten Dataset auflisten

Informationen zum Auflisten der Tabellen, die in Ihrem föderierten Dataset für Abfragen verfügbar sind, finden Sie unter Datasets auflisten.

Tabelleninformationen abrufen

Informationen zu den Tabellen in Ihrem föderierten Datenpool, z. B. Schemadetails, finden Sie unter Tabelleninformationen abrufen.

Zugriff auf Tabellen steuern

Informationen zum Verwalten des Zugriffs auf die Tabellen in Ihrem föderierten Datenpool finden Sie unter Zugriff auf Ressourcen mit IAM steuern.

Sicherheit auf Zeilenebene, Sicherheit auf Spaltenebene und Datenmaskierung werden auch für Tabellen in föderierten Datasets unterstützt.

Schemavorgänge, die Sicherheitsrichtlinien ungültig machen können, z. B. das Löschen einer Spalte in AWS Glue, können dazu führen, dass Jobs fehlschlagen, bis die Richtlinien aktualisiert wurden. Wenn Sie eine Tabelle in AWS Glue löschen und neu erstellen, gelten Ihre Sicherheitsrichtlinien nicht mehr für die neu erstellte Tabelle.

AWS Glue-Daten abfragen

Tabellen in föderierten Datasets abzufragen ist dasselbe wie das Abfragen von Tabellen in anderen BigQuery-Datasets.

Sie können AWS Glue-Tabellen in den folgenden Formaten abfragen:

  • CSV (komprimiert und unkomprimiert)
  • JSON (komprimiert und unkomprimiert)
  • Parquet
  • ORC
  • Avro
  • Iceberg
  • Delta Lake

Details zur Tabellenzuordnung

Jede Tabelle, auf die Sie in Ihrer AWS Glue-Datenbank Zugriff gewähren, wird als equivalente Tabelle in Ihrem BigQuery-Dataset angezeigt.

Format

Das Format jeder BigQuery-Tabelle wird durch die folgenden Felder der jeweiligen AWS Glue-Tabelle bestimmt:

  • InputFormat (Table.StorageDescriptor.InputFormat)
  • OutputFormat (Table.StorageDescriptor.OutputFormat)
  • SerializationLib (Table.StorageDescriptor.SerdeInfo.SerializationLibrary)

Die einzige Ausnahme sind Iceberg-Tabellen, bei denen das Feld TableType(Table.Parameters["table_type"]) verwendet wird.

Eine AWS Glue-Tabelle mit den folgenden Feldern wird beispielsweise einer ORC-Tabelle in BigQuery zugeordnet:

  • InputFormat = "org.apache.hadoop.hive.ql.io.orc.OrcInputFormat"
  • OutputFormat = "org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat"
  • SerializationLib = "org.apache.hadoop.hive.ql.io.orc.OrcSerde"

Standort

Der Speicherort jeder BigQuery-Tabelle wird durch Folgendes bestimmt:

  • Iceberg-Tabellen: das Feld Table.Parameters["metadata_location"] in der AWS Glue-Tabelle
  • Nicht partitionierte Tabellen, die nicht von Iceberg stammen: das Feld Table.StorageDescriptor.Location in der AWS Glue-Tabelle
  • Partitionierte Tabellen, die nicht von Iceberg stammen: die AWS Glue GetPartitions API

Weitere Eigenschaften

Außerdem werden einige AWS Glue-Tabelleneigenschaften automatisch formatabhängigen Optionen in BigQuery zugeordnet:

Format SerializationLib AWS Glue-Tabellenwert BigQuery-Option
CSV LazySimpleSerDe Table.StorageDescriptor.SerdeInfo.Parameters["field.delim"] CsvOptions.fieldDelimiter
CSV LazySimpleSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] CsvOptions.encoding
CSV LazySimpleSerDe Table.StorageDescriptor.Parameters["skip.header.line.count"] CsvOptions.skipLeadingRows
CSV OpenCsvSerDe Table.StorageDescriptor.SerdeInfo.Parameters["separatorChar"] CsvOptions.fieldDelimiter
CSV OpenCsvSerDe Table.StorageDescriptor.SerdeInfo.Parameters["quoteChar"] CsvOptions.quote
CSV OpenCsvSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] CsvOptions.encoding
CSV OpenCsvSerDe Table.StorageDescriptor.Parameters["skip.header.line.count"] CsvOptions.skipLeadingRows
JSON Hive JsonSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] JsonOptions.encoding

Ansicht in einem föderierten Dataset erstellen

Sie können keine Ansicht in einem föderierten Dataset erstellen. Sie können jedoch eine Ansicht in einem Standard-Dataset erstellen, die auf einer Tabelle in einem föderierten Dataset basiert. Weitere Informationen finden Sie unter Ansichten erstellen.

Föderiertes Dataset löschen

Das Löschen eines föderierten Datasets entspricht dem Löschen eines beliebigen anderen BigQuery-Datasets. Weitere Informationen finden Sie unter Datasets löschen.

Preise

Informationen zu den Preisen finden Sie unter BigQuery-Omni-Preise.

Beschränkungen

  • Es gelten alle BigQuery Omni-Einschränkungen.
  • Sie können in Tabellen in einem föderierten AWS Glue-Dataset keine Daten oder Metadaten hinzufügen, löschen oder aktualisieren.
  • Sie können in einem föderierten AWS Glue-Dataset keine neuen Tabellen, Ansichten oder materialisierten Ansichten erstellen.
  • INFORMATION_SCHEMA-Aufrufe werden nicht unterstützt.
  • Metadaten-Caching wird nicht unterstützt.
  • Einstellungen auf Dataset-Ebene, die sich auf Standardeinstellungen für die Tabellenerstellung beziehen, wirken sich nicht auf föderierte Datasets aus, da Tabellen nicht manuell erstellt werden können.
  • Der Apache Hive-Datentyp UNION wird für Avro-Tabellen nicht unterstützt.
  • Es gelten die Einschränkungen für externe Tabellen.

Nächste Schritte