Föderierte AWS Glue-Datasets erstellen

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

Ein föderiertes Dataset 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 ausgefüllt. Sie können diese Tabellen direkt in BigQuery abfragen, aber keine Änderungen vornehmen, etwas hinzufügen oder löschen. Alle Aktualisierungen, die Sie in 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. Fügen Sie beim Erstellen dieser Verbindung die folgende Richtlinienanweisung für AWS Glue in Ihre AWS-Identitäts- und Zugriffsverwaltungsrichtlinie für BigQuery hinzu. 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 den IAM-Rolle BigQuery-Administrator (roles/bigquery.admin) zu gewähren, 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 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 Datasets 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öderiertes Dataset:

Console

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

    Zur Seite "BigQuery"

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

  3. Maximieren Sie die Option Aktionen und klicken Sie auf Dataset erstellen.

  4. 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 als 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.
    • Führen Sie für Externes Dataset folgende Schritte aus:

      • Klicken Sie das Kästchen neben Mit einem externen Dataset verknüpfen an.
      • Wählen Sie für Externer Dataset-Typ die Option AWS Glue aus.
      • Geben Sie als Externe Quelle den Wert aws-glue:// ein, gefolgt vom Amazon Resource Name (ARN) der AWS Glue-Datenbank, zum Beispiel: aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database
      • Wählen Sie unter Connection ID (Verbindungs-ID) Ihre AWS-Verbindung aus.
    • Übernehmen Sie die anderen Einstellungen.

  5. Klicken Sie auf Dataset erstellen.

bq

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

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 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. 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 Google Cloud-Standardprojekt 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 für Abfragen in Ihrem föderierten Dataset verfügbar sind, finden Sie unter Datasets auflisten.

Tabelleninformationen abrufen

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

Zugriff auf Tabellen steuern

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

AWS Glue-Daten abfragen

Das Abfragen von Tabellen in föderierten Datasets entspricht dem 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

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, die das Feld TableType (Table.Parameters["table_type"]) verwenden.

Beispielsweise wird einer ORC-Tabelle in BigQuery eine AWS Glue-Tabelle mit den folgenden Feldern 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 einer BigQuery-Tabelle wird so 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
  • Nicht nach Iceberg partitionierte Tabellen: die AWS Glue GetPartitions API

Weitere Eigenschaften

Darüber hinaus werden einige AWS Glue-Tabelleneigenschaften automatisch formatspezifischen 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 in einem föderierten Dataset keine Ansicht erstellen. Sie können jedoch eine Ansicht in einem Standard-Dataset erstellen, das 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 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-Limits.
  • Sie können keine Daten oder Metadaten in Tabellen in einem föderierten AWS Glue-Dataset hinzufügen, löschen oder aktualisieren.
  • Sie können in einem föderierten AWS Glue-Dataset keine neuen Tabellen, Ansichten oder materialisierten Ansichten erstellen.
  • Sie können ein föderiertes AWS Glue-Dataset nur über die Google Cloud Console, Terraform, das bq-Tool und die API erstellen. DDL-Anweisungen (Data Definition Language, Datendefinitionssprache) werden nicht unterstützt.
  • INFORMATION_SCHEMA-Ansichten werden nicht unterstützt.
  • Sicherheit auf Zeilenebene ,Sicherheit auf Spaltenebene ,Metadaten-Caching undDatenmaskierung werden nicht unterstützt.
  • Einstellungen auf Dataset-Ebene, die sich auf die Standardeinstellungen für die Tabellenerstellung beziehen, wirken sich nicht auf föderierte Datasets aus, da Sie Tabellen nicht manuell erstellen können.
  • Der Apache Hive-Datentyp UNION wird für Avro-Tabellen nicht unterstützt.

Nächste Schritte