Ir para conteúdo principal Pular para conteúdo complementar

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.

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 de Load normal, mas com a funcionalidade adicional de remover registros antigos obsoletos e registros marcados para exclusão. O primeiro campo da instrução de 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, Merge LOAD pode ser feito para carregar somente registros em que o campo SequenceNoField é maior que SequenceNoVar. Após a conclusão, Merge LOAD atribui um novo valor ao 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.

Nota informativaMerge LOAD não pode ser usado em registros com curingas, por exemplo, uma tabela do Section Access com um asterisco para representar todos os valores.

Esta página ajudou?

Se você encontrar algum problema com esta página ou seu conteúdo - um erro de digitação, uma etapa ausente ou um erro técnico - informe-nos como podemos melhorar!