BigQuery-Metastore mit Tabellen in BigQuery verwenden
In diesem Dokument wird beschrieben, wie Sie den BigQuery-Metastore mit BigQuery-Tabellen und Spark verwenden.
Mit dem BigQuery Metastore können Sie Standardtabellen (integrierte Tabellen), BigQuery-Tabellen für Apache Iceberg und externe BigLake-Tabellen aus BigQuery erstellen und verwenden.
Hinweise
- Aktivieren Sie die Abrechnung für Ihr Google Cloud-Projekt. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
Aktivieren Sie die BigQuery- und Dataproc-APIs.
Optional: Informationen zur Funktionsweise des BigQuery-Metaspeichers und zu den Vorteilen seiner Verwendung
Optional: Wenn Sie mit Iceberg arbeiten, können Sie BigQuery-Metastore-Iceberg-Tabellen mit anderen ähnlichen Tabellentypen in BigQuery vergleichen:
Standard-BigQuery-Tabellen | BigLake-externe Tabellen | BigLake-externe Tabellen für Apache Iceberg (BigLake Iceberg-Tabellen) | BigQuery-Metastore-Iceberg-Tabellen (Vorabversion) | BigQuery-Tabellen für Apache Iceberg (auch Iceberg-verwaltete Tabellen/BigQuery Iceberg-Tabellen genannt) (Vorabversion) | |
---|---|---|---|---|---|
Wichtige Funktionen | Vollständig verwaltete Umgebung | Reglementiert (detaillierte Zugriffssteuerung) und funktionsfähig für Open-Source- und BigQuery-Engines | Funktionen externer BigLake-Tabellen, Datenkonsistenz und Schemaupdates Kann nicht mit Spark oder anderen offenen Engines erstellt werden. | BigLake-Iceberg-Tabellen haben die folgenden Funktionen: Kann nicht mit DDL oder dem bq-Befehlszeilentool erstellt werden. | BigLake-Iceberg-Tabellen – Funktionen und geringer Verwaltungsaufwand mit offenen Daten und Metadaten |
Datenspeicher | Verwalteter BigQuery-Speicher | Daten im offenen Format, die in von Nutzern verwalteten Buckets gehostet werden | |||
Modell öffnen | BigQuery Storage Read API (über Konnektoren) | Offene Dateiformate (Parquet) | Offene Bibliotheken (Iceberg) | Open-Source-kompatibel (Iceberg-Metadaten-Snapshots) | |
Governance | Einheitliche BigQuery-Governance | ||||
Schreibvorgänge (DML und Streaming) | Über BigQuery-Connectors, APIs, DML mit hoher Durchsatzleistung und CDC | Schreibvorgänge nur über externe Engines | Über BigQuery-Connectors, APIs, DML mit hoher Durchsatzleistung und CDC |
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um Spark und Dataproc mit dem BigQuery-Metastore als Metadatenspeicher zu verwenden:
-
BigQuery-Metastore-Tabellen in Spark erstellen:
-
Dataproc-Worker (
roles/dataproc.worker
) für das Dataproc Serverless-Dienstkonto im Projekt -
BigQuery-Dateneditor (
roles/bigquery.dataEditor
) für das Dataproc Serverless-Dienstkonto im Projekt -
Storage-Objekt-Administrator (
roles/storage.objectAdmin
) für das Dataproc Serverless-Dienstkonto im Projekt
-
Dataproc-Worker (
-
BigQuery-Metastore-Tabellen in BigQuery abfragen:
-
BigQuery Data Viewer (
roles/bigquery.dataViewer
) für das Projekt -
BigQuery-Nutzer (
roles/bigquery.user
) für das Projekt -
Storage-Objekt-Betrachter (
roles/storage.objectViewer
) für das Projekt
-
BigQuery Data Viewer (
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Verbindung zu einer Tabelle herstellen
Erstellen Sie in der Google Cloud Console ein Dataset.
CREATE SCHEMA `PROJECT_ID`.DATASET_NAME;
Ersetzen Sie Folgendes:
PROJECT_ID
: die ID des Google Cloud Projekts, in dem das Dataset erstellt werden soll.DATASET_NAME
: Ein Name für Ihr Dataset.
Erstellen Sie eine Cloud-Ressourcen-Verbindung.
Erstellen Sie eine BigQuery-Standardtabelle.
CREATE TABLE `PROJECT_ID`.DATASET_NAME.TABLE_NAME (name STRING,id INT64);
Ersetzen Sie Folgendes:
TABLE_NAME
: Ein Name für Ihre Tabelle.
Fügen Sie Daten in die Standard-BigQuery-Tabelle ein.
INSERT INTO `PROJECT_ID`.DATASET_NAME.TABLE_NAME VALUES ('test_name1', 123),('test_name2', 456),('test_name3', 789);
Erstellen Sie eine BigQuery-Tabelle für Apache Iceberg.
Wenn Sie beispielsweise eine Tabelle erstellen möchten, führen Sie die folgende
CREATE
-Anweisung aus.CREATE TABLE `PROJECT_ID`.DATASET_NAME.ICEBERG_TABLE_NAME( name STRING,id INT64 ) WITH CONNECTION `CONNECTION_NAME` OPTIONS ( file_format = 'PARQUET', table_format = 'ICEBERG', storage_uri = 'STORAGE_URI');
Ersetzen Sie Folgendes:
ICEBERG_TABLE_NAME
: Ein Name für die Iceberg-Tabelle. Beispiel:iceberg_managed_table
.CONNECTION_NAME
: der Name der Verbindung. Sie haben diese im vorherigen Schritt erstellt. Beispiel:myproject.us.myconnection
.STORAGE_URI
: ein vollständig qualifizierter Cloud Storage-URI. Beispiel:gs://mybucket/table
.
Fügen Sie Daten in die BigQuery-Tabelle für Apache Iceberg ein.
INSERT INTO `PROJECT_ID`.DATASET_NAME.ICEBERG_TABLE_NAME VALUES ('test_name1', 123),('test_name2', 456),('test_name3', 789);
Erstellen Sie eine schreibgeschützte Iceberg-Tabelle.
Wenn Sie beispielsweise eine schreibgeschützte Iceberg-Tabelle erstellen möchten, führen Sie die folgende
CREATE
-Anweisung aus.CREATE OR REPLACE EXTERNAL TABLE `PROJECT_ID`.DATASET_NAME.READONLY_ICEBERG_TABLE_NAME WITH CONNECTION `CONNECTION_NAME` OPTIONS ( format = 'ICEBERG', uris = ['BUCKET_PATH'], require_partition_filter = FALSE);
Ersetzen Sie Folgendes:
READONLY_ICEBERG_TABLE_NAME
: Ein Name für die schreibgeschützte Tabelle.BUCKET_PATH
: der Pfad zum Cloud Storage-Bucket, der die Daten für die externe Tabelle im Format['gs://bucket_name/[folder_name/]file_name']
enthält.
Fragen Sie in PySpark die Standardtabelle, die verwaltete Iceberg-Tabelle und die schreibgeschützte Iceberg-Tabelle ab.
from pyspark.sql import SparkSession # Create a spark session spark = SparkSession.builder \ .appName("BigQuery Metastore Iceberg") \ .config("spark.sql.catalog.CATALOG_NAME", "org.apache.iceberg.spark.SparkCatalog") \ .config("spark.sql.catalog.CATALOG_NAME.catalog-impl", "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog") \ .config("spark.sql.catalog.CATALOG_NAME.gcp_project", "PROJECT_ID") \ .config("spark.sql.catalog.CATALOG_NAME.gcp_location", "LOCATION") \ .config("spark.sql.catalog.CATALOG_NAME.warehouse", "WAREHOUSE_DIRECTORY") \ .getOrCreate() spark.conf.set("viewsEnabled","true") # Use the bqms_catalog spark.sql("USE `CATALOG_NAME`;") spark.sql("USE NAMESPACE DATASET_NAME;") # Configure spark for temp results spark.sql("CREATE namespace if not exists MATERIALIZATION_NAMESPACE"); spark.conf.set("materializationDataset","MATERIALIZATION_NAMESPACE") # List the tables in the dataset df = spark.sql("SHOW TABLES;") df.show(); # Query a standard BigQuery table sql = """SELECT * FROM DATASET_NAME.TABLE_NAME""" df = spark.read.format("bigquery").load(sql) df.show() # Query a BigQuery Managed Apache Iceberg table sql = """SELECT * FROM DATASET_NAME.ICEBERG_TABLE_NAME""" df = spark.read.format("bigquery").load(sql) df.show() # Query a BigQuery Readonly Apache Iceberg table sql = """SELECT * FROM DATASET_NAME.READONLY_ICEBERG_TABLE_NAME""" df = spark.read.format("bigquery").load(sql) df.show()
Ersetzen Sie Folgendes:
WAREHOUSE_DIRECTORY
: der URI des Cloud Storage-Ordners, der Ihr Data Warehouse enthält.CATALOG_NAME
: der Name des verwendeten Katalogs.MATERIALIZATION_NAMESPACE
: der Namespace für das Speichern temporärer Ergebnisse.
Führen Sie das PySpark-Script mit serverlosem Spark aus.
gcloud dataproc batches submit pyspark SCRIPT_PATH \ --version=2.2 \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=YOUR_BUCKET \ --jars=https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.1-beta.jar
Ersetzen Sie Folgendes:
SCRIPT_PATH
: der Pfad zum Script, das vom Batchjob verwendet wird.PROJECT_ID
: die ID des Google Cloud-Projekts, in dem der Batchjob ausgeführt werden soll.REGION
: die Region, in der Ihre Arbeitslast ausgeführt wird.YOUR_BUCKET
: den Speicherort des Cloud Storage-Buckets, in den Arbeitslastabhängigkeiten hochgeladen werden sollen. Dasgs://
-URI-Präfix des Buckets ist nicht erforderlich. Sie können den Bucket-Pfad oder den Bucket-Namen angeben, z. B.mybucketname1
.
Nächste Schritte
- Richten Sie optionale BigQuery-Metastore-Funktionen ein.