Utilizzare Lakehouse cross-cloud

Lakehouse for Apache Iceberg supporta l'interrogazione di dati remoti tramite una configurazione lakehouse cross-cloud. Una volta configurato, il sistema supporta l'accesso ai dati utilizzando SQL standard in BigQuery, la versione open source di Apache Spark o Managed Service for Apache Spark. Oltre alle query analitiche, puoi utilizzare i dati federati per insight e governance basati sull'AI:

  • Analisi conversazionale: Crea agenti specializzati basati sulle tue fonti di dati esatte, incluse tabelle cross-cloud, per analizzare i dati su più cloud da un'unica conversazione.
  • Dataplex Catalog: utilizza le funzionalità di Knowledge Catalog per la profilazione dei dati e gli approfondimenti con origini dati federate.

Per approfondire le informazioni, puoi creare agenti specializzati basati sulle tue origini dati, da progetti, set di dati e tabelle a viste, grafici e funzioni definite dall'utente. Poiché i tuoi dati raramente si trovano in un unico posto, l'analisi conversazionale va oltre le tabelle BigQuery Standard e raggiunge le tabelle Apache Iceberg gestite da Lakehouse e le origini Lakehouse cross-cloud come Databricks Unity, AWS Glue, SAP e Salesforce. In questo modo puoi abbattere i silo di dati e analizzare i dati su più cloud da un'unica conversazione.

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:

  1. Configura Lakehouse cross-cloud per AWS Glue, Databricks Unity Catalog o Snowflake.
  2. 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:

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, il che ti consente di trattare le tabelle Apache Iceberg remote come se fossero locali per il tuo ambiente Google Cloud .

Query da BigQuery

Per eseguire query sulle tabelle Apache Iceberg federate, utilizza SQL BigQuery standard. Il percorso della tabella segue una struttura in quattro 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: il tuo ID progetto Google Cloud .
  • 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"

Query da Managed Service for Apache Spark

Invia un workload batch PySpark a Managed Service for Apache Spark con l'erogazione delle credenziali abilitata utilizzando X-Iceberg-Access-Delegation=vended-credentials. Spark utilizzerà le credenziali vendute con ambito di breve durata per connettersi a S3 in modo sicuro, senza dover gestire credenziali AWS o connettori S3 separati.

  1. Abilita la connettività in uscita per Managed Service for Apache Spark.

    Managed Service for Apache Spark non può connettersi ad AWS S3 con la sua configurazione di rete predefinita. Devi eseguire il provisioning di un router Cloud e 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.
  2. Crea un file dell'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 su Cloud Storage all'indirizzo 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=IO_IMPL,\
        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 percorso Cloud Storage gs:// 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 esempio 2.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.
    • IO_IMPL: l'implementazione di FileIO corrispondente allo spazio di archiviazione sottostante.

    Parametri di configurazione Spark

    La tabella seguente elenca i parametri comuni richiesti per tutte le connessioni:

    Parametro Descrizione
    spark.sql.defaultCatalog Il nome del catalogo predefinito.
    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.extensions org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

    La seguente tabella elenca i parametri univoci in base al tuo fornitore di spazio di archiviazione (<var>IO_IMPL</var>):

    Archiviazione spark.sql.catalog.CATALOG_NAME.io-impl Note
    Amazon S3 org.apache.iceberg.aws.s3.S3FileIO Richiede X-Iceberg-Access-Delegation=vended-credentials se abilitato.
    Google Cloud Storage org.apache.iceberg.gcp.gcs.GCSFileIO
    Azure Blob Storage org.apache.iceberg.azure.adlsv2.ADLSFileIO

    Per Snowflake, potresti riscontrare problemi durante l'esecuzione di query sulle colonne STRING perché sono ottimizzate automaticamente per l'archiviazione. Puoi risolvere il problema in due modi:

    • Opzione 1: disattiva la vettorizzazione in Spark. Aggiungi le seguenti proprietà di configurazione di Spark al flag --properties:
    • spark.sql.iceberg.vectorization.enabled=false
    • spark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=false

    • Opzione 2: modifica i criteri di serializzazione in Snowflake: modifica i criteri di serializzazione dell'archiviazione in COMPATIBLE per la tabella in Snowflake.

Passaggi successivi