Ir para conteúdo principal

Merge

O prefixo Merge pode ser adicionado a qualquer comando LOAD ou SELECT no script para especificar que a tabela carregada deve ser mesclada em outra tabela. Ele também especifica que esse comando deve ser executado em um carregamento parcial.

O caso de uso típico é quando você carrega um log de alterações e deseja usá-lo para aplicar inserts, updates e deletes a uma tabela existente.

Nota informativaPara que o carregamento parcial funcione corretamente, o aplicativo deve ser aberto com dados antes que um carregamento parcial seja disparado.

Execute um carregamento parcial usando o botão Carregar. Para obter mais informações, consulte Botão. Você também pode usar o Qlik Engine JSON API.

Para executar um carregamento parcial em uma programação, clique em Mais em um aplicativo e escolha Agendar recarga. Na caixa de diálogo que é aberta, ative Carregamento parcial.

Sintaxe:  

Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)

Argumentos:  

Argumentos
Argumento Descrição
only Um qualificador opcional indicando que a instrução deve ser executada somente durante carregamentos parciais. A instrução é desconsiderada durante carregamentos normais (não parciais).
SequenceNoField O nome do campo que contém um carimbo de data/hora ou um número de sequência que define a ordem das operações.
SequenceNoVar

O nome da variável que recebe o valor máximo para SequenceNoField da tabela que está sendo mesclada.

ListOfKeys Uma lista separada por vírgulas de nomes de campo especificando a chave primária.
Operation O primeiro campo da instrução de Load deve conter a operação como uma string de texto: "Insert'', Update'' ou "Delete|. "i", "u" e "d" também são aceitos.

Funcionalidade geral

Durante um carregamento normal (não parcial), a construção Merge LOAD funcionará como uma instrução Load normal, mas com a funcionalidade adicional de remover registros antigos obsoletos e registros marcados para exclusão. O primeiro campo da instrução Load deve conter informações sobre a operação: Insert, Update ou Delete.

Para cada registro carregado, o identificador de registro é comparado com registros carregados anteriormente, e somente o registro mais recente (de acordo com o número de sequência) será mantido. Se o registro mais recente estiver marcado com Delete, nada será mantido.

Tabela de destino

A tabela a ser modificada é determinada pelo conjunto de campos. Se uma tabela com o mesmo conjunto de campos (exceto o primeiro campo; a operação) já existir, esta será a tabela relevante a ser modificada. Como alternativa, um prefixo Concatenate pode ser usado para especificar a tabela. Se a tabela de destino não for determinada, o resultado da construção Merge LOAD será armazenado em uma nova tabela.

Se o prefixo Concatenate for usado, a tabela resultante terá um conjunto de campos correspondentes à união da tabela existente e a entrada para a mesclagem. Portanto, a tabela de destino pode ter mais campos do que o log de alterações usado como entrada para a mesclagem.

Um carregamento parcial faz o mesmo que um carregamento total. Uma diferença é que um carregamento parcial raramente cria uma nova tabela. A menos que você tenha usado a cláusula Only, sempre existe uma tabela de destino com o mesmo conjunto de campos da execução do script anterior.

Número de sequência

Se o log de alterações carregado for um log acumulado, ou seja, contiver alterações que já foram carregadas, o parâmetro SequenceNoVar poderá ser usado em uma cláusula Where para limitar a quantidade de dados de entrada. Dessa forma, seria possível fazer Merge LOAD para carregar somente registros em que o campo SequenceNoField fosse maior que SequenceNoVar. Após a conclusão, Merge LOAD atribui um novo valor a SequenceNoVar com o valor máximo visto no campo SequenceNoField.

Operações

Merge LOAD pode ter menos campos do que a tabela de destino. As diferentes operações tratam os campos ausentes de maneiras diferentes:

Insert: Os campos ausentes em Merge LOAD, mas existentes na tabela de destino, recebem um NULL na tabela de destino.

Delete: Os campos ausentes não afetam o resultado. Os registros relevantes são excluídos de qualquer maneira.

Update: Os campos listados em Merge LOAD são atualizados na tabela de destino. Os campos ausentes não são alterados. Isso significa que as duas instruções a seguir não são idênticas:

  • Merge on Key Concatenate Load 'U' as Operation, Key, F1, Null() as F2 From ...;
  • Merge on Key Concatenate Load 'U' as Operation, Key, F1 From ...;

A primeira instrução atualiza os registros listados e altera F2 para NULL. A segunda não muda F2, mas deixa os valores na tabela de destino.