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
- 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Dataproc APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. 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.-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Dataproc APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. 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.
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:
No Google Cloud console, clique em Ativar o Cloud Shell.
Clique em Autorizar.
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"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"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"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.
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.
Conceda permissões no bucket à conta de serviço do catálogo:
No Google Cloud console, acesse Lakehouse.
Clique no nome do catálogo que você acabou de criar (LAKEHOUSE_CATALOG_ID).
Em Método de autenticação, clique em Definir permissões do bucket.
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.
No Google Cloud console, acesse Buckets do Cloud Storage.
Clique no nome do bucket.
Na guia Objetos, clique em Fazer upload > Fazer upload de arquivos.
No navegador de arquivos, selecione o arquivo
quickstart.pye 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.
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
No Google Cloud console, acesse o BigQuery.
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.
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.
Atualize
quickstart.pypara 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:
No Google Cloud console, acesse Buckets do Cloud Storage.
Clique no nome do bucket.
Na guia Objetos, clique em Fazer upload > Fazer upload de arquivos.
No navegador de arquivos, selecione o arquivo
quickstart.pye clique em Abrir.
No Cloud Shell, execute outro job em lote do Serviço Gerenciado para Apache Spark usando o script
quickstart.pyatualizado.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.
Acesse Lakehouse.
Selecione o catálogo
LAKEHOUSE_CATALOG_IDe clique em Excluir.Acesse Buckets do Cloud Storage.
Selecione seu bucket e clique em Excluir.
A seguir
- Saiba como gerenciar catálogos do Lakehouse.
- Saiba mais sobre as tabelas do Apache Iceberg com suporte do catálogo de ambientes de execução do Lakehouse.