Criar uma tabela Apache Iceberg com metadados no Metastore do BigQuery

Neste documento, mostramos como executar cargas de trabalho em lote do Dataproc Serverless para Spark SQL e PySpark para criar uma tabela do Apache Iceberg com metadados armazenados no BigQuery Metastore. Para informações sobre outras maneiras de executar o código do Spark, consulte Executar código do PySpark em um notebook do BigQuery e Executar uma carga de trabalho do Apache Spark.

Antes de começar

Se ainda não tiver feito isso, crie um projeto do Google Cloud e um bucket do Cloud Storage.

  1. Configurar o projeto

    1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
    2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

      Go to project selector

    3. Enable the Dataproc, BigQuery, and Cloud Storage APIs.

      Enable the APIs

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

      Go to project selector

    5. Enable the Dataproc, BigQuery, and Cloud Storage APIs.

      Enable the APIs

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

    1. In the Google Cloud console, go to the Cloud Storage Buckets page.

      Go to Buckets page

    2. Click Create bucket.
    3. On the Create a bucket page, enter your bucket information. To go to the next step, click Continue.
      • For Name your bucket, enter a name that meets the bucket naming requirements.
      • For Choose where to store your data, do the following:
        • Select a Location type option.
        • Select a Location option.
      • For Choose a default storage class for your data, select a storage class.
      • For Choose how to control access to objects, select an Access control option.
      • For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
    4. Click Create.

  3. Conceda o papel de Editor de dados do BigQuery (roles/bigquery.dataEditor) à conta de serviço padrão do Compute Engine, PROJECT_NUMBER-compute@developer.gserviceaccount.com. Para mais instruções, consulte Conceder um único papel.

    Exemplo da Google Cloud CLI:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member PROJECT_NUMBER-compute@developer.gserviceaccount.com \
    --role roles/bigquery.dataEditor
    

    Observações:

    • PROJECT_ID e PROJECT_NUMBER estão listados na seção Informações do projeto no Painel do console do Google Cloud.
  4. Verifique se a sub-rede VPC regional em que você vai executar a carga de trabalho em lote do Dataproc Serverless tem o Acesso particular do Google ativado. Para mais informações, consulte Criar uma tabela Iceberg.

Mapeamento de recursos do OSS para recursos do BigQuery

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

Recurso OSS Recurso do BigQuery
Namespace, Database Conjunto de dados
Tabela particionada ou não particionada Tabela
Ver Ver

Criar uma tabela Iceberg

Esta seção mostra como criar uma tabela Iceberg com metadados no metastore do BigQuery usando cargas de trabalho em lote do Dataproc Serverless Spark SQL e do PySpark.

Spark SQL

Executar uma carga de trabalho do Spark SQL para criar uma tabela Iceberg

As etapas a seguir mostram como executar uma carga de trabalho em lote do Dataproc Serverless Spark SQL para criar uma tabela Iceberg com metadados armazenados no metastore do BigQuery.

  1. Copie os comandos do Spark SQL a seguir localmente ou no Cloud Shell em um arquivo iceberg-table.sql.

    USE CATALOG_NAME;
    CREATE NAMESPACE IF NOT EXISTS 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 e pasta do Cloud Storage usados como diretório do repositório do Iceberg.
  2. Execute o comando a seguir localmente ou no Cloud Shell no diretório que contém iceberg-table.sql para enviar a carga de trabalho do Spark SQL.

    gcloud dataproc batches submit spark-sql iceberg-table.sql \
        --project=PROJECT_ID \
        --region=REGION \
        --deps-bucket=BUCKET_NAME \
        --version=2.2 \
        --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
        --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"
      

    Observações:

    • PROJECT_ID: o ID do projeto do Google Cloud . Os IDs dos projetos estão listados na seção Informações do projeto no Painel do console do Google Cloud.
    • REGION: uma região do Compute Engine disponível para executar a carga de trabalho.
    • BUCKET_NAME: o nome do bucket do Cloud Storage. O Spark faz upload das dependências de carga de trabalho para uma pasta /dependencies neste bucket antes de executar a carga de trabalho em lote. O WAREHOUSE_FOLDER está localizado neste bucket.
    • SUBNET_NAME: o nome de uma sub-rede da VPC no REGION que tem o Acesso privado do Google ativado e atende a outros requisitos de sub-rede de sessão.
    • LOCATION: um local do BigQuery compatível. O local padrão é "EUA".
    • --version:ambiente de execução do Dataproc sem servidor versão 2.2 ou mais recente.
    • --properties Propriedades do catálogo.
  3. Conferir metadados de tabela no BigQuery

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

      Acessar o BigQuery Studio

    2. Acessar metadados da tabela Iceberg.

PySpark

As etapas a seguir mostram como executar uma carga de trabalho de lote do PySpark sem servidor do Dataproc para criar uma tabela Iceberg com metadados armazenados no Metastore do BigQuery.

  1. Copie o seguinte código PySpark localmente ou no Cloud Shell para um arquivo iceberg-table.py.
    catalog = "CATALOG_NAME"
    namespace = "NAMESPACE"
    
    spark.sql(f"USE `{catalog}`;")
    spark.sql(f"CREATE NAMESPACE IF NOT EXISTS `{namespace}`;")
    spark.sql(f"USE `{namespace}`;")
    
    # Create table and display schema
    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);")
    spark.sql("DESCRIBE example_iceberg_table;")

    Substitua:

    • CATALOG_NAME e NAMESPACE: o nome do catálogo e o namespace do Iceberg se combinam para identificar a tabela Iceberg (catalog.namespace.table_name).
  2. Execute o comando a seguir localmente ou no Cloud Shell no diretório que contém iceberg-table.py para enviar a carga de trabalho do PySpark.
    gcloud dataproc batches submit pyspark iceberg-table.py \
        --project=PROJECT_ID \
        --region=REGION \
        --deps-bucket=BUCKET_NAME \
        --version=2.2 \
        --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
        --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"
        

    Observações:

    • PROJECT_ID: o ID do projeto do Google Cloud . Os IDs dos projetos estão listados na seção Informações do projeto no Painel do console do Google Cloud.
    • REGION: uma região do Compute Engine disponível para executar a carga de trabalho.
    • BUCKET_NAME: o nome do bucket do Cloud Storage. O Spark faz upload das dependências de carga de trabalho para uma pasta /dependencies neste bucket antes de executar a carga de trabalho em lote.
    • SUBNET_NAME: o nome de uma sub-rede da VPC no REGION que tem o Acesso privado do Google ativado e atende a outros requisitos de sub-rede de sessão.
    • --version:ambiente de execução do Dataproc sem servidor versão 2.2 ou mais recente.
    • LOCATION: um local do BigQuery com suporte. O local padrão é "EUA".
    • BUCKET e WAREHOUSE_FOLDER: bucket e pasta do Cloud Storage usados como o diretório do repositório do Iceberg.
    • --properties: Propriedades do catálogo.
  3. Confira o esquema da tabela no BigQuery.
    1. No Console do Google Cloud, acesse a página BigQuery. Acessar o BigQuery Studio
    2. Acessar metadados da tabela Iceberg.