Consultar tabelas do Iceberg com o catálogo de ambientes de execução do Lakehouse, o Spark e o BigQuery

Saiba como usar o Lakehouse para Apache Iceberg criando um catálogo de ambientes de execução do Lakehouse com um catálogo de vários buckets. Essa configuração estabelece uma camada de metadados gerenciada que conecta mecanismos de processamento de código aberto com Google Cloud.

Em seguida, execute um job do PySpark do Serviço Gerenciado para Apache Spark para criar uma tabela do catálogo REST do Iceberg do Lakehouse usando o endpoint do catálogo REST do Apache Iceberg.

Depois disso, é possível consultar a tabela resultante diretamente no Google Cloud console do BigQuery usando a project.catalog.namespace.table sintaxe.

Antes de começar

  1. Faça login na sua Google Cloud conta do. Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the BigLake, Dataproc APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigLake, Dataproc APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

Conceder papéis do IAM

Para permitir que o job do PySpark do Serviço Gerenciado para Apache Spark e o catálogo de ambientes de execução do Lakehouse funcionem com o Cloud Storage e o BigQuery, conceda os papéis necessários aos principais correspondentes:

  1. No Google Cloud console, clique em Ativar o Cloud Shell.

    Ativar o Cloud Shell

  2. Clique em Autorizar.

  3. Conceda o papel Trabalhador do Dataproc à conta de serviço padrão do Compute Engine do projeto, que o Serviço Gerenciado para Apache Spark usa por padrão conforme detalhado em Contas de serviço do Serviço Gerenciado para Apache Spark.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \
        --role="roles/dataproc.worker"
  4. Conceda o papel Consumidor de uso do serviço à conta de serviço padrão do Compute Engine do projeto.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \
        --role="roles/serviceusage.serviceUsageConsumer"
  5. Conceda o papel Editor do BigLake à conta de serviço padrão do Compute Engine do projeto.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \
        --role="roles/biglake.editor"
  6. Conceda o papel Editor de dados do BigQuery à conta de serviço padrão do Compute Engine do projeto.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \
        --role="roles/bigquery.dataEditor"

    Substitua:

    • PROJECT_ID: o ID do Google Cloud projeto

Criar um catálogo de ambientes de execução do Lakehouse

Crie um catálogo de ambientes de execução do Lakehouse para gerenciar metadados das tabelas do Iceberg.

  1. No Cloud Shell, execute o comando a seguir para criar seu bucket múltiplo (bl://) com a distribuição de credenciais:

    gcloud biglake iceberg catalogs create LAKEHOUSE_CATALOG_ID \
        --project=PROJECT_ID \
        --catalog-type=biglake \
        --default-location=gs://BUCKET_NAME \
        --credential-mode=vended-credentials

    Substitua:

    • LAKEHOUSE_CATALOG_ID: um nome exclusivo para o catálogo.
    • PROJECT_ID: o ID do Google Cloud projeto.
    • BUCKET_NAME: o nome do bucket do Cloud Storage que contém o arquivo do aplicativo PySpark.
  2. Conceda permissões no bucket à conta de serviço do catálogo:

    1. No Google Cloud console, acesse Lakehouse.

      Acessar o Lakehouse

    2. Clique no nome do catálogo que você acabou de criar (LAKEHOUSE_CATALOG_ID).

    3. Em Método de autenticação, clique em Definir permissões do bucket.

    4. Na caixa de diálogo, clique em Confirmar. Isso verifica se a conta de serviço do catálogo tem o papel de usuário de objetos do Storage no bucket.

Criar e executar um job do PySpark

Para criar e consultar uma tabela do Iceberg, primeiro crie um job do PySpark com as instruções SQL do Spark necessárias. Em seguida, execute o job com o Serviço Gerenciado para Apache Spark.

Criar um script do PySpark com um namespace e uma tabela

Em um editor de texto, crie um arquivo chamado quickstart.py com o conteúdo a seguir.

Esse script do PySpark inicializa uma sessão do Spark para executar várias operações em um catálogo do Iceberg. O script primeiro cria um namespace, se ainda não houver um. Em seguida, ele cria uma tabela do Iceberg chamada quickstart_table com um esquema básico. Depois que a tabela é criada, o script insere três linhas de dados. Por fim, ele consulta a tabela para recuperar todos os registros inseridos.

Esses valores são usados na próxima etapa ao executar o job gcloud dataproc batches submit pyspark.

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("quickstart").getOrCreate()

# Create a namespace (dataset) if it doesn't exist
spark.sql("CREATE NAMESPACE IF NOT EXISTS `quickstart_catalog`.quickstart_namespace")

# Create the table
spark.sql("""
    CREATE OR REPLACE TABLE `quickstart_catalog`.quickstart_namespace.quickstart_table (
        id INT,
        name STRING
    )
    USING iceberg
""")

# Insert data into the table
spark.sql("""
    INSERT INTO `quickstart_catalog`.quickstart_namespace.quickstart_table
    VALUES (1, 'one'), (2, 'two'), (3, 'three')
""")

Fazer upload do script para o bucket do Cloud Storage

Depois de criar o script quickstart.py, faça upload dele para o bucket do Cloud Storage.

  1. No Google Cloud console, acesse Buckets do Cloud Storage.

    Acessar buckets

  2. Clique no nome do bucket.

  3. Na guia Objetos, clique em Fazer upload > Fazer upload de arquivos.

  4. No navegador de arquivos, selecione o arquivo quickstart.py e clique em Abrir.

Executar o job do PySpark

Depois de fazer upload do script quickstart.py, execute-o como um job em lote do Serviço Gerenciado para Apache Spark.

  1. No Cloud Shell, execute o job em lote do Serviço Gerenciado para Apache Spark a seguir usando o script quickstart.py.

    gcloud dataproc batches submit pyspark gs://BUCKET_NAME/quickstart.py \
        --project=PROJECT_ID \
        --region=REGION \
        --version=2.2 \
        --properties="\
    spark.sql.defaultCatalog=quickstart_catalog,\
    spark.sql.catalog.quickstart_catalog=org.apache.iceberg.spark.SparkCatalog,\
    spark.sql.catalog.quickstart_catalog.type=rest,\
    spark.sql.catalog.quickstart_catalog.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\
    spark.sql.catalog.quickstart_catalog.warehouse=bl://projects/PROJECT_ID/catalogs/LAKEHOUSE_CATALOG_ID,\
    spark.sql.catalog.quickstart_catalog.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO,\
    spark.sql.catalog.quickstart_catalog.header.x-goog-user-project=PROJECT_ID,\
    spark.sql.catalog.quickstart_catalog.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\
    spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,\
    spark.sql.catalog.quickstart_catalog.header.X-Iceberg-Access-Delegation=vended-credentials,\
    spark.sql.catalog.quickstart_catalog.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token"

    Substitua:

    • BUCKET_NAME: o nome do bucket do Cloud Storage que contém o arquivo do aplicativo PySpark.

    • LAKEHOUSE_CATALOG_ID: o nome do catálogo do BigLake. Esse nome é usado mais tarde ao consultar o catálogo no BigQuery, usando a sintaxe P.C.N.T. Por exemplo, my-project.biglake-catalog.quickstart_namespace.quickstart_table.

    • PROJECT_ID: o ID do Google Cloud projeto.

    • REGION: a região em que a carga de trabalho em lote do Serviço Gerenciado para Apache Spark será executada.

    Quando o job for concluído, ele vai mostrar uma saída semelhante a esta:

    Batch [cb9d84e9489d408baca4f9e7ab4c64ff] finished.
    metadata:
    '@type': type.googleapis.com/google.cloud.dataproc.v1.BatchOperationMetadata
    batch: projects/your-project/locations/us-central1/batches/cb9d84e9489d408baca4f9e7ab4c64ff
    batchUuid: 54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9
    createTime: '2026-01-24T00:10:50.224097Z'
    description: Batch
    labels:
        goog-dataproc-batch-id: cb9d84e9489d408baca4f9e7ab4c64ff
        goog-dataproc-batch-uuid: 54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9
        goog-dataproc-drz-resource-uuid: batch-54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9
        goog-dataproc-location: us-central1
    operationType: BATCH
    name: projects/your-project/regions/us-central1/operations/32287926-5f61-3572-b54a-fbad8940d6ef
    

Consultar a tabela no BigQuery

  1. No Google Cloud console, acesse o BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, insira a instrução a seguir. A consulta usa a sintaxe project.catalog.namespace.table.

    SELECT * FROM `PROJECT_ID.LAKEHOUSE_CATALOG_ID.quickstart_namespace.quickstart_table`;
    

    Substitua:

    • PROJECT_ID: o Google Cloud ID do projeto.

    • LAKEHOUSE_CATALOG_ID: o identificador do catálogo a ser usado nas consultas do BigQuery.

  3. Clique em Executar.

    Os resultados da consulta mostram os dados que você inseriu com o job do PySpark.

Limpar

Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, siga as etapas abaixo.

  1. Atualize quickstart.py para excluir o namespace (conjunto de dados) e a tabela:

    from pyspark.sql import SparkSession
    
    spark = SparkSession.builder.appName("quickstart").getOrCreate()
    
    # Delete the table first, then the namespace (dataset)
    spark.sql("DROP TABLE `quickstart_catalog`.quickstart_namespace.quickstart_table")
    spark.sql("DROP NAMESPACE `quickstart_catalog`.quickstart_namespace")
    

    Faça upload para o bucket do Cloud Storage:

    1. No Google Cloud console, acesse Buckets do Cloud Storage.

      Acessar buckets

    2. Clique no nome do bucket.

    3. Na guia Objetos, clique em Fazer upload > Fazer upload de arquivos.

    4. No navegador de arquivos, selecione o arquivo quickstart.py e clique em Abrir.

    No Cloud Shell, execute outro job em lote do Serviço Gerenciado para Apache Spark usando o script quickstart.py atualizado.

    gcloud dataproc batches submit pyspark gs://BUCKET_NAME/quickstart.py \
        --project=PROJECT_ID \
        --region=REGION \
        --version=2.2 \
        --properties="\
    spark.sql.defaultCatalog=quickstart_catalog,\
    spark.sql.catalog.quickstart_catalog=org.apache.iceberg.spark.SparkCatalog,\
    spark.sql.catalog.quickstart_catalog.type=rest,\
    spark.sql.catalog.quickstart_catalog.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\
    spark.sql.catalog.quickstart_catalog.warehouse=bl://projects/PROJECT_ID/catalogs/LAKEHOUSE_CATALOG_ID,\
    spark.sql.catalog.quickstart_catalog.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO,\
    spark.sql.catalog.quickstart_catalog.header.x-goog-user-project=PROJECT_ID,\
    spark.sql.catalog.quickstart_catalog.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\
    spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,\
    spark.sql.catalog.quickstart_catalog.header.X-Iceberg-Access-Delegation=vended-credentials,\
    spark.sql.catalog.quickstart_catalog.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token"

    Substitua:

    • BUCKET_NAME: o nome do bucket do Cloud Storage que contém o arquivo do aplicativo PySpark.

    • LAKEHOUSE_CATALOG_ID: o nome do catálogo do BigLake.

    • PROJECT_ID: o ID do Google Cloud projeto.

    • REGION: a região em que a carga de trabalho em lote do Serviço Gerenciado para Apache Spark será executada.

  2. Acesse Lakehouse.

    Acessar o Lakehouse

  3. Selecione o catálogo LAKEHOUSE_CATALOG_ID e clique em Excluir.

  4. Acesse Buckets do Cloud Storage.

    Acessar buckets

  5. Selecione seu bucket e clique em Excluir.

A seguir