Envio de trabalhos do Spark para conversão de MoR para CoW

Aplica-se a: Motor de faísca Motor de faísca acelerado com glúten

Este tópico descreve como executar um trabalho do Spark que ajuda a sincronizar os dados da tabela Iceberg do formato Merge-on-Read ( MoR ) para o formato Copy-on-Write ( CoW ). As operações de leitura são mais eficientes com as tabelas Iceberg Copy-On-Write.

Você pode usar um dos seguintes métodos para a conversão:

  • Registrar tabela COW: Essa abordagem cria uma referência nomeada para a tabela MoR usando a API Iceberg Register_table, que aponta para uma versão consistente compactada da tabela MoR e serve como tabela CoW. Esse método é recomendado e é mais econômico.
  • Captura de dados de alteração(CDC): Essa abordagem mantém duas cópias da tabela. Uma é a tabela MoR, na qual são feitas as atualizações, e a segunda é uma tabela CoW, que funciona como um espelho da tabela MoR. O trabalho do Spark recupera as alterações da tabela MoR entre o último instantâneo sincronizado e o último instantâneo usando o procedimento Iceberg CDC e as mescla na tabela CoW. Essa abordagem é mais cara do que a da tabela de registros, pois mantém uma réplica da tabela MoR.

Sobre essa tarefa

Registro de abordagem da tabela COW

Se você tiver uma tabela Merge-on-Read ( MoR ), poderá especificar os valores de parâmetros necessários e usar o payload de amostra a seguir para executar o trabalho de conversão. O trabalho sincroniza as operações do Iceberg na tabela MoR e gera uma tabela Cow compacta.

{
    "application_details": {
        "application": "/opt/ibm/spark/builtin-apps/iceberg/iceberg-apps.jar",
        "class": "com.ibm.iceberg.apps.RegisterCowTable",
        "arguments": [
            "--catalog","<catalog-name>",
            "--database","<database-name>",
            "--mor-table","<mor-table-name>",
            "--cow-table","<cow-table-name>"
        ],
        "conf": {
            "spark.hadoop.wxd.apikey" : "Basic <encoded-api-key>"
        },
    }
}

Valores de parâmetro:

  • <catalog-name>: O catálogo do Iceberg onde a tabela MoR está disponível.
  • <database-name> o banco de dados em que a tabela MoR está disponível.
  • <mor-table-name> nome da tabela MoR: O nome da tabela.
  • <cow-table-name> o nome da tabela CoW que é sincronizada com a tabela MoR.
  • <encoded-api-key> o valor deve estar no formato echo -n "ibmlhapikey_<user_id>:<user's api key>" | base64. Aqui, <user_id> é a ID IBM Cloud do usuário cuja chave de API é usada para acessar o bucket de dados. A <IAM_APIKEY> aqui é a chave de API do usuário que está acessando o bucket do armazenamento de objetos. Para gerar uma chave de API, faça login no console watsonx.data e navegue até Profile > Profile and Settings > API Keys e gere uma nova chave de API.

Abordagem Change Data Capture (CDC)

Se você tiver uma tabela Merge-on-Read ( MoR ), poderá especificar os valores de parâmetros necessários e usar o payload de amostra a seguir para executar o trabalho de conversão. O trabalho sincroniza as operações do Iceberg na tabela MoR e gera uma tabela Cow compacta.

{
    "application_details": {
        "application": "/opt/ibm/spark/builtin-apps/iceberg/iceberg-apps.jar",
        "class": "com.ibm.iceberg.apps.CDCSync",
        "arguments": [
            "--catalog","<catalog-name>",
            "--database","<database-name>",
            "--mor-table","<mor-table-name>",
            "--cow-table","<cow-table-name>",
            "--primary-key","<primary-key>"
        ],
        "conf": {
            "spark.hadoop.wxd.apikey" : "Basic <encoded-api-key>",
        }
    }
}

Valores de parâmetro:

  • <catalog-name>: O catálogo do Iceberg onde a tabela MoR está disponível.
  • <database-name> o banco de dados em que a tabela MoR está disponível.
  • <mor-table-name> nome da tabela MoR: O nome da tabela.
  • <cow-table-name> o nome da tabela CoW que é sincronizada com a tabela MoR.
  • <primary-key> chave primária: A chave primária que é usada para criar a tabela CoW.
  • <encoded-api-key> o valor deve estar no formato echo -n "ibmlhapikey_<user_id>:<user's api key>" | base64. Aqui, <user_id> é a ID IBM Cloud do usuário cuja chave de API é usada para acessar o bucket de dados. A <IAM_APIKEY> aqui é a chave de API do usuário que está acessando o bucket do armazenamento de objetos. Para gerar uma chave de API, faça login no console watsonx.data e navegue até Profile > Profile and Settings > API Keys e gere uma nova chave de API.