In diesem Dokument finden Sie ein Beispiel für die Verwendung des Lakehouse-Laufzeitkatalogs mit BigQuery-Tabellen und Managed Service for Apache Spark.
Mit dem Lakehouse-Laufzeitkatalog können Sie standardmäßige (integrierte) Tabellen, von BigQuery verwaltete Apache Iceberg-Tabellen und externe Apache Iceberg-Tabellen in BigQuery erstellen und verwenden.
Unterstützte Tabellenformate
Es werden nur Apache Iceberg V2-Tabellen unterstützt. Iceberg V1-Tabellen werden nicht unterstützt. Wenn Sie bereits Iceberg V1-Tabellen haben, müssen Sie sie auf V2 aktualisieren, z. B. durch Ausführen von ALTER TABLE catalog.schema.table SET TBLPROPERTIES ('format-version'='2'); oder ähnlichen Engine-Vorgängen, bevor Sie sie mit dem Lakehouse-Laufzeitkatalog verwenden können.
Hinweis
- 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.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie für die Verwendung von Managed Service for Apache Spark mit dem Lakehouse-Laufzeitkatalog als Metadatenspeicher benötigen:
-
Lakehouse-Laufzeitkatalogtabellen in Apache Spark erstellen:
- Dataproc-Worker (
roles/dataproc.worker) für das Dienstkonto des Managed Service for Apache Spark im Projekt - BigQuery-Datenbearbeiter (
roles/bigquery.dataEditor) für das Dienstkonto des Managed Service for Apache Spark im Projekt - Storage-Objekt-Nutzer (
roles/storage.objectUser) für das Managed Service for Apache Spark-Dienstkonto im Projekt
- Dataproc-Worker (
-
Lakehouse-Laufzeitkatalogtabellen in BigQuery abfragen:
- BigQuery Data Viewer (
roles/bigquery.dataViewer) für das Projekt - BigQuery-Nutzer (
roles/bigquery.user) für das Projekt - Storage Object Viewer (
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 ein Dataset in der Google Cloud -Console.
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 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 von BigQuery verwaltete Apache Iceberg-Tabelle.
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 Ihre verwaltete Apache Iceberg-Tabelle. Beispiel:iceberg_managed_table.CONNECTION_NAME: der Name Ihrer Verbindung. Sie haben sie im vorherigen Schritt erstellt. Beispiel:myproject.us.myconnection.STORAGE_URI: ein voll qualifizierter Cloud Storage-URI. Beispiel:gs://mybucket/table.
Fügen Sie Daten in die von BigQuery verwaltete Apache Iceberg-Tabelle ein.
INSERT INTO `
PROJECT_ID`.DATASET_NAME.ICEBERG_TABLE_NAME VALUES ('test_name1', 123),('test_name2', 456),('test_name3', 789);Erstellen Sie eine externe Apache Iceberg-Tabelle.
Wenn Sie beispielsweise eine externe Apache 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 Ihre 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 die Standardtabelle, die von BigQuery verwaltete Apache Iceberg-Tabelle und die externe Apache Iceberg-Tabelle über Apache Spark ab.
from pyspark.sql import SparkSession # Create a spark session spark = SparkSession.builder \ .appName("Lakehouse runtime catalog 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 Lakehouse runtime 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 the tables sql = """SELECT * FROM DATASET_NAME.TABLE_NAME""" df = spark.read.format("bigquery").load(sql) df.show() sql = """SELECT * FROM DATASET_NAME.ICEBERG_TABLE_NAME""" df = spark.read.format("bigquery").load(sql) df.show() 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 mit Ihrer verwalteten Apache Iceberg-Tabelle von BigQuery und Ihrer externen Apache Iceberg-Tabelle verbunden ist.CATALOG_NAME: der Name des Katalogs, den Sie verwenden.MATERIALIZATION_NAMESPACE: Der Namespace zum Speichern temporärer Ergebnisse.
Führen Sie das Apache Spark-Skript mit Managed Service for Apache Spark aus.
gcloud dataproc batches submit pyspark SCRIPT_PATH \ --version=2.2 \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=YOUR_BUCKET \
Ersetzen Sie Folgendes:
SCRIPT_PATH: Der Pfad zum Skript, 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: Der Speicherort des Cloud Storage-Bucket zum Hochladen von Arbeitslastabhängigkeiten. 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 Funktionen des Lakehouse-Laufzeitkatalogs ein.