Gå till huvudinnehåll Gå till ytterligare innehåll

Lägga till SQL-transformeringar

Du kan inkludera SQL-baserade tabeller i omvandlingsuppgifter. Med en SQL-omvandling kan du mata in en SQL SELECT-fråga i en pipeline för att definiera komplexa eller enkla omvandlingar. Du kan också använda makron för att anpassa frågan att köras om en initial laddning eller inkrementell laddning utförs.

Mer information om att skapa en omvandlingsuppgift finns i Omvandla data.

Lägga till en SQL-omvandling

För att lägga till en SQL-omvandling i en Omvandlingsdatauppgift:

  1. I Omvandla väljer du de datauppsättningar som ska ingå i frågan och klickar sedan på Lägg till SQL-omvandling.

    Lägg till SQL-omvandling visas och du kan ange inställningar för omvandlingen.

  2. Ange ett namn för måldatauppsättningen i Namn.

    Du kan även lägga till en längre beskrivning i Beskrivning.

  3. I Materialisering väljer du om omvandlad utdata ska materialiseras eller inte. Du kan välja att ärva inställningen från inställningarna för datauppgiften.

    • skapar tabeller och hantera tillhörande ELT-bearbetning.

    • Av skapar vyer som utför omvandlingar direkt.

  4. Inkrementella laddningar gör att du kan justera frågan för en inkrementell dataladdning genom att använda filter eller andra villkor för att minska datauppsättningen som bearbetas med makron. Inkrementell laddning är enbart tillgänglig om data är materialiserat som tabeller.

    • När Inkrementell laddning är

      Uppgiftens första körning utför initial laddning och infogar alla resultat av frågan i din måltabell. Efterföljande körningar utför inkrementella laddningar med filter eller specifika villkor som du har definierat för inkrementell bearbetning. Under inkrementell laddning bearbetar uppgiften enbart data som en uppdatering eller infogning. Raderingar hanteras inte.

    • När Inkrementell laddning är Av

      Uppgiftens första körning utför initial laddning och infogar alla resultat av frågan i din måltabell. Efterföljande körningar bearbetar alla resultat av frågan genom att jämföra med din måltabell och bearbeta poster som är nya, ändrade eller raderade.

    Anteckning om informationOm frågan ska välja alla poster som ska finnas i målet ställer du in Inkrementell laddning till av. Poster som inte har valts kommer att raderas i målet.
  5. Klicka på Lägg till när du är redo att skapa SQL-omvandlingen.

    Redigera SQL-omvandling visas.

  6. Skriv frågan för att returnera den SQL-baserade tabellen i SELECT query.

    Frågan kan bara läsa från de källdatauppsättningar du har valt, men du kan lägga till fler källdatauppsättningar med Lägg till.

    Du kan välja från datauppsättningarna och kolumnerna.

  7. Om du använder inkrementell laddning kan du använda makron för att anpassa frågan att köras om en initial laddning eller inkrementell laddning utförs.

    Mer information finns i Använda makron för att anpassa frågan efter laddningstyp.

  8. Klicka på Extrahera parametrar för att analysera parametrarna i SELECT-frågan.

    Parametern ska mappas till käll- eller målobjekt. Du kan mappa till

    • Historik typ 2-strukturer (_history)

    • Aktuella strukturer

    • Målobjekt

      Du kan bara mappa målobjekt när en parameter har definierats inuti ett inkrementellt makro.

    Anteckning om tipsDu kan ersätta en parameter med en referens för att få en fråga som är lättare att läsa. Om du ändrar värdet i Parameter ändras även referensen i SELECT-frågan.
  9. Klicka på Describe table för att få en förhandsgranskning av metadata för frågeutdata.

    Du kan också förhandsgranska resultaten med ett urval av data.

    Förhandsgranska data

  10. Kontrollera att tabellen har en primär nyckel.

    Du kan också redigera inställningarna för metadata.

    • Ställ in primära nycklar i kolumnen Nycklar.

    • Ställ in om kolumnen är nullbar i kolumnen Nullbar.

    • Välj en kolumn och klicka på Redigera för att ställa in kolumnens namn, nyckel, nullbarhet och datatyp.

  11. När du är nöjd med resultatet av frågan klickar du på OK. Datauppsättningen läggs nu till i listan över mål och du kan förhandsgranska den.

Förhandsgranska data

Du kan förhandsgranska resultaten med ett urval av data.

Anteckning om informationFörhandsgranskning av data måste vara aktiverad på klientorganisationsnivå i Qlik Hanteringskonsol. Du kan hitta alternativet Visa data i Dataintegrering i Inställningar under Funktionskontroll.

Du måste ha tilldelats följande roller för att kunna förhandsgranska data:

  • Kan visa data i det utrymme där datakopplingen finns.

  • Kan visa i det utrymme där projektet finns.

För att visa en förhandsgranskning av resultat:

  • Klicka på Visa data.

Resultat från användning av ett urval av data visas. Du kan ställa in hur många datarader som ska tas med i exemplet med Antal rader.

Du kan filtrera exempeldata på två sätt:

  • Använd filtrera för att filtrera vilka exempeldata som ska hämtas.

    Om du till exempel använder filtret ${OrderYear}>2023 och Antal rader är inställt till 10 kommer du att få ett urval på 10 ordrar från 2024.

  • Filtrera exempeldata efter en specifik kolumn.

    Detta kommer bara att påverka befintliga exempeldata. Om du använder filtrera så att bara ordrar från 2024 inkluderas och ställer in kolumnfiltret så att ordrar från 2022 visas blir resultatet ett tomt urval.

Du kan också sortera dataurvalet via en specifik kolumn. Sorteringen kommer bara att påverka befintliga exempeldata. Om du använder filtrera så att bara ordrar från 2024 inkluderas och inverterar sorteringsordningen kommer exempeldata fortfarande bara innehålla ordrar från 2024.

Använda makron för att anpassa frågan efter laddningstyp

Om du använder inkrementell laddning kan du använda makron för att anpassa frågan att köras om en initial laddning eller inkrementell laddning utförs.

Välj makrot och lägg till frågan i motsvarande sats.

  • Q_RUN_INCREMENTAL lägger till en sats där du kan placera en fråga som enbart körs då inkrementell laddning utförs.

  • Q_RUN_INITIAL_LOAD lägger till en sats där du kan placera en fråga som enbart körs då initial laddning utförs.

Du behöver inte ange den fullständiga frågan för varje makro. Du kan justera eller lägga till kod baserat på ditt användningsfall.

Användningsfall: inkrementellt filter med datumintervall:

I detta användningsfall behöver en uppsättning ordnade data omvandlas med anpassad SQL. Eftersom detta är en stor datauppsättning vill du inkludera inkrementell filtrering för att säkerställa att den inkrementella laddningen enbart beaktar de senaste 12 timmarna.

Detta är en basfråga:

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

Detta filter används i den inkrementella körningen där du enbart beaktar order som lagts till under senaste 12 timmarna:

WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP())
Anteckning om tipsVid implementering av en SQL-baserad tabell rekommenderar vi att ersätta tabellnamnen med en $(TABLE)-notation. Det förhindrar hårdkodade databas- och schema-namn som kan skifta från miljö till miljö, exempelvis vid flytt från utveckling till produktion.

Detta är den fullständiga frågan som använder filtreringsmakro och har tabellnamnen ersatta med $(TABLE)-notation:

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}}

Det resulterar i en initial laddningsfråga:

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

Och en inkrementell laddningsfråga:

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() )

Användningsfall: inkrementellt filter som använder data i målet:

I detta användningsfall behöver en uppsättning ordnade data omvandlas med anpassad SQL. Eftersom dessa order är en stor datauppsättning vill du inkludera inkrementell filtrering för att säkerställa att den inkrementella laddningen enbart beaktar orderinformation som är nyare än data i måltabellen. Du vill även markera om en rad har bearbetats av den initiala laddningen eller en inkrementell laddning.

Anteckning om informationSom visas i exemplet kan makron användas för att justera alla delar av frågan för initial laddning eller inkrementell laddning.

Detta är en basfråga:

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

Detta filter används under inkrementell körning. “ORDERS_DERIVED” är namnet på måldatauppsättningen.

WHERE OD.UPDATE_DTM > = (SELECT MAX(LAST_UPDATE_DTM) FROM “mydb”,”myTrasformTask”.”ORDERS_DERIVED” )
Anteckning om tipsInkrementell laddning kan också mappa en $(TABLE)-notation till målobjekt som skapas av omvandlingsuppgiften.

Detta är den fullständiga frågan som använder filtreringsmakro och har tabellnamnen ersatta med $(TABLE-notation. LOADED_BY är angivet som INIT om laddningen är initial och INCR om laddningen är inkrementell:

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}}

Det resulterar i en initial laddningsfråga:

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

Och en inkrementell laddningsfråga:

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} )

Metodtips

  • När du lägger till en SQL-omvandling definieras inte en primärnyckel automatiskt. Lägg till en nyckel till datauppsättningen på fliken Dataset.

  • Skapa inte kolumnrubriker i omvandlade utdata manuellt.

  • Använd inte SELECT med * eftersom det kan returnera olika kolumner varje gång frågan körs. Om ett schema har ändrats ska även frågan ändras på motsvarande sätt och Beskriv tabell göras igen. Sedan kan du redigera kolumner och justera tabeller.

Var den här sidan till hjälp för dig?

Om du hittar några fel på denna sida eller i innehållet – ett stavfel, ett steg som saknas eller ett tekniskt fel – berätta för oss så att vi kan blir bättre!