Lägga till SQL-transformeringar | Qlik CloudHjälp
Gå till huvudinnehåll Gå till ytterligare innehåll

Lägga till SQL-transformeringar

Du kan inkludera SQL-baserade tabeller i transformeringsaktiviteter. En SQL-transformering gör att du kan ange en SQL SELECT-fråga i en pipeline för att definiera komplexa eller enkla transformeringar. Du kan låta SQL assistant generera en fråga från en textprompt med hjälp av generativ AI. Du kan även använda makron för att anpassa frågan så att den körs om en första laddning eller en inkrementell laddning utförs.

Mer information om hur du skapar en transformeringsaktivitet finns i Transformera data.

Lägga till en SQL-transformering

Så här lägger du till en SQL-transformering i en Transform-dataaktivitet:

  1. I Transform väljer du de datauppsättningar som ska ingå i frågan och klickar på Add SQL transformation.

    Ange namnet på transformeringen i Name. Mer information om övriga inställningar finns i Inställningar.

    Klicka på Add när du är redo att skapa SQL-transformeringen.

    Edit SQL transformation visas.

  2. Skriv frågan som ska returnera den SQL-baserade tabellen i frågefönstret.

    Mer information finns i Redigera SQL-frågan.

  3. Klicka på Run query.

    Detta hämtar metadata och en förhandsgranskning av data.

  4. Granska parametrarna i Parameters.

    Mer information finns i Parametrar.

  5. Ange en primärnyckel i Metadata.

    Mer information finns i Metadata.

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

Redigera SQL-frågan

Skriv frågan som ska returnera den SQL-baserade tabellen i frågefönstret. Frågan kan endast läsa från de källdatauppsättningar som du har valt, men du kan lägga till fler källdatauppsättningar med Add.

  • Du kan skapa en instruktion för att läsa in en datauppsättning från Objects. Klicka på mer och sedan på Generate select statement in editor.

  • Du kan kopiera namnet på en datauppsättning till urklipp genom att klicka på mer och sedan på Copy.

  • Klicka på > för att flytta en datauppsättning eller ett kolumnnamn till redigeraren.

  • Klicka på Sök för att söka och ersätta text i redigeraren.

Anteckning om informationDu kan använda SQL assistant för att generera en fråga med hjälp av generativ AI. Mer information finns i Generera en SQL-transformering från en textprompt. SQL assistant är inte tillgänglig i Qlik Cloud Government.

Om inkrementell laddning används kan du använda Macros för att anpassa frågan så att den körs om en första laddning eller en inkrementell laddning utförs.

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

Tangentbordsgenvägar

Anteckning om informationTangentbordsgenvägar utgår från att du arbetar i Windows. För macOS använder du Command i stället för Ctrl.
  • Ctrl+F Sök och ersätt

  • Ctrl+/ Kommentera/avkommentera aktuell rad

  • Ctrl+Enter Kör frågan

  • Ctrl+Z Ångra

  • Ctrl+Y Gör om

Förhandsgranska resultat

Du kan förhandsgranska resultaten med hjälp av exempeldata i Results.

Anteckning om informationFörhandsgranskning av data måste vara aktiverat på klientorganisationsnivå i Administration. Du hittar alternativet Viewing data in Dataintegrering i Settings under Feature control.

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

  • Can view data i det utrymme där kopplingen finns.

  • Can view i det utrymme där projektet finns.

Resultat som använder exempeldata visas. Du kan ange hur många datarader som ska ingå i exempeldata med Number of rows.

  • Klicka på Last executed query för att se senaste körtid och varaktighet för den senast körda frågan.

Filtrera resultaten

Du kan filtrera resultaten efter en eller flera kolumner.

  • Klicka på mer på den första kolumnen du vill filtrera efter och sedan på Filter.

    Välj vilken operatör som ska användas och vilket värde du vill filtrera efter.

    Du kan lägga till fler kolumnfilter genom att klicka på Add filter.

Filtret påverkar endast befintliga exempeldata.

Sortera resultaten

Du kan sortera exempeldata efter en specifik kolumn.

  • Klicka på mer på den kolumn du vill sortera efter och sedan på Sort ascending eller Sort descending.

Sorteringen påverkar endast befintliga exempeldata. Om du använde ett filter för att endast inkludera order från 2024 och vänder på sorteringsordningen, kommer exempeldata fortfarande endast att innehålla order från 2024.

Hantera visade kolumner

Du kan välja vilka kolumner som ska visas i resultaten. Valet sparas inte när du sparar transformeringen.

  • Dölj en kolumn genom att klicka på mer på kolumnen och sedan på Hide column.

  • Hantera visningen av alla kolumner genom att klicka på mer på valfri kolumn och sedan på Displayed columns.

Parametrar

Klicka på Parameters för att ändra parametrarna i SELECT-frågan. Parametrarna ska mappas till käll- eller målobjekten.

Parametrar mappas automatiskt när du:

  • Använder Generate select statement in editor i Objects.

  • Klickar på > för att flytta en datauppsättning eller ett kolumnnamn till redigeraren.

  • Ett parameternamn matchar ett tabellnamn från tabellerna i Objects.

Anteckning om informationOm du använder godtyckliga parameternamn måste du mappa parametrarna manuellt. Endast parameternamn som matchar datauppsättningsnamn mappas automatiskt.

Du kan mappa till

  • Historiktyp 2-strukturer (_history)

  • Aktuella strukturer

  • Målobjekt

    Du kan endast mappa målobjekt när en parameter har definierats i 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. Ändra värdet i Parameter, så ändras även referensen i SELECT query.

Metadata

Du kan redigera metadatainställningarna i Metadata.

  • Ange primärnycklar i kolumnen Key.

    Du kan få förslag på lämpliga primärnycklar och validera nycklarna genom att klicka på Suggest and validate keys.

  • Ange om kolumnen kan innehålla nullvärden i kolumnen Nullable.

  • Välj en kolumn och klicka på Edit för att ange kolumnnamn, nyckel, nullbarhet och datatyp.

Föreslå och validera nycklar

Du kan få förslag på lämpliga primärnycklar och validera nycklarna genom att klicka på Suggest and validate keys. Den fullständiga SQL-frågan måste ha körts minst en gång.

  • GenAI används för att föreslå nycklar om du har valt att tillåta slutledning över regioner. Detta gör att Qlik Cloud kan skicka slutledningsförfrågningar utanför din klientorganisations region. Mer information och den senaste informationen om bearbetningsplatser för slutledning finns i Aktivering av regionöverskridande inferens.

    Anteckning om informationQlik kontrollerar inte det genererade resultatet. På grund av hur GenAI fungerar kan svaren producera SQL som inte uppfyller dina krav utan granskning eller redigering. Den genererade frågan anses vara ”Innehåll” enligt villkoren i Qliks kundavtal.
    Information om Qlik Cloud Government

    GenAI-assisterade nyckelförslag är inte tillgängliga i Qlik Cloud Government.

    Om GenAI inte är aktiverat föreslås nycklar programmatiskt baserat på källtabellens data.

  • Validering utförs alltid utan att använda GenAI genom att köra en SQL-fråga som säkerställer att det inte finns några dubbletter eller NULL-värden.

    Anteckning om informationValidering är endast tillgänglig när frågan har returnerat data.
  • Suggest and validate keys

    Detta granskar frågan och källtabellens nycklar och föreslår giltiga primärnycklar. Den här åtgärden kan ta lite tid.

  • Validate keys

    Detta validerar de befintliga primärnycklarna för att säkerställa att de är unika och inte innehåller NULL-värden. Den här åtgärden kan ta lite tid.

  • Suggest without validation

    Detta granskar frågan och källtabellens nycklar och föreslår primärnycklar utan validering. Granska och validera nycklarna manuellt innan du tillämpar dem.

Köra frågan

Du kan köra frågan när som helst under utvecklingen genom att klicka på Run query. Första gången du kör en fråga hämtas metadata. När frågan har körts kan du gå till Metadata och ange en primärnyckel, vilket krävs för att transformeringen ska vara fullständig.

Anteckning om informationOm redigeraren innehåller mer än en fråga kan du köra en enskild fråga genom att välja frågan och klicka på Run query.

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

Om inkrementell laddning används kan du använda Macros för att anpassa frågan så att den körs om en första laddning eller en inkrementell laddning utförs.

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

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

  • Q_RUN_INITIAL_LOAD lägger till en sats där du kan placera en fråga som endast körs när en första laddning utförs.

Du behöver inte ange hela frågan med varje makro. Du kan justera eller lägga till kod baserat på ditt användningsfall.

Användningsfall: Inkrementellt filter med datumintervall:

I det här användningsfallet behöver en uppsättning orderdata transformeras 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 endast tar hänsyn till order från de senaste 12 timmarna.

Detta är basfrågan:

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 är filtret som ska tillämpas under den inkrementella körningen, där du endast tar hänsyn till order som lagts till under de senaste 12 timmarna:

WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP())
Anteckning om tipsNär du implementerar en SQL-baserad tabell rekommenderas det att du ersätter tabellnamnen med notationen ${TABLE}. Detta förhindrar hårdkodning av databas- och schemanamn som kan ändras från miljö till miljö, till exempel när du flyttar från utveckling till produktion.

Detta är den fullständiga frågan, med filtermakrot och med tabellnamn ersatta med notationen ${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}}

Detta resulterar i en fråga för första laddning:

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 fråga för inkrementell laddning:

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 med data i målet:

I det här användningsfallet behöver en uppsättning orderdata transformeras med anpassad SQL. Eftersom order är en stor datauppsättning vill du inkludera inkrementell filtrering för att säkerställa att den inkrementella laddningen endast tar hänsyn till orderdetaljposter som är nyare än data i måltabellen. Du vill också markera om en rad bearbetades av den första laddningen eller en inkrementell laddning.

Anteckning om informationSom du kan se i det här exemplet kan makron användas för att justera valfri del av frågan för första laddning eller inkrementell laddning.

This is the base query:

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 är filtret som ska tillämpas under den inkrementella körningen. ”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 de målobjekt som skapas av transformeringsaktiviteten.

Detta är den fullständiga frågan, med filtermakrot och med tabellnamn ersatta med notationen ${TABLE}. LOADED_BY anges till INIT om laddningen är en första laddning, 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}}

This results in an initial load query:

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

And an incremental load query:

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

Inställningar

Klicka på Inställningar för att redigera inställningarna för SQL-transformeringen.

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

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

  • 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.

  • I Historisk datalagring (typ 2) väljer du om du vill spara historiska data. Du kan välja att ärva inställningen från inställningarna för datauppgiften. Den här inställningen kräver att Materialisering är aktiverat.

  • 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 inaktiverar du Inkrementell laddning. Poster som inte har valts kommer att raderas i målet.
  • Bästa praxis

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

    • Skapa inte kolumnrubriker i det transformerade resultatet manuellt.

    • Undvik att använda SELECT med *, eftersom detta kan returnera olika kolumner varje gång frågan körs. Om schemat har ändrats ändrar du frågan i enlighet med detta och utför Describe table igen. Sedan kan du redigera kolumner och justera tabeller.

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

    Om du stöter på några problem med den här sidan eller innehållet på den, t.ex. ett stavfel, ett saknat steg eller ett tekniskt fel – meddela oss!