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.

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 More em um aplicativo e escolha Agendar recarga. Na caixa de diálogo que é aberta, ative Carregamento parcial.

Syntax:  

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

 

Durante um carregamento normal (não parcial), a construção Merge LOAD funcionará como um comando 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 será 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.

Se o prefixo Concatenate for usado, ou se já existir uma tabela com o mesmo conjunto de campos, essa será a tabela relevante a ser modificada. De outra forma, o resultado da construção Merge LOAD será armazenado em uma nova tabela.

Se o prefixo Concatenate for usado, a tabela resultante poderá ter mais campos que o log de alterações que é usado como entrada para Merge.

Um carregamento parcial fará o mesmo que um carregamento completo. A única diferença é que a construção Merge LOAD nunca criará uma nova tabela. Sempre existe uma tabela relevante da execução do script anterior a ser modificada.

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 atribuirá um novo valor ao SequenceNoVar com o valor máximo visto no campo SequenceNoField.

Arguments:  

Argumentos
Argumento Descrição
only Um qualificador opcional indicando que o comando deve ser executado somente durante carregamentos parciais. Ele deve ser desconsiderado 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: Insert, Update ou Delete. "i", "u" e "d" também são aceitos.

Example: Script de carga de dados

Neste exemplo, uma tabela inline denominada Persons é carregada com quatro linhas. Em seguida, Merge altera a tabela da seguinte forma:

  • Adiciona a linha Mary, 4
  • Exclui a linha, Steven, 3
  • Atribui o número 5 a Jake

A variável LastChangeDate será definida como o valor máximo na coluna ChangeDate após a execução de Merge.

Persons: load * inline [ Name, Number Jake, 3 Jill, 2 Steven, 3 ]; Merge (ChangeDate, LastChangeDate) on Name Concatenate(Persons) LOAD * inline [ Operation, ChangeDate, Name, Number Insert, 1/1/2021, Mary, 4 Delete, 1/1/2021, Steven, Update, 2/1/2021, Jake, 5 ];

Antes do carregamento de Merge, a tabela resultante aparece da seguinte forma:

Resulting table
Name Number
Jake 3
Jill 2
Steven 3

Após o carregamento de Merge, a tabela aparece da seguinte forma:

Resulting table
ChangeDate Name Number
2/1/2021 Jake 5
- Jill 2
1/1/2021 Mary 4

Quando os dados são carregados, a caixa de diálogo Progresso da carga de dados mostra as operações que são executadas:

Caixa de diálogo Progresso da carga de dados

Data load progress dialog box.

Example: Script de carregamento de dados - Carregamento parcial

No exemplo a seguir, o argumento Only especifica que o comando Merge apenas será executado durante um carregamento parcial. As atualizações serão filtradas com base na variável LastChangeDate capturada anteriormente. Após a conclusão de Merge, a variável LastChangeDate receberá o valor máximo da coluna ChangeDate processada durante a mesclagem

Merge Only (ChangeDate, LastChangeDate) on Name Concatenate(Persons) LOAD Operation, ChangeDate, Name, Number from [lib://ChangeFilesFolder/BulkChangesInPersonsTable.csv] (txt) where ChangeDate >= $(LastChangeDate);