Lakehouse per Apache Iceberg supporta l'esecuzione di query sui dati remoti tramite una configurazione Lakehouse cross-cloud. Una volta configurato, il sistema supporta l'accesso ai dati utilizzando SQL standard in BigQuery o Apache Spark in Managed Service for Apache Spark.
Questa pagina mostra come eseguire query sui dati remoti dopo aver configurato un Lakehouse cross-cloud.
Prima di iniziare
Prima di poter eseguire query sui dati, devi completare le seguenti operazioni:
- Configura Lakehouse cross-cloud per AWS Glue o Databricks Unity Catalog.
- Assicurati di avere dati nel catalogo remoto.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per eseguire query sui dati federati, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Esegui query sui dati in BigQuery:
Visualizzatore dati BigQuery (
roles/bigquery.dataViewer) -
Esegui job BigQuery:
Utente job BigQuery (
roles/bigquery.jobUser) -
Scopri e leggi i metadati delle tabelle nei cataloghi Lakehouse:
Visualizzatore BigLake (
roles/biglake.viewer)
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.
Esegui query sui dati
Dopo aver configurato la federazione, puoi eseguire query sui dati remoti utilizzando SQL standard in BigQuery o Apache Spark in Managed Service for Apache Spark.
Lakehouse gestisce la traduzione dei metadati e l'accesso sicuro ai dati, consentendoti di trattare le tabelle Apache Iceberg remote come se fossero locali al tuo Google Cloud ambiente.
Esegui query da BigQuery
Per eseguire query sulle tabelle Apache Iceberg federate, utilizza SQL BigQuery standard. Il percorso della tabella segue una struttura in 4 parti: project.federated_catalog.namespace.table. La memorizzazione nella cache, la distribuzione delle credenziali e il routing di transito CCI vengono gestiti automaticamente.
SELECT user_id, action, COUNT(*) as total_actions FROM `PROJECT_ID.FEDERATED_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME` WHERE event_date >= '2026-04-01' GROUP BY 1, 2;
Sostituisci quanto segue:
PROJECT_ID: l'ID del tuo Google Cloud progetto.FEDERATED_CATALOG_NAME: il nome del catalogo federato.NAMESPACE_NAME: lo spazio dei nomi all'interno del catalogo.TABLE_NAME: il nome della tabella.REGION: la Google Cloud regione. Ad esempio,us-east4.
Puoi anche eseguire la query utilizzando lo strumento a riga di comando bq:
bq --location="REGION" --project_id="PROJECT_ID" query --use_legacy_sql=false \ "SELECT * FROM \`PROJECT_ID.FEDERATED_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME\` LIMIT 10"
Esegui query da Managed Service for Apache Spark
Invia un workload batch PySpark a Managed Service for Apache Spark con
la distribuzione delle credenziali abilitata utilizzando
X-Iceberg-Access-Delegation=vended-credentials. Spark utilizzerà le credenziali distribuite con ambito di breve durata per connettersi a S3 in modo sicuro, senza dover gestire credenziali AWS o connettori S3 separati.
Abilita la connettività in uscita per Managed Service for Apache Spark.
Managed Service for Apache Spark non può connettersi ad AWS S3 con la configurazione di rete predefinita network configuration. Devi eseguire il provisioning di un router Cloud e di Cloud NAT.
gcloud compute routers create lakehouse-router \ --network=NETWORK_NAME \ --region=REGION gcloud compute routers nats create lakehouse-nat \ --router=lakehouse-router \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges \ --region=REGION
Sostituisci quanto segue:
NETWORK_NAME: la rete per il workload batch Managed Service for Apache Spark (ad esempio,default).REGION: la regione per il workload batch Managed Service for Apache Spark.
Crea un file di applicazione PySpark ed esegui il job PySpark.
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("CATALOG_NAME").getOrCreate() df = spark.table("CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME") df.show(10, truncate=False)
Carica questo file in Cloud Storage in PYSPARK_FILE.
gcloud dataproc batches submit pyspark PYSPARK_FILE \ --project=PROJECT_ID \ --region=REGION \ --version=RUNTIME_VERSION \ --properties="\ spark.sql.defaultCatalog=CATALOG_NAME,\ spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.CATALOG_NAME.type=rest,\ spark.sql.catalog.CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\ spark.sql.catalog.CATALOG_NAME.warehouse=bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,\ spark.sql.catalog.CATALOG_NAME.header.x-goog-user-project=PROJECT_ID,\ spark.sql.catalog.CATALOG_NAME.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\ spark.sql.catalog.CATALOG_NAME.io-impl=org.apache.iceberg.aws.s3.S3FileIO,\ spark.sql.catalog.CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\ spark.sql.catalog.CATALOG_NAME.rest-metrics-reporting-enabled=false,\ spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
Sostituisci quanto segue:
NAMESPACE_NAME: lo spazio dei nomi nel catalogo federato.TABLE_NAME: il nome della tabella nel catalogo federato.CATALOG_NAME: un nome per il catalogo Spark locale (ad esempio,my_catalog).PYSPARK_FILE: il percorsogs://di Cloud Storage del file dell'applicazione PySpark.REGION: la regione per il workload batch Managed Service for Apache Spark.RUNTIME_VERSION: la versione del runtime di Managed Service for Apache Spark, ad esempio2.3.PROJECT_ID: il progetto a cui viene addebitato l'utilizzo dell'endpoint del catalogo REST Apache Iceberg.FEDERATED_CATALOG_NAME: il nome del catalogo federato.