Criar uma tabela do Apache Iceberg com metadados no catálogo de tempo de execução do Lakehouse

Este documento mostra como criar uma tabela do Apache Iceberg com metadados no catálogo do ambiente de execução do Lakehouse usando o serviço Serviço Gerenciado para Apache Spark Jobs, a CLI do Spark SQL ou a interface da Web Zeppelin executada em um cluster do Serviço Gerenciado para Apache Spark.

Antes de começar

Se ainda não tiver feito isso, crie um Google Cloud projeto, um bucket do Cloud Storage e um cluster do Serviço Gerenciado para Apache Spark.

  1. Criar seu projeto

    1. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloudagora, 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 Dataproc, BigQuery, and Cloud Storage APIs, if any are not already enabled.

      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. Install the Google Cloud CLI.

    6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    7. To initialize the gcloud CLI, run the following command:

      gcloud init
    8. 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

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

    10. Enable the Dataproc, BigQuery, and Cloud Storage APIs, if any are not already enabled.

      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

    11. Install the Google Cloud CLI.

    12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    13. To initialize the gcloud CLI, run the following command:

      gcloud init

  2. Crie um bucket do Cloud Storage no seu projeto.

    1. No console do Google Cloud , acesse a página Buckets do Cloud Storage.

      Acessar buckets

    2. Clique em Criar.
    3. Na página Criar um bucket, insira as informações do seu bucket. Para ir à próxima etapa, clique em Continuar.
      1. Na seção Começar, faça o seguinte:
      2. Na seção Escolha onde armazenar seus dados, faça o seguinte:
        1. Selecione um tipo de local.
        2. Escolha um local onde os dados do bucket serão armazenados permanentemente no menu suspenso Tipo de local.
        3. Para configurar a replicação entre buckets, selecione Adicionar replicação entre buckets usando o Serviço de transferência do Cloud Storage e siga estas etapas:

          Configurar a replicação entre buckets

          1. No menu Bucket, selecione um bucket.
          2. Na seção Configurações de replicação, clique em Configurar para definir as configurações do job de replicação.

            O painel Configurar a replicação entre buckets aparece.

            • Para filtrar objetos a serem replicados por prefixo de nome de objeto, insira um prefixo com que você quer incluir ou excluir objetos e clique em Adicionar um prefixo.
            • Para definir uma classe de armazenamento para os objetos replicados, selecione uma classe de armazenamento no menu Classe de armazenamento. Se você pular esta etapa, os objetos replicados vão usar a classe de armazenamento do bucket de destino por padrão.
            • Clique em Concluído.
      3. Na seção Escolha como armazenar seus dados, faça o seguinte:
        1. Selecione uma classe de armazenamento padrão para o bucket ou Classe automática para gerenciamento automático da classe de armazenamento dos dados do bucket.
        2. Para ativar o namespace hierárquico, na seção Otimizar o armazenamento para cargas de trabalho com uso intensivo de dados, selecione Ativar namespace hierárquico neste bucket.
      4. Na seção Escolha como controlar o acesso a objetos, selecione se o bucket aplica ou não a prevenção de acesso público e selecione um método de controle de acesso para os objetos do bucket.
      5. Na seção Escolha como proteger os dados do objeto, faça o seguinte:
        • Selecione qualquer uma das opções em Proteção de dados que você quer definir para o bucket.
          • Para ativar a exclusão reversível, clique na caixa de seleção Política de exclusão reversível (para recuperação de dados) e especifique o número de dias que você quer reter os objetos após a exclusão.
          • Para definir o Controle de versões do objeto, clique na caixa de seleção Controle de versões do objeto (para controle de versões) e especifique o número máximo de versões por objeto e o número de dias após os quais as versões não atuais expiram.
          • Para ativar a política de retenção em objetos e buckets, clique na caixa de seleção Retenção (para compliance) e faça o seguinte:
            • Para ativar o bloqueio de retenção de objetos, clique na caixa de seleção Ativar retenção de objetos.
            • Para ativar o Bloqueio de bucket, clique na caixa de seleção Definir política de retenção de bucket e escolha uma unidade e um período de armazenamento para a retenção.
        • Para escolher como os dados do objeto serão criptografados, expanda a seção Criptografia de dados () e selecione um método de Criptografia de dados.
    4. Clique em Criar.

  3. Crie um cluster do Serviço Gerenciado para Apache Spark. Para economizar recursos e custos, você pode criar um cluster de nó único do Serviço Gerenciado para Apache Spark e executar os exemplos apresentados neste documento.

    • A sub-rede na região em que o cluster é criado precisa ter o Acesso privado do Google (PGA) ativado.

      .

    • Se quiser executar o exemplo da interface da Web do Zeppelin neste guia, use ou crie um cluster do Serviço Gerenciado para Apache Spark com o componente opcional do Zeppelin ativado.

  4. Conceda papéis a uma conta de serviço personalizada (se necessário): por padrão, as VMs de cluster do Serviço Gerenciado para Apache Spark usam a conta de serviço padrão do Compute Engine para interagir com o Serviço Gerenciado para Apache Spark. Se você quiser especificar uma conta de serviço personalizada ao criar o cluster, ela precisa ter o papel Worker do Serviço Gerenciado para Apache Spark (roles/dataproc.worker) ou um papel personalizado com as permissões necessárias de worker.

Mapeamento de banco de dados OSS para conjunto de dados do BigQuery

Confira o seguinte mapeamento entre os termos de banco de dados de código aberto e conjunto de dados do BigQuery:

Banco de dados de OSS Conjunto de dados do BigQuery
Namespace, banco de dados Conjunto de dados
Tabela particionada ou não particionada Tabela
Ver Ver

Criar uma tabela do Iceberg

Nesta seção, mostramos como criar uma tabela do Iceberg com metadados no catálogo do ambiente de execução do Lakehouse enviando um código do Spark SQL para o Serviço Gerenciado para Apache Spark, a CLI do Spark SQL e a interface da Web do componente Zeppelin, que são executados em um cluster do Serviço Gerenciado para Apache Spark.

Job do Serviço Gerenciado para Apache Spark

É possível enviar um job ao Serviço Gerenciado para Apache Spark enviando o job a um cluster do Serviço Gerenciado para Apache Spark usando o consoleGoogle Cloud ou a Google Cloud CLI, ou por uma solicitação HTTP REST ou uma chamada programática gRPC do Serviço Gerenciado para Apache Spark bibliotecas de cliente do Cloud para a API Jobs.

Os exemplos nesta seção mostram como enviar um job do Spark SQL do Serviço Gerenciado para Apache Spark ao serviço do Serviço Gerenciado para Apache Spark para criar uma tabela do Iceberg com metadados no BigQuery usando a CLI gcloud, Google Cloud o console ou a API REST.

Preparar arquivos de job

Siga estas etapas para criar um arquivo de job do Spark SQL. O arquivo contém comandos do Spark SQL para criar e atualizar uma tabela Iceberg.

  1. Em uma janela de terminal local ou no Cloud Shell, use um editor de texto, como o vi ou o nano, para copiar os comandos a seguir em um arquivo iceberg-table.sql e salve o arquivo no diretório atual.

    USE CATALOG_NAME;
    CREATE NAMESPACE IF NOT EXISTS example_namespace;
    USE example_namespace;
    DROP TABLE IF EXISTS example_table;
    CREATE TABLE example_table (id int, data string) USING ICEBERG LOCATION 'gs://BUCKET/WAREHOUSE_FOLDER';
    INSERT INTO example_table VALUES (1, 'first row');
    ALTER TABLE example_table ADD COLUMNS (newDoubleCol double);
    DESCRIBE TABLE example_table;
    

    Substitua:

    • CATALOG_NAME: nome do catálogo do Iceberg.
    • BUCKET e WAREHOUSE_FOLDER: bucket do Cloud Storage e pasta usados para o data warehouse do Iceberg.
  2. Use a CLI gcloud para copiar o iceberg-table.sql local para seu bucket no Cloud Storage.

    gcloud storage cp iceberg-table.sql gs://BUCKET/
    

Em seguida, faça o download e copie o arquivo JAR iceberg-spark-runtime-3.5_2.12-1.6.1 para o Cloud Storage.

  1. Em uma janela de terminal local ou no Cloud Shell, execute o seguinte comando curl para fazer o download do arquivo JAR iceberg-spark-runtime-3.5_2.12-1.6.1 no diretório atual.

    curl -o iceberg-spark-runtime-3.5_2.12-1.6.1.jar https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar
    
  2. Usa a gcloud CLI para copiar o arquivo JAR iceberg-spark-runtime-3.5_2.12-1.6.1 local do diretório atual para o bucket no Cloud Storage.

    gcloud storage cp iceberg-spark-runtime-3.5_2.12-1.6.1.jar gs://BUCKET/
    

Enviar o job do Spark SQL

Selecione uma guia para seguir as instruções de envio do job do Spark SQL ao Serviço Gerenciado para Apache Spark usando a CLI gcloud, o consoleGoogle Cloud ou a API REST do Serviço Gerenciado para Apache Spark.

gcloud

  1. Execute o comando gcloud dataproc jobs submit spark-sql localmente em uma janela de terminal local ou no Cloud Shell para enviar o job do Spark SQL e criar a tabela do Iceberg.

    gcloud dataproc jobs submit spark-sql \
        --project=PROJECT_ID \
        --cluster=CLUSTER_NAME \
        --region=REGION \
        --jars="gs://BUCKET/1.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR" \
        --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog,spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID,spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION,spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/WAREHOUSE_FOLDER" \
        -f="gs://BUCKETiceberg-table.sql"
    

    Observações:

    • PROJECT_ID: o ID do projeto do Google Cloud . Os IDs do projeto estão listados na seção Informações do projeto no Google Cloud painel do console.
    • CLUSTER_NAME: o nome do cluster do Serviço Gerenciado para Apache Spark.
    • REGION: a região do Compute Engine em que o cluster está localizado.
    • BIGLAKE_ICEBERG_CATALOG_JAR: o URI do Cloud Storage do plug-in do catálogo personalizado do Iceberg a ser usado. Dependendo do número da versão do Iceberg, selecione uma das seguintes opções:
      • Iceberg 1.9.1: gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar
      • Iceberg 1.6.1: gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
    • CATALOG_NAME: nome do catálogo do Iceberg.
    • BUCKET e WAREHOUSE_FOLDER: bucket do Cloud Storage e pasta usados para o data warehouse do Iceberg.
    • LOCATION: um local do BigQuery compatível. O local padrão é "US".
    • --jars: os jars listados são necessários para criar metadados de tabela no catálogo do ambiente de execução do Lakehouse.
    • --properties: Propriedades do catálogo.
    • -f: o arquivo de job iceberg-table.sql que você copiou para o bucket no Cloud Storage.
  2. Confira a descrição da tabela na saída do terminal quando o job terminar.

    Time taken: 2.194 seconds
    id                      int
    data                    string
    newDoubleCol            double
    Time taken: 1.479 seconds, Fetched 3 row(s)
    Job JOB_ID finished successfully.
    
  3. Para ver os metadados da tabela no BigQuery

    1. No console do Google Cloud , acesse a página BigQuery.

      Acessar o BigQuery Studio

    2. Ver metadados da tabela do Iceberg.

Console

Siga estas etapas para usar o console Google Cloud e enviar o job do Spark SQL ao Serviço Gerenciado para Apache Spark e criar uma tabela do Iceberg com metadados no catálogo do ambiente de execução do Lakehouse.

  1. No console Google Cloud , acesse o Serviço Gerenciado para Apache Spark Enviar um job.

    Acesse a página Enviar um job e preencha os seguintes campos:

    • código da tarefa: aceite o ID sugerido ou insira o seu.
    • Região: selecione a região em que o cluster está localizado.
    • Cluster: selecione seu cluster.
    • Tipo de serviço: selecione SparkSql.
    • Tipo de origem da consulta: selecione Query file.
    • Arquivo de consulta: inserir gs://BUCKET/iceberg-table.sql
    • Arquivos JAR: insira o seguinte:
      gs://BUCKET/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR
      
    • BIGLAKE_ICEBERG_CATALOG_JAR: o URI do Cloud Storage do plug-in de catálogo personalizado do Iceberg a ser usado. Dependendo do número da versão do Iceberg, selecione uma das opções a seguir:
      • Iceberg 1.9.1: gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar
      • Iceberg 1.6.1: gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
    • Propriedades: clique em Adicionar propriedade cinco vezes para criar uma lista de cinco campos de entrada key value. Depois, copie os seguintes pares Chave e Valor para definir cinco propriedades.
      # Chave Valor
      1.
      spark.sql.catalog.CATALOG_NAME
      
      org.apache.iceberg.spark.SparkCatalog
      
      2.
      spark.sql.catalog.CATALOG_NAME.catalog-impl
      
      org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog
      
      3.
      spark.sql.catalog.CATALOG_NAME.gcp_project
      
      PROJECT_ID
      
      4.
      spark.sql.catalog.CATALOG_NAME.gcp_location
      
      LOCATION
      
      5.
      spark.sql.catalog.CATALOG_NAME.warehouse
      
      gs://BUCKET/WAREHOUSE_FOLDER
      

    Observações:

    • CATALOG_NAME: nome do catálogo do Iceberg.
    • PROJECT_ID: o ID do projeto do Google Cloud . Os IDs do projeto estão listados na seção Informações do projeto no painel do console Google Cloud . região em que o cluster está localizado.
    • LOCATION: um local do BigQuery compatível. O local padrão é "US".
    • BUCKET e WAREHOUSE_FOLDER: bucket do Cloud Storage e pasta usados para o data warehouse do Iceberg.
  2. Clique em Enviar.

  3. Para monitorar o progresso do job e ver a saída dele, acesse a página Jobs do Serviço Gerenciado para Apache Spark no console Google Cloud e clique em Job ID para abrir a página Detalhes do job.

  4. Para ver os metadados da tabela no BigQuery

    1. No console do Google Cloud , acesse a página BigQuery.

      Acessar o BigQuery Studio

    2. Ver metadados da tabela do Iceberg.

REST

Use a API jobs.submit do Serviço Gerenciado para Apache Spark para enviar o job do Spark SQL ao Serviço Gerenciado para Apache Spark e criar uma tabela do Iceberg com metadados no catálogo do ambiente de execução do Lakehouse.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto do Google Cloud . Os IDs do projeto estão listados na seção Informações do projeto no painel do console do Google Cloud .
  • CLUSTER_NAME: o nome do cluster do Serviço Gerenciado para Apache Spark.
  • REGION: a região do Compute Engine em que o cluster está localizado.
  • CATALOG_NAME: nome do catálogo do Iceberg.
  • BUCKET e WAREHOUSE_FOLDER: bucket do Cloud Storage e pasta usados para o data warehouse do Iceberg.
  • LOCATION: um local do BigQuery compatível. O local padrão é "US".
  • BIGLAKE_ICEBERG_CATALOG_JAR: o URI do Cloud Storage do plug-in do catálogo personalizado do Iceberg a ser usado. Dependendo do número da versão do Iceberg, selecione uma das seguintes opções:
    • Iceberg 1.9.1: gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar
    • Iceberg 1.6.1: gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
  • jarFileUris: os jars listados são necessários para criar metadados de tabela no Metastore do BigQuery.
  • properties: Propriedades do catálogo.
  • queryFileUri: o arquivo de job iceberg-table.sql que você copiou para o bucket no Cloud Storage.

Método HTTP e URL:

POST https://dataproc.googleapis.com/v1/projects/PROJECT_ID/regions/REGION/jobs:submit

Corpo JSON da solicitação:

{
  "projectId": "PROJECT_ID",
  "job": {
    "placement": {
      "clusterName": "CLUSTER_NAME"
    },
    "statusHistory": [],
    "reference": {
      "jobId": "",
      "projectId": "PROJECT_ID"
    },
    "sparkSqlJob": {
      "properties": {
        "spark.sql.catalog."CATALOG_NAME": "org.apache.iceberg.spark.SparkCatalog",
        "spark.sql.catalog."CATALOG_NAME".catalog-impl": "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog",
        "spark.sql.catalog."CATALOG_NAME".gcp_project": "PROJECT_ID",
        "spark.sql.catalog."CATALOG_NAME".gcp_location": "LOCATION",
        "spark.sql.catalog."CATALOG_NAME".warehouse": "gs://BUCKET/WAREHOUSE_FOLDER"
      },
      "jarFileUris": [
        "gs://BUCKET/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR"
      ],
      "scriptVariables": {},
      "queryFileUri": "gs://BUCKET/iceberg-table.sql"
    }
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "reference": {
    "projectId": "PROJECT_ID",
    "jobId": "..."
  },
  "placement": {
    "clusterName": "CLUSTER_NAME",
    "clusterUuid": "..."
  },
  "status": {
    "state": "PENDING",
    "stateStartTime": "..."
  },
  "submittedBy": "USER",
  "sparkSqlJob": {
    "queryFileUri": "gs://BUCKET/iceberg-table.sql",
    "properties": {
      "spark.sql.catalog.USER_catalog": "org.apache.iceberg.spark.SparkCatalog",
      "spark.sql.catalog.USER_catalog.catalog-impl": "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog",
      "spark.sql.catalog.USER_catalog.gcp_project": "PROJECT_ID",
      "spark.sql.catalog.USER_catalog.gcp_location": "LOCATION",
      "spark.sql.catalog.USER_catalog.warehouse": "gs://BUCKET/WAREHOUSE_FOLDER"
    },
    "jarFileUris": [
      "gs://BUCKET/iceberg-spark-runtime-3.5_2.12-1.6.1.jar",
      "BIGLAKE_ICEBERG_CATALOG_JAR"
    ]
  },
  "driverControlFilesUri": "gs://dataproc-...",
  "driverOutputResourceUri": "gs://dataproc-.../driveroutput",
  "jobUuid": "...",
  "region": "REGION"
}

Para monitorar o progresso do job e ver a saída dele, acesse a página Jobs do Serviço Gerenciado para Apache Spark no console Google Cloud e clique em Job ID para abrir a página Detalhes do job.

Para ver os metadados da tabela no BigQuery

  1. No console do Google Cloud , acesse a página BigQuery.

    Acessar o BigQuery Studio

  2. Ver metadados da tabela do Iceberg.

CLI do Spark SQL

As etapas a seguir mostram como criar uma tabela do Iceberg com metadados armazenados no catálogo do ambiente de execução do Lakehouse usando a CLI do Spark SQL em execução no nó principal de um cluster do Serviço Gerenciado para Apache Spark.

  1. Use o SSH para se conectar ao nó mestre do cluster do Serviço Gerenciado para Apache Spark.

  2. No terminal da sessão SSH, use o editor de texto vi ou nano para copiar os comandos a seguir em um arquivo iceberg-table.sql.

    SET CATALOG_NAME = `CATALOG_NAME`;
    SET BUCKET = `BUCKET`;
    SET WAREHOUSE_FOLDER = `WAREHOUSE_FOLDER`;
    USE `${CATALOG_NAME}`;
    CREATE NAMESPACE IF NOT EXISTS `${CATALOG_NAME}`.example_namespace;
    DROP TABLE IF EXISTS `${CATALOG_NAME}`.example_namespace.example_table;
    CREATE TABLE `${CATALOG_NAME}`.example_namespace.example_table (id int, data string) USING ICEBERG LOCATION 'gs://${BUCKET}/${WAREHOUSE_FOLDER}';
    INSERT INTO `${CATALOG_NAME}`.example_namespace.example_table VALUES (1, 'first row');
    ALTER TABLE `${CATALOG_NAME}`.example_namespace.example_table ADD COLUMNS (newDoubleCol double);
    DESCRIBE TABLE `${CATALOG_NAME}`.example_namespace.example_table;
    

    Substitua:

    • CATALOG_NAME: nome do catálogo do Iceberg.
    • BUCKET e WAREHOUSE_FOLDER: bucket do Cloud Storage e pasta usados para o data warehouse do Iceberg.
  3. No terminal da sessão SSH, execute o seguinte comando spark-sql para criar a tabela iceberg.

    spark-sql \
    --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.6.1 \
    --jars https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR \
    --conf spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog \
    --conf spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog \
    --conf spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID \
    --conf spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION \
    --conf spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/WAREHOUSE_FOLDER \
    -f iceberg-table.sql
    

    Substitua:

    • BIGLAKE_ICEBERG_CATALOG_JAR: o URI do Cloud Storage do plug-in do catálogo personalizado do Iceberg a ser usado. Dependendo do número da versão do Iceberg, selecione uma das seguintes opções:
      • Iceberg 1.9.1: gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar
      • Iceberg 1.6.1: gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
    • PROJECT_ID: o ID do projeto do Google Cloud . Os IDs do projeto estão listados na seção Informações do projeto no Google Cloud painel do console.
    • LOCATION: um local do BigQuery compatível. O local padrão é "US".
  4. Ver metadados da tabela no BigQuery

    1. No console do Google Cloud , acesse a página BigQuery.

      Acessar o BigQuery Studio

    2. Ver metadados da tabela do Iceberg.

Interface da Web do Zeppelin

As etapas a seguir mostram como criar uma tabela do Iceberg com metadados armazenados no catálogo do ambiente de execução do Lakehouse usando a interface da Web do Zeppelin em execução no nó principal de um cluster do Serviço Gerenciado para Apache Spark .

  1. No console do Google Cloud , acesse a página Clusters do Serviço Gerenciado para Apache Spark.

    Acessar a página "Clusters do Serviço Gerenciado para Apache Spark"

  2. Selecione o nome do cluster para abrir a página Detalhes do cluster.

  3. Clique na guia Interfaces da Web para mostrar uma lista de links do Gateway de componentes para as interfaces da Web de componentes padrão e opcionais instalados no cluster.

  4. Clique no link Zeppelin para abrir a interface da Web do Zeppelin.

  5. Na interface da Web do Zeppelin, clique no menu anonymous e em Interpreter para abrir a página Interpreters.

  6. Adicione dois JARs ao interpretador do Zeppelin Spark da seguinte forma:

    1. Digite "Spark" na caixa Search interpreters para rolar até a seção do intérprete Spark.
    2. Clique em edit.
    3. Cole o seguinte no campo spark.jars:

      https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR

    4. Adicione a seguinte observação:

      • BIGLAKE_ICEBERG_CATALOG_JAR: o URI do Cloud Storage do plug-in do catálogo personalizado do Iceberg a ser usado. Dependendo do número da versão do Iceberg, selecione uma das seguintes opções:
      • Iceberg 1.9.1: gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar
      • Iceberg 1.6.1: gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
    5. Clique em Salvar na parte de baixo da seção "Interpretador do Spark" e em OK para atualizar o interpretador e reiniciar o interpretador do Spark com as novas configurações.

  7. No menu do notebook Zeppelin, clique em Criar nova nota.

  8. Na caixa de diálogo Criar nova nota, insira um nome para o notebook e aceite o interpretador spark padrão. Clique em Criar para abrir o notebook.

  9. Copie o seguinte código PySpark no seu notebook do Zeppelin depois de preencher as variáveis.

    %pyspark
    from pyspark.sql import SparkSession
    project_id = "PROJECT_ID" catalog = "CATALOG_NAME" namespace = "NAMESPACE" location = "LOCATION" warehouse_dir = "gs://BUCKET/WAREHOUSE_DIRECTORY"
    spark = SparkSession.builder \ .appName("BigQuery Metastore Iceberg") \ .config(f"spark.sql.catalog.{catalog}", "org.apache.iceberg.spark.SparkCatalog") \ .config(f"spark.sql.catalog.{catalog}.catalog-impl", "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog") \ .config(f"spark.sql.catalog.{catalog}.gcp_project", f"{project_id}") \ .config(f"spark.sql.catalog.{catalog}.gcp_location", f"{location}") \ .config(f"spark.sql.catalog.{catalog}.warehouse", f"{warehouse_dir}") \ .getOrCreate()
    spark.sql(f"USE `{catalog}`;") spark.sql(f"CREATE NAMESPACE IF NOT EXISTS `{namespace}`;") spark.sql(f"USE `{namespace}`;")
    \# Create table and display schema (without LOCATION) spark.sql("DROP TABLE IF EXISTS example_iceberg_table") spark.sql("CREATE TABLE example_iceberg_table (id int, data string) USING ICEBERG") spark.sql("DESCRIBE example_iceberg_table;")
    \# Insert table data. spark.sql("INSERT INTO example_iceberg_table VALUES (1, 'first row');")
    \# Alter table, then display schema. spark.sql("ALTER TABLE example_iceberg_table ADD COLUMNS (newDoubleCol double);")
    \# Select and display the contents of the table. spark.sql("SELECT * FROM example_iceberg_table").show()

    Substitua:

    • PROJECT_ID: o ID do projeto do Google Cloud . Os IDs do projeto estão listados na seção Informações do projeto no Google Cloud painel do console.
    • CATALOG_NAME e NAMESPACE: o nome do catálogo e o namespace do Iceberg se combinam para identificar a tabela do Iceberg (catalog.namespace.table_name).
    • LOCATION: um local do BigQuery compatível. O local padrão é "US".
    • BUCKET e WAREHOUSE_DIRECTORY: bucket do Cloud Storage e pasta usados como diretório do data warehouse do Iceberg.
  10. Clique no ícone de execução ou pressione Shift-Enter para executar o código. Quando o job é concluído, a mensagem de status mostra "Spark Job Finished", e a saída exibe o conteúdo da tabela:

  11. Ver metadados da tabela no BigQuery

    1. No console do Google Cloud , acesse a página BigQuery.

      Acessar o BigQuery Studio

    2. Ver metadados da tabela do Iceberg.