# Mesclar

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](https://help.qlik.com/pt-BR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Visualizations/Button/button.htm). 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 o comando deve ser executado 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:

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

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

Atualizar: 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.

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Merge.htm)

#### Exemplos

## Exemplo 1: mesclagem simples com tabela especificada

Nesse exemplo, uma tabela inline chamada Persons é carregada com três 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 é definida como o valor máximo na coluna ChangeDate após a execução de Merge.

### Script de carregamento

Adicione o script de exemplo ao seu aplicativo e execute-o. Para ver o resultado, adicione os campos listados na coluna de resultados a uma pasta no seu aplicativo.

```
Set DateFormat='D/M/YYYY';
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
];
```

Para obter mais informações sobre como usar carregamentos inline, consulte [Usando carregamentos inline para carregar dados](https://help.qlik.com/pt-BR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/inline-loads-qs.htm).

### Resultado

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

Resulting table

| Name | Number |
| --- | --- |
| Jake | 3 |
| Jill | 2 |
| Steven | 3 |

Após Merge Load, 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

![Caixa de diálogo Progresso do carregamento de dados.](https://help.qlik.com/pt-BR/sense/May2026/Subsystems/Hub/Content/Resources/Images/ui_gen_data_load_merge.png)

## Exemplo 2: script de carregamento de dados com campos ausentes

Nesse exemplo, os mesmos dados acima são carregados, mas agora com um ID para cada pessoa.

Merge altera a tabela da seguinte forma:

* Adiciona a linha Mary, 4.
* Exclui a linha, Steven, 3.
* Atribui o número 5 a Jake.
* Atribui o número 6 a Jill.

### Script de carregamento

Aqui, usamos duas instruções Merge Load, uma para "Insert" e "Delete" e uma segunda para "Update".

Adicione o script de exemplo ao seu aplicativo e execute-o. Para ver o resultado, adicione os campos listados na coluna de resultados a uma pasta no seu aplicativo.

```
Set DateFormat='D/M/YYYY';
Persons:
Load * Inline [
PersonID, Name, Number
1, Jake, 3
2, Jill, 2
3, Steven, 3
];

Merge (ChangeDate, LastChangeDate) on PersonID Concatenate(Persons)
Load * Inline [
Operation, ChangeDate,   PersonID, Name,     Number
Insert,    1/1/2021,     4,        Mary,     4
Delete,    1/1/2021,     3,        Steven, 
];

Merge (ChangeDate, LastChangeDate) on PersonID Concatenate(Persons)
Load * Inline [
Operation, ChangeDate,   PersonID, Number
Update,    2/1/2021,     1,        5
Update,    3/1/2021,     2,        6
];
```

### Resultado

Após as instruções Merge Load, a tabela aparece da seguinte forma:

Resulting table

| PersonID | ChangeDate | Name | Number |
| --- | --- | --- | --- |
| 1 | 2/1/2021 | Jake | 5 |
| 2 | 3/1/2021 | Jill | 6 |
| 4 | 1/1/2021 | Mary | 4 |

Observe que a segunda instrução Merge não inclui o campo Name e, como consequência, os nomes não foram alterados.

## Exemplo 3: script de carregamento de dados - Carregamento parcial usando uma cláusula Where com ChangeDate

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

### Script de carregamento

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

## Saiba mais

* [Carregamento parcial](https://help.qlik.com/pt-BR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/PartialReload.htm)
* [Load](https://help.qlik.com/pt-BR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)
* [Concatenate](https://help.qlik.com/pt-BR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/concatenate.htm)
* [Map](https://help.qlik.com/pt-BR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Map.htm)
* [Only](https://help.qlik.com/pt-BR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/Only.htm)