Unisci
Il prefisso Merge può essere aggiunto a qualsiasi istruzione LOAD o SELECT nello script per specificare che dovrebbe aggiungere record a un'altra tabella. Specifica anche che questa istruzione dovrebbe essere eseguita in un ricaricamento parziale.
Il caso tipico di utilizzo riguarda il caricamento di un registro dei cambiamenti che si desidera utilizzare per applicare inserts, updates e deletes a una tabella esistente.
Eseguire un ricaricamento parziale usando il pulsante Ricarica. Per ulteriori informazioni, vedere Pulsante. È anche possibile utilizzare Qlik Engine JSON API.
Sintassi:
Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)
Argomenti:
Argomento | Descrizione |
---|---|
only | Un qualificatore opzionale che denota che l'istruzione dovrebbe essere eseguita solo durante i caricamenti parziali. L'istruzione viene ignorata durante i ricaricamenti normali (non parziali). |
SequenceNoField | Il nome del campo contenente una data e ora o un numero di sequenza che definisce l'ordine delle operazioni. |
SequenceNoVar |
Il nome della variabile che viene assegnata al valore massimo per SequenceNoField della tabella unita. |
ListOfKeys | Un elenco separato da virgole di nomi di campo che specifica la chiave primaria. |
Operation | Il primo campo dell'istruzione LOAD deve contenere l'operazione come una stringa di testo: sono accettati anche 'Insert', 'Update' o 'Delete'. ‘i’, ‘u’ e ‘d’. |
Funzionalità generale
Durante un caricamento normale (non parziale), la costruzione Merge LOAD funziona come una normale istruzione Load ma con la funzionalità aggiuntiva di rimuovere i record vecchi e obsoleti e i record contrassegnati per l'eliminazione. Il primo campo dell'istruzione Load deve presentare informazioni sull'operazione: Insert, Update o Delete.
Per ciascun record caricato, l'identificatore record verrà confrontato con i record precedentemente caricati e verrà conservato solo il record più recente (in base al numero di sequenza). Se il record più recente è contrassegnato con Delete, non ne verrà conservato nessuno.
Tabella di destinazione
Quale tabella modificare è determinato dal set di campi. Se una tabella con lo stesso set di campi (tranne il primo campo; l'operazione) esiste già, sarà questa la tabella da modificare. In alternativa, un prefisso Concatenate può essere utilizzato per specificare la tabella. Se la tabella di destinazione non viene determinata, il risultato della costruzione Merge LOAD viene archiviato in una nuova tabella.
Se viene utilizzato il prefisso Concatena, la tabella risultante ha un insieme di campi corrispondenti all'unione della tabella esistente e l'input per unire. Pertanto, la tabella di destinazione può avere più campi rispetto al registro delle modifiche utilizzato come input per l'unione.
Un ricaricamento parziale consente di ottenere lo stesso risultato di un ricaricamento completo. Una differenza è che un ricaricamento parziale raramente crea una nuova tabella. A meno che non sia stata utilizzata la clausola Only, esiste sempre una tabella di destinazione con lo stesso set di campi dell'esecuzione precedente dello script.
Numero di sequenza
Se il registro delle modifiche caricato è di tipo accumulato, ovvero contiene modifiche già caricate, il parametro SequenceNoVar può essere utilizzato in una clausola Where per limitare la quantità di dati di input. Merge LOAD può quindi essere realizzata per caricare soltanto i record in cui il campo SequenceNoField è superiore a SequenceNoVar. Al completamento, la costruzione Merge LOAD assegna un nuovo valore a SequenceNoVar con il valore massimo visto nel campo SequenceNoField.
Operazioni
Merge LOAD può avere meno campi rispetto alla tabella di destinazione. Le operazioni diverse trattano i campi mancati in modo diverso:
Insert: I campi mancanti in Merge LOAD, ma esistenti nella tabella di destinazione, ottengono un NULL nella tabella di destinazione.
Delete: i campi mancanti non influenzano il risultato. I record rilevanti vengono eliminati comunque.
Update: I campi elencati in Merge LOAD sono aggiornati nella tabella di destinazione. I campi mancanti non vengono modificati. Ciò significa che le due istruzioni seguenti non sono identiche:
- 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 ...;
La prima istruzione aggiorna i record elencati e cambia F2 in NULL. La seconda non cambia F2, ma lascia i valori nella tabella di destinazione.