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 einDATABASE_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 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
Öffnen Sie in der Google Cloud Console die Seite "BigQuery".
Wählen Sie im Bereich Explorer das Projekt aus, in dem Sie das Dataset erstellen möchten.
Maximieren Sie die Option
Aktionen und klicken Sie auf Dataset erstellen.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.
Klicken Sie auf Dataset erstellen.
SQL
Verwenden Sie die Datendefinitionssprachen-Anweisung (DDL) CREATE EXTERNAL SCHEMA
.
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
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 Standort 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.
Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
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 FormatPROJECT_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
- Rufen Sie Cloud Shell auf.
-
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).
-
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 alsmain.tf
bezeichnet.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
- Speichern Sie die Änderungen.
-
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
-
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.
-
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.
- Ö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 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
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.
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.
Nächste Schritte
- Weitere Informationen zu BigQuery Omni
- Probieren Sie das Lab BigQuery Omni mit AWS-Lab aus.