Lakehouse for Apache Iceberg fornisce interoperabilità con BigQuery tramite una funzionalità nota come federazione del catalogo BigQuery. Questa funzionalità consente di esporre le tabelle gestite da BigQuery, ad esempio le tabelle gestite da Iceberg, a motori open source (OSS) esterni come Apache Spark e Trino.
Anziché creare un container di catalogo Lakehouse dedicato per archiviare i metadati, l'endpoint del catalogo REST Apache Iceberg funge esclusivamente da gateway proxy. Quando i motori esterni si connettono utilizzando il prefisso del warehouse bq://, il gateway instrada le richieste di catalogo direttamente al catalogo interno di BigQuery.
In questo modo, puoi creare e gestire le tabelle direttamente in BigQuery utilizzando DDL o API BigQuery standard, fornendo al contempo ai motori OSS esterni l'accesso in sola lettura per eseguire query su queste tabelle tramite l'endpoint del catalogo REST.
Formati di tabella supportati
Sono supportate solo le tabelle Apache Iceberg V2; le tabelle Iceberg V1 non sono supportate. Se hai tabelle Iceberg V1 esistenti archiviate nel catalogo BigQuery, devi eseguirne l'upgrade alla versione V2 (ad esempio, eseguendo ALTER TABLE catalog.schema.table SET TBLPROPERTIES ('format-version'='2'); o utilizzando operazioni del motore simili) prima di utilizzarle con la federazione del catalogo BigQuery.
Come funziona la federazione del catalogo BigQuery
La federazione del catalogo BigQuery consente di esporre le tabelle BigQuery, come le tabelle gestite da Iceberg e le tabelle del metastore BigQuery, tramite l'endpoint del catalogo REST Apache Iceberg del catalogo runtime Lakehouse.
Il flusso della federazione del catalogo BigQuery funziona nel seguente modo:
- Crea una tabella nel catalogo BigQuery: crei una tabella gestita da Iceberg in BigQuery utilizzando le istruzioni DDL. Questa tabella esiste nel catalogo BigQuery, è regolata dagli elenchi di controllo dell'accesso (ACL) di BigQuery e funziona come risorsa REST BigQuery.
- Esegui la federazione nel warehouse BigQuery dal
catalogo runtime Lakehouse: utilizzando l'API REST Apache Iceberg del
catalogo runtime Lakehouse, esegui la federazione
in un warehouse specificato dal formato del percorso del
bq://projects/PROJECT_IDwarehouse (o dalla versione regionale,bq://projects/PROJECT_ID/locations/LOCATION). In questo modo, puoi accedere alla tabella BigQuery dai motori di calcolo come Apache Spark tramite l'API Lakehouse per Apache Iceberg. In questa configurazione, ottieni un'esperienza di sola lettura da Spark, ma un'esperienza di lettura e scrittura da BigQuery.
Confronto con le tabelle gestite dall'endpoint del catalogo REST Apache Iceberg
La federazione del catalogo BigQuery differisce dai flussi di lavoro in cui il catalogo runtime Lakehouse utilizza l'endpoint del catalogo REST Apache Iceberg nei seguenti modi:
- Gestione delle risorse e archiviazione del catalogo: le tabelle federate risiedono nel catalogo BigQuery come risorse REST BigQuery, e il catalogo runtime Lakehouse funge da gateway proxy. Quando il catalogo runtime Lakehouse utilizza l'endpoint del catalogo REST Apache Iceberg, le tabelle vengono archiviate direttamente all'interno del catalogo come risorse REST Lakehouse per Apache Iceberg.
- Controllo dell'accesso: le tabelle federate utilizzano le autorizzazioni IAM di BigQuery e gli elenchi di controllo dell'accesso (ACL). Quando il catalogo runtime Lakehouse utilizza l'endpoint del catalogo REST Apache Iceberg, le tabelle utilizzano gli ACL Lakehouse per Apache Iceberg.
- Funzionalità di lettura e scrittura del motore: le tabelle federate forniscono l'accesso in lettura e scrittura tramite BigQuery, ma l'accesso in sola lettura da motori esterni come Spark. Quando il catalogo runtime Lakehouse utilizza l'endpoint del catalogo REST Apache Iceberg, le tabelle supportano le operazioni di lettura e scrittura sia dalle API BigQuery sia dai motori esterni come Spark.
Prima di iniziare
-
Verifica che la fatturazione sia attivata per il tuo Google Cloud progetto.
-
Abilita l'API BigLake.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (
roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per utilizzare la federazione del catalogo in BigQuery, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Leggi le risorse del catalogo ed esegui query sui dati delle tabelle:
- BigLake Viewer (
roles/biglake.viewer) sul progetto - Storage Object Viewer (
roles/storage.objectViewer) sul bucket Cloud Storage
- BigLake Viewer (
-
Esegui operazioni DML (Data Manipulation Language) con la federazione del catalogo BigQuery:
- Editor dati Bigquery (
roles/bigquery.dataEditor) sul progetto - Amministratore Storage (
roles/storage.admin) sul bucket Cloud Storage. Se utilizzi motori di query come Managed Service for Apache Spark per eseguire operazioni DML, concedi questi ruoli all'account di servizio che utilizzi per eseguire i job in quel motore.
- Editor 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.
Configura la federazione del catalogo BigQuery
Per abilitare la federazione del catalogo BigQuery, configura il client (ad esempio Apache Spark o Trino) con il
bq://projects/PROJECT_ID formato del warehouse in
il campo WAREHOUSE_PATH negli esempi di configurazione del client in
Configura l'applicazione client.
Puoi anche scegliere di includere una località BigQuery per
limitare le richieste future a una singola località utilizzando il
bq://projects/PROJECT_ID/locations/LOCATION
formato.
Poiché queste risorse sono gestite da BigQuery, devi disporre di quelle applicabili autorizzazioni richieste.
Crea spazi dei nomi per le tabelle federate
Dopo aver configurato il client per la federazione del catalogo BigQuery, puoi creare uno spazio dei nomi per le tabelle federate.
Spark
Per utilizzare la federazione del catalogo BigQuery, includi le clausole LOCATION e DBPROPERTIES:
spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME LOCATION 'gs://BUCKET_NAME/NAMESPACE_NAME' WITH DBPROPERTIES ('gcp-region' = 'LOCATION');") spark.sql("USE NAMESPACE_NAME;")
Sostituisci quanto segue:
NAMESPACE_NAME: un nome per lo spazio dei nomi.BUCKET_NAME: il bucket Cloud Storage che utilizzi con il catalogo.LOCATION: una località BigQuery. Il valore predefinito è la multiregioneUS.
Trino
Per utilizzare la federazione del catalogo BigQuery, includi le proprietà LOCATION e gcp-region:
CREATE SCHEMA IF NOT EXISTS CATALOG_NAME.SCHEMA_NAME WITH ( LOCATION = 'gs://BUCKET_NAME/SCHEMA_NAME', "gcp-region" = 'LOCATION'); USE CATALOG_NAME.SCHEMA_NAME;
Sostituisci quanto segue:
CATALOG_NAME: il nome del catalogo Trino che utilizza l'endpoint del catalogo REST Apache Iceberg.SCHEMA_NAME: un nome per lo schema.BUCKET_NAME: il bucket Cloud Storage che utilizzi con il catalogo.LOCATION: una località BigQuery. Il valore predefinito è la multiregioneUS.
Esegui query sulle tabelle federate in BigQuery
Le tabelle create in un catalogo federato sono visibili in BigQuery e possono essere sottoposte a query direttamente utilizzando SQL BigQuery standard (senza bisogno di un nome P.C.N.T in quattro parti):
SELECT * FROM `NAMESPACE_NAME.TABLE_NAME`;
Sostituisci quanto segue:
NAMESPACE_NAME: il nome dello spazio dei nomi.TABLE_NAME: il nome della tabella.
Passaggi successivi
- Scopri come gestire i cataloghi nella Google Cloud console.
- Scopri le tabelle Apache Iceberg supportate dal catalogo runtime Lakehouse.