Questo documento spiega come utilizzare BigLake Metastore con le tabelle BigQuery e Spark.
Con BigLake Metastore, puoi creare e utilizzare tabelle standard (integrate), tabelle BigLake per Apache Iceberg in BigQuery e tabelle esterne Apache Iceberg da BigQuery.
Prima di iniziare
- Abilita la fatturazione per il tuo progetto Google Cloud . Scopri come verificare se la fatturazione è abilitata per un progetto.
Abilita le API BigQuery e Dataproc.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per utilizzare Spark e Dataproc con BigLake Metastore come archivio di metadati, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Crea tabelle BigLake Metastore in Spark:
-
Dataproc Worker (
roles/dataproc.worker) sul account di servizio Dataproc Serverless nel progetto -
Editor dati BigQuery (
roles/bigquery.dataEditor) nell'account di servizio Dataproc Serverless nel progetto -
Storage Object User (
roles/storage.objectUser) sul account di servizio Dataproc Serverless nel progetto
-
Dataproc Worker (
-
Esegui query sulle tabelle del metastore BigLake in BigQuery:
-
Visualizzatore dati BigQuery (
roles/bigquery.dataViewer) sul progetto -
Utente BigQuery (
roles/bigquery.user) sul progetto -
Visualizzatore oggetti Storage (
roles/storage.objectViewer) sul progetto
-
Visualizzatore dati BigQuery (
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Connettersi a una tabella
Crea un set di dati nella console Google Cloud .
CREATE SCHEMA `PROJECT_ID`.DATASET_NAME;
Sostituisci quanto segue:
PROJECT_ID: l'ID del progetto Google Cloud in cui creare il set di dati.DATASET_NAME: un nome per il set di dati.
Crea una connessione risorsa cloud.
Crea una tabella BigQuery standard.
CREATE TABLE `PROJECT_ID`.DATASET_NAME.TABLE_NAME (name STRING,id INT64);
Sostituisci quanto segue:
TABLE_NAME: un nome per la tabella.
Inserisci i dati nella tabella BigQuery standard.
INSERT INTO `PROJECT_ID`.DATASET_NAME.TABLE_NAME VALUES ('test_name1', 123),('test_name2', 456),('test_name3', 789);
Crea una tabella BigLake per Apache Iceberg in BigQuery.
Ad esempio, per creare una tabella, esegui la seguente istruzione
CREATE.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');
Sostituisci quanto segue:
ICEBERG_TABLE_NAME: un nome per la tabella BigLake per Apache Iceberg in BigQuery. Ad esempio,iceberg_managed_table.CONNECTION_NAME: il nome della connessione. L'hai creato nel passaggio precedente. Ad esempio,myproject.us.myconnection.STORAGE_URI: un URI Cloud Storage completo. Ad esempio,gs://mybucket/table.
Inserisci i dati nella tabella BigLake per Apache Iceberg in BigQuery.
INSERT INTO `PROJECT_ID`.DATASET_NAME.ICEBERG_TABLE_NAME VALUES ('test_name1', 123),('test_name2', 456),('test_name3', 789);
Crea una tabella esterna Apache Iceberg.
Ad esempio, per creare una tabella esterna Iceberg, esegui la seguente istruzione
CREATE.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);
Sostituisci quanto segue:
READONLY_ICEBERG_TABLE_NAME: un nome per la tabella di sola lettura.BUCKET_PATH: il percorso del bucket Cloud Storage che contiene i dati per la tabella esterna, nel formato['gs://bucket_name/[folder_name/]file_name'].
Da PySpark, esegui query sulla tabella standard, sulla tabella BigLake per Apache Iceberg in BigQuery e sulla tabella esterna Apache Iceberg.
from pyspark.sql import SparkSession # Create a spark session spark = SparkSession.builder \ .appName("BigLake 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 blms_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()
Sostituisci quanto segue:
WAREHOUSE_DIRECTORY: l'URI della cartella Cloud Storage collegata alla tabella BigLake Iceberg in BigQuery e alla tabella esterna Iceberg.CATALOG_NAME: il nome del catalogo che stai utilizzando.MATERIALIZATION_NAMESPACE: lo spazio dei nomi per l'archiviazione dei risultati temporanei.
Esegui lo script PySpark utilizzando Spark serverless.
gcloud dataproc batches submit pyspark SCRIPT_PATH \ --version=2.2 \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=YOUR_BUCKET \
Sostituisci quanto segue:
SCRIPT_PATH: il percorso dello script utilizzato dal job batch.PROJECT_ID: l'ID del Google Cloud progetto in cui eseguire il job batch.REGION: la regione in cui viene eseguito il tuo workload.YOUR_BUCKET: la posizione del bucket Cloud Storage in cui caricare le dipendenze del workload. Il prefisso URIgs://del bucket non è obbligatorio. Puoi specificare il percorso del bucket o il nome del bucket, ad esempiomybucketname1.
Passaggi successivi
- Configura le funzionalità facoltative di BigLake Metastore.