Usar o Lakehouse entre nuvens

O Lakehouse para Apache Iceberg oferece suporte a consultas de dados remotos por meio de uma configuração de Lakehouse entre nuvens. Depois de configurado, o sistema oferece suporte ao acesso aos dados usando SQL padrão no BigQuery ou no Apache Spark no Serviço Gerenciado para Apache Spark.

Esta página mostra como consultar dados remotos depois de configurar um Lakehouse entre nuvens.

Antes de começar

Antes de consultar os dados, conclua as seguintes etapas:

  1. Configure o Lakehouse entre nuvens para o AWS Glue ou o Databricks Unity Catalog.
  2. Verifique se há dados no catálogo remoto.

Funções exigidas

Para conseguir as permissões necessárias para consultar dados federados, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.

Consultar dados

Depois de configurar a federação, é possível consultar os dados remotos usando SQL padrão no BigQuery ou no Apache Spark em Serviço Gerenciado para Apache Spark.

Lakehouse processa a tradução de metadados e o acesso seguro a dados, o que permite tratar tabelas remotas do Apache Iceberg como se fossem locais para o seu Google Cloud ambiente.

Consultar no BigQuery

Para consultar tabelas federadas do Apache Iceberg, use o SQL padrão do BigQuery. O caminho da tabela segue uma estrutura de quatro partes: project.federated_catalog.namespace.table. O armazenamento em cache, a distribuição de credenciais e o roteamento de trânsito de CCI são processados 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;

Substitua:

  • PROJECT_ID: o ID do Google Cloud projeto.
  • FEDERATED_CATALOG_NAME: o nome do catálogo federado.
  • NAMESPACE_NAME: o namespace no catálogo.
  • TABLE_NAME: o nome da tabela.
  • REGION: a Google Cloud região. Por exemplo, us-east4.

Também é possível executar a consulta usando a ferramenta de linha de 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"

Consultar no Serviço Gerenciado para Apache Spark

Envie uma carga de trabalho em lote do PySpark para o Serviço Gerenciado para Apache Spark com a distribuição de credenciais ativada usando X-Iceberg-Access-Delegation=vended-credentials. O Spark vai usar as credenciais distribuídas com escopo de curta duração para se conectar ao S3 com segurança, tudo sem precisar gerenciar credenciais separadas da AWS ou conectores do S3.

  1. Ative a conectividade de saída para o Serviço Gerenciado para Apache Spark.

    O Serviço Gerenciado para Apache Spark não pode se conectar ao AWS S3 com a configuração de rede padrão de rede. É necessário provisionar um Cloud Router e um 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

    Substitua:

    • NETWORK_NAME: a rede da carga de trabalho em lote do Serviço Gerenciado para Apache Spark (por exemplo, default).
    • REGION: a região da carga de trabalho em lote do Serviço Gerenciado para Apache Spark.
  2. Crie um arquivo de aplicativo PySpark e execute o job do 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)

    Faça upload desse arquivo para o Cloud Storage em 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"

    Substitua:

    • NAMESPACE_NAME: o namespace no catálogo federado.
    • TABLE_NAME: o nome da tabela no catálogo federado.
    • CATALOG_NAME: um nome para o catálogo local do Spark (por exemplo, my_catalog).
    • PYSPARK_FILE: o caminho gs:// do Cloud Storage para o arquivo de aplicativo PySpark.
    • REGION: a região da carga de trabalho em lote do Serviço Gerenciado para Apache Spark.
    • RUNTIME_VERSION: a versão do ambiente de execução do Serviço Gerenciado para Apache Spark, por exemplo, 2.3.
    • PROJECT_ID: o projeto que é faturado pelo uso do endpoint do catálogo REST do Apache Iceberg.
    • FEDERATED_CATALOG_NAME: o nome do catálogo federado.

A seguir