# 新增 SQL 轉換

您可以在轉換任務中包含基於 SQL 的表格。SQL 轉換允許您將 SQL SELECT 查詢輸入到管道中，以定義複雜或簡單的轉換。您可以讓 SQL assistant 使用生成式 AI 從文字提示產生查詢。您還可以使用巨集來調整查詢，以便在執行初始載入或增量載入時執行。

在將 SQL 新增至轉換之前，您可以使用 SQL workbench 探索資料並驗證唯讀 SQL。如需詳細資訊，請參閱 [使用 SQL Workbench 探索資料](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/SQL-workbench-data-exploration.htm)。

如需有關建立轉換任務的詳細資訊，請參閱 [轉換資料](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Transformations.htm)。

## 新增 SQL 轉換

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

1. 在 轉換 中，選取要包含在查詢中的資料集，然後按一下 新增 SQL 轉換。

   在 名稱 中設定轉換的名稱。如需有關其他設定的詳細資訊，請參閱 [設定](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Adding-SQL-based-tables.htm#Settings)。

   準備好建立 SQL 轉換時，按一下 新增。

   隨即顯示 編輯 SQL 轉換。

2. 在查詢窗格中寫入查詢以傳回基於 SQL 的表格。

   如需詳細資訊，請參閱 [編輯 SQL 查詢](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Adding-SQL-based-tables.htm#Editing)。

3. 按一下 執行查詢。

   這將擷取中繼資料和資料的預覽。

4. 在 參數 中檢閱參數。

   如需詳細資訊，請參閱 [參數](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Adding-SQL-based-tables.htm#Paramete)。

5. 在 中繼資料 中設定主索引鍵。

   如需詳細資訊，請參閱 [中繼資料](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Adding-SQL-based-tables.htm#Metadata)。

6. 當您對查詢結果感到滿意時，按一下 儲存並關閉。資料集現在已新增至目標清單中，您可以預覽它。

## 編輯 SQL 查詢

在查詢窗格中輸入查詢以傳回基於 SQL 的表格。查詢只能從您選取的來源資料集中讀取，但您可以使用 新增 來新增更多來源資料集。

* 您可以建立一個陳述式以從 物件 載入資料集。按一下 the 更多 icon，然後按一下 新增 SELECT 陳述式。

* 您可以透過按一下 the 更多 icon，然後按一下 複製，將資料集的名稱複製到剪貼簿。

* 按一下 &gt; 將資料集或欄名稱移至編輯器。

* 按一下 the 搜尋 icon 以在編輯器中搜尋並取代文字。

資訊備註您可以使用 SQL assistant 透過生成式 AI 產生查詢。如需詳細資訊，請參閱 [從文字提示產生 SQL 轉換](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Generating-SQL-from-text-prompt.htm)。SQL assistant 在 Qlik Cloud 政府 中無法使用。

如果使用增量載入，您可以使用 巨集 來調整查詢，以便在執行初始載入或增量載入時執行。

如需詳細資訊，請參閱 [使用巨集來調整查詢以適應載入類型](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Adding-SQL-based-tables.htm#Using)。

### 鍵盤快速鍵

資訊備註鍵盤快速鍵的表示假設您在 Windows 中工作。對於 macOS，請使用 Command 而不是 Ctrl。

* Ctrl+F 搜尋並取代

* Ctrl+/ 註解/取消註解目前行

* Ctrl+Enter 執行查詢

* Ctrl+Z 復原

* Ctrl+Y 重做

### 預覽結果

您可以在 結果 中使用資料的樣本來預覽結果。

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

您必須被指派下列角色才能預覽資料：

* 在連線所在的空間中具有 可檢視資料 權限。

* 在專案所在的空間中具有 可檢視 權限。

隨即顯示使用資料樣本的結果。您可以使用 列數 設定樣本中要包含多少資料列。

* 按一下 上次執行的查詢 以查看上次執行的時間和上次執行查詢的持續時間。

#### 篩選結果

您可以依一個或多個欄篩選結果。

* 在要篩選的第一個欄上按一下 the 更多 icon，然後按一下 篩選。

  選取要使用的運算子以及要篩選的值。

  您可以透過按一下 新增篩選條件 來新增更多欄篩選條件。

篩選條件只會影響現有的樣本資料。

#### 排序結果

您可以依特定欄對資料樣本進行排序。

* 在要排序的欄上按一下 the 更多 icon，然後按一下 遞增排序 或 遞減排序。

排序只會影響現有的樣本資料。如果您使用篩選條件僅包含 2024 年的訂單並反轉排序順序，樣本資料仍將僅包含 2024 年的訂單。

#### 管理顯示的欄

您可以選取要在結果中顯示的欄。儲存轉換時，不會儲存此選取項目。

* 透過在欄上按一下 the 更多 icon，然後按一下 隱藏欄 來隱藏欄。

* 透過在任何欄上按一下 the 更多 icon，然後按一下 顯示的欄 來管理所有欄的顯示。

### 參數

按一下 參數 以變更 SELECT 查詢中的參數。參數應對應至來源或目標物件。

在下列情況下，參數會自動對應：

* 在 物件 中使用 新增 SELECT 陳述式。

* 按一下 &gt; 將資料集或欄名稱移至編輯器。

* 參數名稱與 物件 中表格的表格名稱相符。

資訊備註如果您使用任意參數名稱，則必須手動對應參數。只有與資料集名稱相符的參數名稱才會自動對應。

您可以對應至

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

* 目前結構

* 目標物件

  只有在增量巨集內定義參數時，才能對應目標物件。

提示備註您可以將參數取代為參考，以使查詢更易於閱讀。變更 參數 中的值，SELECT 查詢 中的參考也會隨之變更。

### 中繼資料

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

* 在 索引鍵 欄中設定主索引鍵。

  您可以透過按一下 建議並驗證索引鍵 來取得合適主索引鍵的建議，並驗證索引鍵。

* 在 可為 Null 欄中設定該欄是否可為 Null。

* 選取一個欄並按一下 編輯 以設定欄名稱、索引鍵、可為 Null 和資料類型。

#### 建議並驗證索引鍵

您可以透過按一下 建議並驗證索引鍵 來取得合適主索引鍵的建議，並驗證索引鍵。完整的 SQL 查詢必須至少執行過一次。

* 如果您已選擇加入跨區域推論，則會使用 GenAI 來建議索引鍵。這允許 Qlik Cloud 將推論請求傳送到您的租用戶區域之外。如需有關推論處理位置的詳細資訊和最新資訊，請參閱 [啟用跨區域推斷](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Admin/cross-region-data-processing.htm)。

  資訊備註Qlik 不控制產生的輸出。由於 GenAI 的性質，如果沒有經過檢閱或編輯，回應可能無法產生符合您需求的 SQL。根據 Qlik 客戶協議的條款，產生的查詢被視為「內容」。

  Qlik Cloud 政府備註

  GenAI 輔助的索引鍵建議在 Qlik Cloud 政府 中無法使用。

  如果未啟用 GenAI，將根據來源表格資料以程式設計方式建議索引鍵。

* 驗證將始終在不使用 GenAI 的情況下執行，透過執行 SQL 查詢來確保沒有重複項或 NULL 值。

  資訊備註只有在查詢傳回資料時才能進行驗證。

* 建議並驗證索引鍵

  這將檢閱查詢和來源表格索引鍵，並建議有效的主索引鍵。此作業可能需要一些時間。

* 驗證索引鍵

  這將驗證現有的主索引鍵，以確保它們是唯一且非 NULL 的。此作業可能需要一些時間。

* 建議但不驗證

  這將檢閱查詢和來源表格索引鍵，並在不驗證的情況下建議主索引鍵。在套用之前，請手動檢閱並驗證索引鍵。

## 執行查詢

在開發期間，您可以隨時按一下 執行查詢 來執行查詢。第一次執行查詢時，將擷取中繼資料。執行查詢後，您可以前往 中繼資料 並設定主索引鍵，這是完成轉換所必需的。

資訊備註如果編輯器包含多個查詢，您可以透過選取查詢並按一下 執行查詢 來執行單一查詢。

## 使用巨集來調整查詢以適應載入類型

如果使用增量載入，您可以使用 巨集 來調整查詢，以便在執行初始載入或增量載入時執行。

選取巨集並在相應的子句中新增查詢。

* 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 &gt; 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 &gt; = (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 &gt;= (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 &gt;= (SELECT MAX(LAST\_UPDATE\_DTM) FROM ${TARGET\_TABLE} )

## 設定

按一下 the 設定 icon 以編輯 SQL 轉換的設定。

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

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

在具體化中，選取是否應具體化轉換的輸出。您可以選擇繼承資料任務設定中的設定。
* 開啟將會建立表格，並且將會處理相關的 ELT 處理。

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

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

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

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

* 若增量載入是關閉

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

資訊備註若查詢將會選取應存在於目標中的所有記錄，請將增量載入設定為關閉。將會在目標中刪除未選取的記錄。

## 最佳實務

* 當您新增 SQL 轉換時，不會自動定義主索引鍵。在 資料集 索引標籤中將索引鍵新增至資料集。

* 請勿手動在轉換後的輸出中建立欄標題。

* 避免將 SELECT 與 \* 一起使用，因為這可能會在每次執行查詢時傳回不同的欄。如果結構描述發生變更，請相應地變更查詢並再次執行 描述表格。然後您可以編輯欄並調整表格。