Lakehouse for Apache Iceberg fornisce l'interoperabilità con BigQuery tramite una funzionalità nota come federazione del catalogo BigQuery. Questa funzionalità consente di esporre tabelle gestite da BigQuery, ad esempio tabelle gestite da Iceberg, a motori open source (OSS) esterni come Apache Spark e Trino.
Anziché creare un contenitore del catalogo Lakehouse dedicato per
archiviare i metadati, l'endpoint del catalogo REST Apache Iceberg funge puramente da proxy
gateway. Quando i motori esterni si connettono utilizzando il prefisso del warehouse bq://, il gateway indirizza le richieste di catalogo direttamente al catalogo interno di BigQuery.
In questo modo puoi creare e gestire 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.
Come funziona la federazione del catalogo BigQuery
La federazione dei cataloghi BigQuery consente di esporre le tabelle BigQuery, ad esempio le tabelle gestite Iceberg e le tabelle BigQuery Metastore, tramite l'endpoint del catalogo REST Apache Iceberg del catalogo runtime Lakehouse.
Il flusso di federazione del catalogo BigQuery funziona nel seguente modo:
- Crea una tabella nel catalogo BigQuery: crei una tabella gestita Iceberg in BigQuery utilizzando istruzioni DDL. Questa tabella esiste nel catalogo BigQuery, è regolata dagli elenchi di controllo dell'accesso (ACL) di BigQuery e funziona come risorsa REST di 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 warehouse
bq://projects/PROJECT_ID(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/scrittura da BigQuery.
Considerazioni
Poiché la federazione del catalogo BigQuery non crea una risorsa di catalogo Lakehouse dedicata, altri concetti e configurazioni a livello di catalogo, come la gerarchia delle risorse, le regioni dei bucket e dei cataloghi e la struttura di denominazione P.C.N.T. in quattro parti, non si applicano a questo metodo. Nell'API sottostante, corrisponde alla configurazione
CATALOG_TYPE_BIGQUERY. Tieni presente che la delega dell'accesso allo spazio di archiviazione (distribuzione delle credenziali) non è supportata per i cataloghi BigQuery federati.La federazione del catalogo BigQuery è diversa da Lakehouse cross-cloud. Mentre la federazione del catalogo BigQuery espone le tabelle Google Cloud a motori OSS esterni, Lakehouse cross-cloud connette Google Cloud a cataloghi esterni remoti, come Databricks Unity Catalog, per eseguire query sui dati archiviati in altri provider cloud direttamente da BigQuery e dai motori OSS senza eseguire la migrazione dei dati. Per ulteriori informazioni su questo flusso di lavoro, consulta Informazioni su Lakehouse cross-cloud.
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 si trovano nel catalogo BigQuery come risorse REST BigQuery e il catalogo del runtime Lakehouse funge da gateway proxy. Quando il catalogo runtime lakehouse utilizza l'endpoint del catalogo REST di Apache Iceberg, le tabelle vengono archiviate direttamente all'interno del catalogo come risorse REST di 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 elenchi di controllo dell'accesso (ACL) di 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/scrittura sia dalle API BigQuery sia da motori esterni come Spark.
Prima di iniziare
-
Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud .
-
Abilita l'API BigLake.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (
roles/serviceusage.serviceUsageAdmin), che include l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per utilizzare la federazione dei cataloghi 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 - Visualizzatore oggetti Storage (
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 al 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.
Configurare la federazione del catalogo BigQuery
Per abilitare la federazione del catalogo BigQuery, configura il client (ad esempio Apache Spark o Trino) con il formato del warehouse bq://projects/PROJECT_ID nel 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
formato bq://projects/PROJECT_ID/locations/LOCATION.
Poiché queste risorse sono gestite da BigQuery, devi disporre delle autorizzazioni richieste applicabili.
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 posizione BigQuery. Il valore predefinito è la multi-regioneUS.
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 posizione BigQuery. Il valore predefinito è la multi-regioneUS.
Esegui query sulle tabelle federate in BigQuery
Le tabelle che crei in un catalogo federato sono visibili in BigQuery e possono essere interrogate 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 del tuo spazio dei nomi.TABLE_NAME: il nome della tabella.
Passaggi successivi
- Scopri come gestire i cataloghi nella console Google Cloud .
- Scopri di più sulle tabelle Apache Iceberg supportate dal catalogo runtime Lakehouse.