Utilizzare il metastore BigLake con le tabelle in BigQuery
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 di sola lettura 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.
(Facoltativo) Scopri come funziona BigLake Metastore e perché dovresti utilizzarlo.
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
) nell'account di servizio Dataproc Serverless nel progetto -
Editor dati BigQuery (
roles/bigquery.dataEditor
) nell'account di servizio Dataproc Serverless nel progetto -
Storage Object Admin (
roles/storage.objectAdmin
) 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
) del 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 Google Cloud progetto in cui creare il set di dati.DATASET_NAME
: un nome per il tuo 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. Hai creato questo 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 di sola lettura Apache Iceberg.
Ad esempio, per creare una tabella Iceberg di sola lettura, 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 di sola lettura 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 Iceberg di sola lettura.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 carico di lavoro. 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.