跳到主要內容 跳至補充內容

新增 SQL 轉換

您可以在轉換任務中納入基於 SQL 的表格。SQL 轉換可讓您在管道中輸入 SQL SELECT 查詢,以定義複雜或簡單轉換。您也可以讓 SQL 助理使用生成式 AI 根據文字提示產生查詢。若執行初始載入或增量載入,您也可以使用巨集以調整要執行的查詢。

如需更多關於建立轉換任務的資訊,請參閱 轉換資料

新增 SQL 轉換

若要在轉換資料任務中新增 SQL 轉換:

  1. 轉換中,選取要在查詢中包含的資料集,再按一下新增 SQL 轉換

    會顯示新增 SQL 轉換,您可在此提供轉換設定。

  2. 名稱中輸入目標資料集的名稱。

    您也可以在說明中新增較長的說明。

  3. 具體化中,選取是否應具體化轉換的輸出。您可以選擇繼承資料任務設定中的設定。

    • 開啟將會建立表格,並且將會處理相關的 ELT 處理。

    • 關閉將會建立即時執行轉換的檢視。

  4. 歷史資料儲存 (類型 2) 中,選擇是否要保留歷史資料。您可以選擇繼承資料任務設定中的設定。此設定要求具體化處於啟用狀態。

  5. 增量載入可讓您套用篩選條件或其他條件,以減少使用巨集處理的資料集,藉此調整對於增量資料載入的查詢。只有在資料具體化為表格時,才能使用增量載入

    • 增量載入開啟

      首次執行任務將會執行初始載入,將所有查詢結果插入目標表格中。後續執行將會執行增量載入,運用您為增量處理定義的篩選條件或特定條件。在增量載入期間,任務只會以更新或插入方式處理資料,不會管理刪除。

    • 增量載入關閉

      首次執行任務將會執行初始載入,將所有查詢結果插入目標表格中。後續執行將會與目標表格比較,並處理新的、已變更或已刪除的記錄,以處理所有查詢結果。

    資訊備註若查詢將會選取應存在於目標中的所有記錄,請將增量載入設定為關閉。將會在目標中刪除未選取的記錄。
  6. 在您準備好建立 SQL 轉換時按一下新增

    就會顯示編輯 SQL 轉換

  7. 輸入查詢以在 SELECT 查詢中傳回基於 SQL 的表格。

    只能從您選取的來源資料集讀取查詢,但您可以透過新增新增更多來源資料集。

    可從資料集選取。

    您也可以使用 SQL 助理以使用生成式 AI 產生查詢。如需詳細資訊,請參閱 從文字提示產生 SQL 轉換

  8. 若使用增量載入,則執行初始載入或增量載入時,您可以使用巨集以調整要執行的查詢。

    如需詳細資訊,請參閱 使用巨集調整查詢以因應載入類型

  9. 按一下擷取參數以剖析 SELECT 查詢中的參數。

    參數應對應至來源或目標物件。您可以對應至

    • 歷史記錄類型 2 結構 (_history)

    • 目前結構

    • 目標物件

      若在增量巨集內部定義參數,您只能對應目標物件。

    提示備註可用參考取代參數,使查詢更加易讀。變更參數中的值,SELECT 查詢中的參考也會變更。
  10. 按一下描述表格可取得查詢輸出中繼資料的預覽。

    您也可以使用資料樣本預覽結果。

    預覽資料

  11. 確認表格有主要金鑰。

    您也可以編輯中繼資料設定。

    • 金鑰欄中設定主要金鑰。

    • 可為 Null 欄中設定欄是否可為 Null。

    • 選取欄並按一下編輯以設定欄名稱、金鑰、可為 Null 和資料類型。

  12. 若您滿意查詢結果,按一下確定。資料集即已新增至目標清單,您可預覽。

預覽資料

您可以使用資料樣本預覽結果。

資訊備註必須在 管理 於租用戶層級啟用資料預覽。您可以在特徵控制之下的設定找到檢視 資料整合 中的資料選項。

必須向您指派下列角色,您才能預覽資料:

  • 連線所在空間中的可以檢視資料

  • 專案所在空間中的可以檢視

若要檢視結果預覽:

  • 按一下檢視資料

就會顯示使用資料樣本的結果。您可以透過列數設定要在樣本中納入多少資料列。

您可以使用兩種方式篩選樣本資料:

  • 使用 篩選器 篩選要擷取哪個樣本資料。

    例如,若您使用篩選 ${OrderYear}>2023列數設定為 10,您將取得 2024 年的 10 筆訂單樣本。

  • 依特定欄篩選樣本資料。

    這只會影響現有的樣本資料。若您使用 篩選器 僅納入 2024 年的訂單,並設定欄篩選以顯示 2022 年的訂單,則結果是空的樣本。

您可以依特定欄排序資料樣本。排序只會影響現有的樣本資料。若您使用 篩選器 僅納入 2024 年的訂單,並反轉排序訂單,則樣本資料仍然只會包含 2024 年的訂單。

使用巨集調整查詢以因應載入類型

若使用增量載入,則執行初始載入或增量載入時,您可以使用巨集以調整要執行的查詢。

選取巨集並在各自的子句內新增查詢。

  • Q_RUN_INCREMENTAL 可新增子句,您可在此置放只有在執行增量載入時才會執行的查詢。

  • Q_RUN_INITIAL_LOAD 可新增子句,您可在此置放只有在執行初始載入時才會執行的查詢。

您不需要對每個巨集指定完整查詢。您可以根據使用案例調整或新增程式碼。

使用案例:使用日期範圍的增量篩選:

在此使用案例中,需要透過自訂 SQL 轉換一組訂單資料。由於這是大型資料集,您想要納入增量篩選,以確保增量載入僅考慮過去 12 小時的訂單。

此為基本查詢:

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

此為要在增量執行期間套用的篩選條件,其中您僅考慮過去 12 小時新增的訂單:

WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP())
提示備註實施基於 SQL 的表格時,建議以 ${TABLE} 標記法取代表格名稱。這可避免可能會改變環境 (例如從開發移至生產時) 的寫入程式碼資料庫和結構描述名稱。

此為完整查詢,使用篩選巨集和以 ${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}}

這會產生初始載入查詢:

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

以及增量載入查詢:

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

使用案例:使用目標中資料的增量篩選:

在此使用案例中,需要透過自訂 SQL 轉換一組訂單資料。由於訂單是大型資料集,您想要納入增量篩選,以確保增量載入僅考慮比目標表格中的資料更新的訂單詳細記錄。您也想要標記列是經由初始載入或增量載入來處理。

資訊備註如同此範例所示,巨集可用來調整初始載入或增量載入的任何查詢部分。

此為基本查詢:

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

此為要在增量執行期間套用的篩選。“ORDERS_DERIVED” 是目標資料集的名稱。

WHERE OD.UPDATE_DTM > = (SELECT MAX(LAST_UPDATE_DTM) FROM “mydb”.”myTrasformTask”.”ORDERS_DERIVED” )
提示備註增量載入也可以將 ${TABLE} 標記法對應至透過轉換任務建立的目標物件。

此為完整查詢,使用篩選巨集和以 ${TABLE} 標記法取代的表格名稱。若為初始載入,則 LOADED_BY 設定為 INIT,若為增量載入,則設定為 INCR

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

這會產生初始載入查詢:

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

以及增量載入查詢:

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

最佳做法

  • 若新增 SQL 轉換,不會自動定義主要金鑰。在資料集索引標籤中,新增金鑰到資料集。

  • 請勿手動在轉換的輸出中建立欄標頭。

  • 避免使用 SELECT 搭配 *,因為這可能會在每次查詢執行時傳回不同的欄。若結構描述中有變更,請據此變更查詢並重新執行描述表格。然後您可以編輯欄並調整表格。

此頁面是否對您有幫助?

若您發現此頁面或其內容有任何問題——錯字、遺漏步驟或技術錯誤——請告知我們可以如何改善!