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.
Per eseguire un ricaricamento parziale su una pianificazione, fare clic su su un'app, quindi scegliere Pianifica ricaricamento. Nella finestra di dialogo che si apre, attivare Ricaricamento parziale.
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 LOAD Unisci 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 Concatena può essere utilizzato per specificare la tabella. Se la tabella di destinazione non viene determinata, il risultato della costruzione Unisci 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 Solo, 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. La costruzione Unisci LOAD può quindi essere realizzata per caricare soltanto i record in cui il campo SequenceNoField è superiore a SequenceNoVar. Al completamento, la costruzione Unisci LOAD assegna un nuovo valore a SequenceNoVar con il valore massimo visto nel campo SequenceNoField.
Operazioni
Unisci LOAD può avere meno campi rispetto alla tabella di destinazione. Le operazioni diverse trattano i campi mancati in modo diverso:
Inserisci: i campi mancanti in Unisci LOAD, ma esistenti nella tabella di destinazione, aggiungono un valore NULL nella tabella di destinazione.
Elimina: i campi mancanti non influenzano il risultato. I record rilevanti vengono eliminati comunque.
Aggiorna: i campi elencati in Unisci 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.