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
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Für diese Anleitung empfehlen wir die Erstellung eines Testprojekts, damit Ihre Produktionsarbeitslasten nicht beeinträchtigt werden.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery Connection API.
Wenn Sie BigLake-Tabellen aus Open-Source-Engines wie Apache Spark lesen möchten, müssen Sie die BigQuery Storage Read API aktivieren.
-
In the Google Cloud console, activate Cloud Shell.
Prüfen Sie, ob Ihre Version des Google Cloud SDK 366.0.0 oder höher ist:
gcloud version
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
Rufen Sie die Seite BigQuery auf.
Klicken Sie zum Erstellen einer Verbindung auf
Daten hinzufügen und dann auf Externe Datenquelle.Wählen Sie in der Liste Verbindungstyp die Option BigLake und Remotefunktionen (Cloud Resource) aus.
Geben Sie im Feld Verbindungs-ID einen Namen für die Verbindung ein.
Klicken Sie auf Verbindung erstellen.
Klicken Sie im Bereich Explorer auf die Verbindung in dem Projekt, in dem Sie die Verbindungsressource erstellt haben. Die Verbindungsinformationen werden angezeigt:
Kopieren Sie im Abschnitt Verbindungsinformationen die Dienstkonto-ID, da Sie sie in einem späteren Schritt benötigen.
bq
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 VerbindungsregionPROJECT_ID
: Ihre Cloud-Projekt-IDCONNECTION_ID
: eine ID für Ihre Verbindung
Wenn Sie eine Verbindungsressource herstellen, erstellt BigQuery ein eindeutiges Systemdienstkonto und ordnet es der Verbindung zu.
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 VerbindungPROJECT_ID
: Ihre Cloud-Projekt-IDREGION
: 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
Zur Seite IAM & Verwaltung.
Klicken Sie auf
Hinzufügen.Das Dialogfeld Principals hinzufügen wird geöffnet.
Geben Sie im Feld Neue Hauptkonten die Dienstkonto-ID ein, die Sie zuvor kopiert haben.
Wählen Sie im Feld Rolle auswählen die Option Cloud Storage und dann Storage-Objekt-Betrachter aus.
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:
- Fügen Sie die Azure-Anmeldedaten zur Azure-Anwendung hinzu.
- Weisen Sie den BigQuery-Azure-Anwendungen eine Rolle zu.
Wenn Sie eine nicht föderierte Identität verwendet haben, gehen Sie so vor:
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
Rufen Sie die Seite BigQuery auf.
Wählen Sie im Bereich Explorer das Dataset aus, in dem Sie eine Tabelle erstellen möchten, und klicken Sie dann auf
Tabelle erstellen.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.
Wählen Sie bei Dateiformat das Format aus, das zu Ihrer Datei passt.
Geben Sie im Feld Tabelle einen Namen für die Tabelle ein, z. B.
mytable
.Legen Sie unter Tabellentyp den Tabellentyp auf Externe Tabelle fest. Standardmäßig ist das Kästchen BigLake-Tabelle mit einer Cloud-Ressourcenverbindung erstellen aktiviert.
Wählen Sie unter Verbindungs-ID die Verbindung aus, die Sie zuvor erstellt haben.
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:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
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
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:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
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
Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfragen ausführen.
bq
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
.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.