Ir para o conteúdo

Realizar um upsert em massa para um banco de dados no Jitterbit Studio

Introdução

Uma atividade Upsert de banco de dados escreve registros em um banco de dados inserindo novos e atualizando existentes em uma única passagem, com base em um ou mais campos-chave que você especifica. Como a operação lida com ambos os casos simultaneamente, ela pode ser executada repetidamente contra o mesmo conjunto de dados sem criar duplicatas, o que a torna a escolha certa tanto para migrações iniciais de dados quanto para operações de sincronização contínua.

Se você só precisa inserir novos registros, use uma atividade Database Insert em seu lugar. Se você só precisa atualizar registros existentes, use uma atividade Database Update.

Para conjuntos de dados grandes, o Studio oferece suporte a chunking: cada bloco de registros é confirmado no banco de dados conforme fica disponível em vez de aguardar o processamento de todos os registros. Isso reduz o uso de memória e pode melhorar significativamente a taxa de transferência. O chunking é abordado na Parte 3.

Este guia presume que uma conexão de banco de dados já esteja configurada no projeto.

Padrão de design

A atividade Upsert segue o padrão de transformação:

%%{init: {"themeVariables": {"lineColor": "#6b7280", "edgeLabelBackground": "#f5f5f5"}}}%% flowchart LR A[Atividade de origem] --> B[Transformação] --> C[Atividade Database Upsert]

Parte 1: Configurar a atividade Database Upsert

Etapa 1: Nomeie a atividade e selecione uma tabela

  1. Na tela de design, arraste um tipo de atividade Upsert de uma conexão de banco de dados existente para a tela.

  2. Clique duas vezes na atividade para abrir sua configuração.

  3. Name: Digite um nome descritivo, como Upsert Contacts.

  4. Clique no ícone de atualização para carregar as tabelas disponíveis. Para bancos de dados com um grande número de tabelas, use o menu suspenso View para filtrar por tipo ou digite um termo de pesquisa na caixa Search antes de atualizar.

  5. Na lista Provide the table names reference, clique na tabela de destino para selecioná-la. A tabela selecionada aparece no painel à direita.

  6. Allow truncation of character fields to avoid field length errors: Deixe esta caixa de seleção desmarcada se você deseja que incompatibilidades de comprimento de campo apareçam como erros. Se estiver desmarcada e dados superdimensionados chegarem, a operação retorna um status de Error. Se estiver marcada, a operação retorna Success with Info e o log de operações registra que um ou mais valores foram truncados.

  7. Include the schema/owner in the table names: Marque esta caixa de seleção se o mesmo nome de tabela existir em mais de um schema, para que o Studio possa distinguir entre eles.

  8. Clique em Next.

Etapa 2: Selecione as chaves de upsert

  1. No painel Select keys, marque a caixa de seleção para cada campo que identifica exclusivamente um registro existente.

    Dica

    Use uma chave de negócio natural (por exemplo, um campo de email ou external_id atribuído pelo sistema de origem) em vez de uma chave primária gerada pelo banco de dados. Uma chave gerada não é conhecida até após a primeira inserção, portanto não pode ser usada para corresponder registros em execuções subsequentes.

    Os campos selecionados aparecem no painel à direita como as chaves de upsert ativas.

  2. Clique em Next.

Etapa 3: Revise o esquema de dados

  1. Revise o esquema de dados de destino. Este esquema é usado na transformação na Parte 2.

  2. Clique em Finished.

Parte 2: Mapear a transformação

  1. Na tela de design, adicione uma etapa de Transformation entre a atividade de origem e a atividade Upsert de banco de dados.

  2. Abra a transformação. O esquema de origem aparece à esquerda e o esquema de destino do Upsert aparece à direita.

  3. Quando o esquema de destino é espelhado diretamente de uma única atividade Upsert, o destino inclui um nó row diretamente sob a raiz. O Studio trata automaticamente este nó como um nó de loop para que cada registro na origem produza uma linha de upsert no banco de dados.

  4. Mapeie os campos de origem para os campos de destino correspondentes sob o nó row.

    Nota

    Para destinos multi-tabela (unidos), os valores dos campos unidos de uma tabela filha usam como padrão os valores de campo da tabela pai correspondente. Os campos unidos da tabela filha não podem ser mapeados diretamente na transformação.

Para um passo a passo completo do mapeamento de transformação, consulte Visão geral do mapeamento de transformação.

Parte 3: Melhorar o desempenho para grandes conjuntos de dados

Por padrão, o Studio acumula todos os registros processados e os escreve no banco de dados em uma única operação. Para grandes conjuntos de dados, ativar o chunking faz com que cada chunk seja confirmado conforme fica disponível, o que reduz o pico de uso de memória e pode melhorar significativamente a taxa de transferência.

Para ativar o chunking, defina a variável Jitterbit jitterbit.target.db.commit_chunks como true ou 1. Faça isso em uma etapa de script que é executada antes da operação de upsert, ou configure-a diretamente nas configurações da operação.

Para defini-la em um script:

$jitterbit.target.db.commit_chunks = true;

Para configurar o tamanho do chunk e ativar o chunking por meio da interface de configurações da operação, consulte Opções de operação.

Nota

Quando o chunking está ativado, cada chunk é escrito em um arquivo temporário antes de ser confirmado no banco de dados. Certifique-se de que o agente tenha espaço em disco suficiente para os arquivos temporários ao processar conjuntos de dados muito grandes.

Verificar a integração

Implante e execute a operação. Verifique os logs da operação para confirmar que a atividade Upsert foi concluída com êxito e verifique se a contagem de registros no banco de dados corresponde ao total esperado da origem.

Se a operação retornar um status de Erro devido a incompatibilidades de comprimento de campo, selecione Permitir truncamento de campos de caracteres na configuração da atividade (Etapa 1) ou use funções de String para aparar valores na transformação antes de chegarem ao destino.