Vai al contenuto principale Passa a contenuto complementare

Aggiunta di trasformazioni SQL

È possibile includere tabelle basate su SQL nelle attività di trasformazione. Una trasformazione SQL consente di inserire una query SQL SELECT in una pipeline per definire trasformazioni complesse o semplici. È possibile anche usare macro per adattare la query da eseguire se viene effettuato un caricamento iniziale o un caricamento incrementale.

Per maggiori informazioni sulla creazione di un'attività di trasformazione, vedere Trasformazione dei dati.

Aggiunta di una trasformazione SQL

Per aggiungere una trasformazione SQL in un'attività dati Trasforma:

  1. In Trasforma, selezionare i set di dati da includere nella query e fare clic su Aggiungi trasformazione SQL.

    L'opzione Aggiungi trasformazione SQL consente di fornire le impostazioni per la trasformazione.

  2. Immettere un nome per il set di dati di destinazione in Nome.

    È anche possibile aggiungere una descrizione più lunga in Descrizione.

  3. In Materializzazione, selezionare se l'output trasformato dovrebbe essere materializzato o meno. È possibile scegliere di ereditare l'impostazione dalle impostazioni delle attività dati.

    • L'opzione Attivo creerà le tabelle e gestirà l'elaborazione ELT associato.

    • L'opzione Disattivato creerà visualizzazioni che eseguono trasformazioni al volo.

  4. Caricamento incrementale consente di regolare la query per un caricamento di dati incrementali applicando filtri o altre condizioni per ridurre il set di dati elaborato tramite macro. Caricamento incrementale è disponibile solo se i dati sono materializzati come tabelle.

    • Quando Caricamento incrementale è Attivato

      La prima esecuzione dell'attività eseguirà un caricamento iniziale, inserendo tutti i risultati della query nella propria tabella di destinazione. Le esecuzioni successive eseguiranno caricamenti incrementali sfruttando filtri o condizioni specifiche che l'utente ha definito per l'elaborazione incrementale. Durante il caricamento incrementale, l'attività elaborerà dati solo sotto forma di aggiornamento o inserimento, le eliminazioni non sono gestite.

    • Quando Caricamento incrementale è Disattivato

      La prima esecuzione dell'attività eseguirà un caricamento iniziale, inserendo tutti i risultati della query nella propria tabella di destinazione. Le esecuzioni successive elaboreranno tutti i risultati della query tramite la comparazione con la tabella di destinazione e l'elaborazione di record nuovi, modificati o eliminati.

    Nota informaticaSe la query selezionerà tutti i record che devono essere presenti nella destinazione, impostare il Caricamento incrementale su Disattivato. I record che non sono selezionati saranno eliminati nella destinazione.
  5. Quando si è pronti per creare la trasformazione SQL, fare clic su Aggiungi.

    Viene visualizzata l'opzione Modifica trasformazione SQL.

  6. Digitare la query per restituire la tabella basata su SQL in SELECT query.

    La query può solo leggere dai set di dati di origine selezionati, ma è possibile aggiungere più set di dati di origine utilizzando l'opzione Aggiungi.

    È possibile selezionare da Set di dati e Colonne.

  7. Se si utilizza il caricamento incrementale, è possibile usare Macro per adattare la query da eseguire se viene effettuato un caricamento iniziale o un caricamento incrementale.

    Per ulteriori informazioni, vedere Utilizzo di macro per adattare la query al tipo di caricamento.

  8. Fare clic su Estrai parametri per analizzare i parametri nella query SELECT.

    I parametri dovrebbero essere mappati agli oggetti di origine e destinazione. È possibile mappare a

    • Strutture di tipo 2 della cronologia (_history)

    • Strutture attuali

    • Oggetti di destinazione

      Quando un parametro è definito all'interno di una macro incrementale, è possibile mappare unicamente gli oggetti di destinazione.

    Nota di suggerimentoÈ possibile sostituire un parametro con un riferimento per avere una query più facile da leggere. Modificare il valore in Parametroe anche il riferimento in SELECT query cambierà.
  9. Fare clic su Descrivi tabella per ottenere un'anteprima dei metadati di output della query.

    È possibile inoltre visualizzare un'anteprima dei risultati utilizzando un campione dei dati.

    Anteprima dei dati

  10. Assicurarsi che la tabella abbia una chiave primaria.

    È possibile anche modificare le impostazioni dei metadati.

    • Impostare le chiavi primarie nella colonna Chiave.

    • Impostare se la colonna è Nullable, ossia se ammette valori null.

    • Selezionare una colonna e fare clic su Modifica per impostare il nome, la chiave, il tipo di dati e se ammette valori null.

  11. Quando si è soddisfatti dei risultati della query, fare clic su OK. Il set di dati ora è aggiunto all'elenco delle destinazioni ed è possibile visualizzarne l'anteprima.

Anteprima dei dati

È possibile visualizzare un'anteprima dei risultati utilizzando un campione dei dati.

Nota informaticaÈ necessario abilitare l'anteprima dei dati a livello tenant in Console di gestione Qlik. È possibile trovare l'opzione Visualizzazione dei dati data in Integrazione dati nelle Impostazioni, nella sezione Controllo funzione.

Per poter visualizzare un'anteprima dei dati, è necessario disporre dei seguenti ruoli:

  • Può visualizzare i dati per lo spazio in cui risiede la connessione dati.

  • Può visualizzare per lo spazio in cui risiede il progetto dati.

Per visualizzare un'anteprima dei risultati:

  • Fare clic su Visualizza dati.

Vengono visualizzati i risultati che utilizzano un campione dei dati. È possibile impostare il numero di righe che si desidera includere nel campione nell'opzione Numero di righe.

E possibile filtrare i dati campione in due modi:

  • Utilizzare filtro per filtrare i dati campione che si desidera recuperare.

    Per esempio, se si utilizza il filtro ${OrderYear}>2023 e l'opzione Numero di righe è impostata su 10, verrà visualizzato un campione di 10 ordini realizzati nel 2024.

  • Filtrare i dati campione in base a una colonna specifica.

    Questa operazione interesserà solo i dati campione esistenti. Se si è utilizzato filtro per includere solo gli ordini realizzati nel 2024 e si imposta il filtro di colonna per mostrare gli ordini del 2022, verrà visualizzato un campione vuoto come risultato.

È possibile ordinare il campione di dati in base a una colonna specifica. Questa operazione interesserà solo i dati campione esistenti. Se si è utilizzato filtro per includere solo gli ordini realizzati nel 2024 e si inverte l'ordinamento, i dati campione conterranno comunque gli ordini del 2024.

Utilizzo di macro per adattare la query al tipo di caricamento

Se si utilizza il caricamento incrementale, è possibile usare Macro per adattare la query da eseguire se viene effettuato un caricamento iniziale o un caricamento incrementale.

Selezionare la macro e aggiungere la query nella rispettiva clausola.

  • Q_RUN_INCREMENTAL aggiunge una clausola in cui è possibile posizionare una query che verrà eseguita solo quando viene effettuato un caricamento incrementale.

  • Q_RUN_INITIAL_LOAD aggiunge una clausola in cui è possibile posizionare una query che verrà eseguita solo quando viene effettuato un caricamento iniziale.

Non è necessario specificare la query completa con ogni macro. È possibile regolare o aggiungere un codice in base al proprio caso di utilizzo.

Caso di utilizzo: filtro incrementale che usa un intervallo di date.

In questo caso di utilizzo, un set di dati di ordini deve essere trasformato tramite SQL personalizzato. Dato che si tratta di un set di dati di grandi dimensioni, è consigliabile includere il filtro incrementale per fare in modo che il caricamento incrementale consideri solo gli ordini delle ultime 12 ore.

Questa è la query di base:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM “mydb”.”myStorageTask”.”ORDER” O JOIN “mydb”.”myStorageTask”.”ORDER_DETAIL” OD ON O.ORDER_ID = OD.ORDER_ID

Questo è il filtro da applicare durante l'esecuzione incrementale, dove si considerano solo gli ordini aggiunti nelle ultime 12 ore:

WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP())
Nota di suggerimentoQuando si implementa una tabella basata su SQL, è consigliabile sostituire i nomi della tabella con la notazione ${TABLE}. Ciò impedisce la codifica fissa di nomi di database o schemi che potrebbero cambiare da un ambiente all'altro, ad esempio, durante lo spostamento da sviluppo a produzione.

Questa è la query completa, con la macro del filtro e i nomi della tabella sostituiti con la notazione ${TABLE}:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP() ) {{/QLIK_FUNC_IF}}

Ciò ha come risultato una query di caricamento iniziale:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID

E una query di caricamento incrementale:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP() )

Caso di utilizzo: filtro incrementale che usa i dati nella destinazione.

In questo caso di utilizzo, un set di dati di ordini deve essere trasformato tramite SQL personalizzato. Dato che gli ordini sono un set di dati di grandi dimensioni, è consigliabile includere il filtro incrementale per fare in modo che il caricamento incrementale consideri solo record di dettagli degli ordini più recenti dei dati nella tabella di destinazione. È inoltre consigliabile contrassegnare se una riga è stata elaborata dal caricamento iniziale o da un caricamento incrementale.

Nota informaticaCome si può vedere in questo esempio, le macro possono essere utilizzate per regolare qualsiasi parte della query per il caricamento iniziale o il caricamento incrementale.

Questa è la query base:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM “mydb”.”myStorageTask”.”ORDER” O JOIN “mydb”.”myStorageTask”.”ORDER_DETAIL” OD ON O.ORDER_ID = OD.ORDER_ID

Questo è il filtro da applicare durante l'esecuzione incrementale. "ORDERS_DERIVED" è il nome del set di dati di destinazione.

WHERE OD.UPDATE_DTM > = (SELECT MAX(LAST_UPDATE_DTM) FROM “mydb”,”myTrasformTask”.”ORDERS_DERIVED” )
Nota di suggerimentoIl caricamento incrementale può anche mappare una notazione ${TABLE} agli oggetti di destinazione creati dall'attività di trasformazione.

Questa è la query completa, con la macro del filtro e i nomi della tabella sostituiti con la notazione ${TABLE}. LOADED_BY è impostato su INIT se il caricamento è iniziale e INCR se il caricamento è incrementale:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, {{#QLIK_FUNC_IF Q_RUN_INITIAL_LOAD}} ‘INIT’ as LOADED_BY {{/QLIK_FUNC_IF}} {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} ‘INCR’ as LOADED_BY {{/QLIK_FUNC_IF}} FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} WHERE OD.UPDATE_DTM >= (SELECT MAX(LAST_UPDATE_DTM) FROM ${TARGET_TABLE} ) {{/QLIK_FUNC_IF}}

Ciò ha come risultato una query di caricamento iniziale:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, ‘INIT’ as LOADED_BY FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID

E una query di caricamento incrementale:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, ‘INCR’ as LOADED_BY FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID WHERE OD.UPDATE_DTM >= (SELECT MAX(LAST_UPDATE_DTM) FROM ${TARGET_TABLE} )

Procedure consigliate

  • Quando si aggiunge una trasformazione SQL, non viene definita automaticamente una chiave primaria. Aggiungere una chiave al set di dati nella scheda Set di dati.

  • Evitare di creare manualmente intestazioni delle colonne nell'output trasformato.

  • Evitare di utilizzare SELECT con *, poiché può restituire colonne differenti ogni volta che viene eseguita la query. Se viene apportata una modifica nello schema, cambiare la query di conseguenza ed eseguire nuovamente Descrivi tabella. Quindi, è possibile modificare le colonne e regolare le tabelle.

Hai trovato utile questa pagina?

Se riscontri problemi con questa pagina o con il suo contenuto – un errore di battitura, un passaggio mancante o un errore tecnico – facci sapere come possiamo migliorare!