Azure Synapse Analytics 專用 SQL 集區遷移至 Fabric Data Warehouse 的方法

適用於: ✅ Microsoft Fabric 中的倉庫

本文說明從Azure Synapse Analytics專用 SQL 池遷移到 Microsoft Fabric Data Warehouse 的方法。

小提示

如需進一步了解遷移策略與規劃,請參閱 遷移規劃:Azure Synapse Analytics 專用 SQL 集區移轉至 Fabric Data Warehouse。

您可以使用適用於資料倉儲的 Fabric 移轉小幫手,獲得從 Azure Synapse Analytics 專用 SQL 集區移轉的自動化體驗。 本文的其餘部分包含更多手動移轉步驟。

下表總結了資料結構(DDL)、資料庫程式碼(DML)及資料遷移的方法。 選項欄連結到每個情境的詳細資訊。

選項號碼 選項 其功能是什麼 技巧還是偏好 Scenario
1 數據處理站 模式 (DDL) 轉換
資料擷取
資料提取
ADF/Pipeline 簡化的一體化結構 (DDL) 和資料遷移。 建議使用在維度資料表上。
2 具有分區的資料工廠 模式 (DDL) 轉換
資料擷取
資料提取
ADF/Pipeline 使用分區選項來提高讀取/寫入的平行處理能力,與選項1相比,可提供10倍的吞吐量,建議用於事實資料表。
3 包含加速程式碼的 Data Factory 模式 (DDL) 轉換 ADF/Pipeline 首先轉換和移動結構描述 (DDL),然後使用 CETAS 擷取資料,並透過 COPY/Data Factory 匯入資料,以獲得最佳整體資料匯入效能。
4 預存程序加速程式碼 模式 (DDL) 轉換
資料擷取
程式碼評定
T-SQL 使用 IDE 的 SQL 使用者,可更細微地控制他們想要處理的工作。 使用 COPY/Data Factory 導入資料。
5 Visual Studio Code 的 SQL 資料庫專案擴充 模式 (DDL) 轉換
資料擷取
程式碼評定
SQL 專案 SQL 資料庫專案,專案用於部署並整合選項 4。 使用 COPY 或 Data Factory 引入資料。
6 創建外部表作為選擇 (CETAS) 資料擷取 T-SQL 將高效能且具成本效益的資料匯入至 Azure Data Lake Storage (ADLS) Gen2。 使用 COPY/Data Factory 導入資料。
7 使用 dbt 遷移 模式 (DDL) 轉換
資料庫程式碼 (DML) 轉換
dbt 現有的 dbt 使用者可使用 dbt Fabric 配接器來轉換其 DDL 和 DML。 然後,您必須使用此資料表中的其他選項來移轉資料。

選擇初始移轉的工作負載

在決定 Synapse 專用 SQL 集區到 Fabric Data Warehouse 的移轉專案應從哪裡著手時,請選擇一個您可以著手的工作負載領域:

  • 透過快速提供新環境的好處,證明遷移到Fabric Data Warehouse的可行性。 從小而簡單的開始,並準備多次小型遷移。
  • 可讓內部技術人員有時間透過移轉其他區域時所使用的程序和工具,獲得相關體驗。
  • 建立範本,專門針對來源 Synapse 環境進行遷移,以及有助於此的現有工具和程序。

小提示

建立要遷移的物件清單,並從頭到尾記錄遷移過程,這樣你就能在其他專用的 SQL 池或工作負載上重複這個流程。

初期遷移中遷移的資料量應足夠大以展現Fabric Data Warehouse環境的能力與效益,但又不能過大以快速展現價值。 1-10 TB 範圍內的大小是典型大小。

使用 Fabric Data Factory 進行移轉

本節介紹熟悉 Azure Data Factory 與 Synapse 管線的使用者所需的資料工廠選項。 拖放介面提供了簡單的方式來轉換 DDL 並遷移資料。

Fabric Data Factory 可以執行下列工作:

  • 將架構(DDL)轉換成Fabric Data Warehouse語法。
  • 在 Fabric Data Warehouse 建立架構(DDL)。
  • 將資料遷移到Fabric Data Warehouse。

選項1。 架構與資料遷移 - 複製資料助理與 ForEach 複製活動

此方法使用 Data Factory Copy Data Assistant 連接來源專用 SQL 池,將專用 SQL 池的 DDL 語法轉換為 Fabric,並將資料複製至 Fabric Data Warehouse。 您可以選取一或多個目標資料表 (針對 TPC-DS 資料集,有 22 個資料表)。 它會產生 ForEach 來迴圈遍歷 UI 中選擇的資料表清單,並生成 22 個平行的複製作業執行緒。

  • 22 SELECT 個查詢(每個選取的表格一個)會在專用的 SQL 池中產生並執行。
  • 確保你有適當的 DWU 和資源類別,讓產生的查詢能夠執行。 針對此案例,您需要至少有 DWU1000 並用 staticrc10,以便最多允許 32 個查詢來處理已提交的 22 個查詢。
  • 若要直接從專用 SQL 池複製資料到 Data Factory Fabric Data Warehouse,則需要暫存。 攝取過程分為兩個階段:
    • 第一階段是從專用的 SQL 池中擷取資料到 ADLS。 此階段稱為暫存階段。
    • 第二階段將分階段資料匯入Fabric Data Warehouse。 大部分的攝取時間都花在分段階段,因此分段對效能有顯著影響。

使用 Copy 助理產生 ForEach 活動,可提供簡單的介面,一步完成 DDL 轉換,並將專用 SQL 集區中的所選資料表擷取至 Fabric Data Warehouse。

然而,此選項無法提供最佳的整體吞吐量。 暫存以及在原始碼到階段階段中平行化讀寫的需求是主要的延遲來源。 這個選項只用於尺寸表。

選項 2. DDL/資料遷移 - 使用分割區選項的管道

為了提升使用 Fabric 管線載入較大事實表時的吞吐量,請為每個事實表使用複製活動並啟用分割。 此配置可提供最佳的複製活動效能。

可用時,請使用來源資料表的實體分割區。 如果資料表沒有物理分割,請指定一個分割欄位,以及動態分割的最小值和最大值。 在以下截圖中,管線 來源 選項根據欄位 ws_sold_date_sk 指定動態分割區範圍。

管線的螢幕擷取畫面,顯示指定主鍵或動態分割區資料行日期的選項。

分割可以提升暫存吞吐量。 設定時請參考以下指引:

  • 根據分割區範圍不同,操作可能會產生超過 128 筆查詢,並使用專用 SQL 池中所有的並發時隙。
  • 你必須將規模擴充至至少 DWU6000,才能執行所有查詢。
  • 例如,針對 TPC-DS web_sales 資料表,會有 163 個查詢提交至專用 SQL 集區。 在 DWU6000 時,已執行 128 個查詢,另有 35 個查詢在佇列中。
  • 動態分區會自動選取範圍分區。 在此案例中,每個提交至專用 SQL 集區的 SELECT 查詢的範圍為 11 天。 例如:
    WHERE [ws_sold_date_sk] > '2451069' AND [ws_sold_date_sk] <= '2451080')
    ...
    WHERE [ws_sold_date_sk] > '2451333' AND [ws_sold_date_sk] <= '2451344')
    

對於事實表,請使用 Data Factory 並啟用分割選項以提升吞吐量。

然而,平行讀取需要你將專用的 SQL 池擴展到較高的 DWU,才能執行擷取查詢。 與不使用分割相比,分割可將速率提升十倍。 你可以增加 DWU 以增加吞吐量,但專用的 SQL 池最多允許 128 個主動查詢。

如需更多關於 Synapse DWU 與 Fabric 對應關係的資訊,請參閱部落格:將 Azure Synapse 專用 SQL 集區對應至 Fabric 資料倉儲計算。

選項 3。 DDL 遷移 - 複製資料助理 針對每個複製活動

前兩種選項適用於 較小 的資料庫。 如果你需要更高的吞吐量,請使用以下替代方案:

  1. 從專用的 SQL 池中擷取資料到 ADLS,以減少暫存開銷。
  2. 使用 Data Factory 或 COPY 指令將資料匯入你的倉庫。

您可以繼續使用 Data Factory 來轉換結構描述 (DDL)。 透過複製資料助理,您可以選擇特定資料表或 所有資料表。 設計上,此方法能一步遷移結構,透過查詢語句中的假條件 TOP 0 ,提取無列的結構。

下列程式碼範例涵蓋使用 Data Factory 的結構描述 (DDL) 移轉。

程式碼範例:使用 Data Factory 進行模式 (DDL) 遷移

你可以使用 Fabric Pipelines,輕鬆從任何來源 Azure SQL Database 或專用 SQL 集區移轉表格物件的 DDL(結構描述)。 此管線會將來源專用 SQL 池表的結構(DDL)遷移至 Fabric Data Warehouse。

Fabric Data Factory 的螢幕擷取畫面,顯示一個查找物件指向一個 For Each 物件。在 For Each 物件內,有執行DDL遷移的活動。

管線設計:參數

這個管線接受一個參數 SchemaName,用來指定要遷移哪些結構。 預設模式為 dbo。

在 [預設值] 欄位中,輸入以逗號分隔的資料表結構描述清單,指出要移轉的結構描述:'dbo','tpch' 提供兩個結構描述 dbo 和 tpch。

Data Factory 截圖顯示管線的參數分頁。在名稱欄位中,寫著「SchemaName」。在預設值欄位中,'dbo'、'tpch',表示這兩個結構應該被遷移。

管線設計:查找活動

建立查閱活動,並將 [連線] 設定為指向來源資料庫。

在 [設定] 索引標籤中:

  • 將 [資料存放區類型] 設定為 [外部]。

  • 連線 是您 Azure Synapse 專用的 SQL 集區。 [連線類型]是 [Azure Synapse Analytics]。

  • 使用查詢 設定為 查詢。

  • 用動態表達式建立 查詢 欄位,這樣你就能在查詢中使用該參數 SchemaName ,回傳目標來源資料表的清單。 選擇 查詢 ,然後選擇 新增動態內容。

    查詢活動內的此運算式會產生 SQL 陳述式,以查詢系統檢視表,進而擷取結構描述和資料表的清單。 它會參考該 SchemaName 參數,以便對 SQL 架構進行過濾。 此表達式的輸出是一個 SQL 架構與資料表陣列,ForEach 活動將其作為輸入。

    使用下列程式碼傳回具有其結構描述名稱的所有使用者資料表清單。

    @concat('
    SELECT s.name AS SchemaName,
    t.name  AS TableName
    FROM sys.tables AS t
    INNER JOIN sys.schemas AS s
    ON t.type = ''U''
    AND s.schema_id = t.schema_id
    AND s.name in (',coalesce(pipeline().parameters.SchemaName, 'dbo'),')
    ')
    

Data Factory 的截圖顯示管線的設定標籤。已選取查詢按鈕,並將程式碼貼入查詢欄位。

流程設計:ForEach 迴圈

針對 ForEach 循環,在 [設定] 索引標籤中設定下列選項:

  • 關閉序列,允許多次迭代同時執行。
  • 將 [批次計數] 設定為 50,限制並行反覆項目的數目上限。
  • 在 項目 欄位中使用動態內容來參考查詢活動的輸出。 使用下列程式碼片段:@activity('Get List of Source Objects').output.value

顯示 [ForEach 迴圈活動設定] 索引標籤的螢幕擷取畫面。

管道設計:在 ForEach 迴圈中的複製活動

在 ForEach 活動內,新增複製活動。 此方法會在管線中使用動態運算式語言(Dynamic Expression Language)建立一個 SELECT TOP 0 * FROM <TABLE> 陳述式,將僅有結構描述而不含資料的內容遷移至資料倉儲。

在 [來源] 索引標籤中:

  • 將 [資料存放區類型] 設定為 [外部]。
  • 連線 是您 Azure Synapse 專用的 SQL 集區。 [連線類型]是 [Azure Synapse Analytics]。
  • 將 使用查詢 設為 查詢。
  • 在 查詢 欄位,貼上動態內容查詢,並使用此表達式,回傳零列,但包含表格結構: @concat('SELECT TOP 0 * FROM ',item().SchemaName,'.',item().TableName)

Data Factory 的螢幕擷取畫面,其中顯示 ForEach 迴圈內複製活動的 [來源] 索引標籤。

在 [目的地] 索引標籤中:

  • 將 [資料存放區類型] 設定為 [工作區]。
  • 將 Workspace 資料儲存類型 設定為 Data Warehouse,並將 資料倉儲 設定為該倉儲。
  • 目的地資料表的結構描述和資料表名稱是使用動態內容定義的。
    • Schema 指的是當前迭代的欄位, SchemaName 片段如下: @item().SchemaName
    • 表格參照 TableName,並附上片段:@item().TableName

Data Factory 的螢幕擷取畫面,其中顯示每個 ForEach 迴圈內複製活動的 [目的地] 索引標籤。

管線設計:匯流器

對於接收端,請指向您的 Warehouse,並參考來源架構和資料表名稱。

當你執行這個管線時,你會看到你的資料倉儲中已填入來源中的各個資料表,並採用正確的結構描述。

透過 Synapse 專用 SQL 池中的儲存程序進行遷移

此選項使用儲存程序進行遷移至Fabric Data Warehouse。

您可以在 GitHub.com 的 microsoft/fabric-migration 上取得程式碼範例。 此程式碼會作為開放原始碼進行共用,因此您可以隨意參與共同作業並協助社群。

Fabric 遷移儲存程序能做什麼:

  • 將架構(DDL)轉換成Fabric Data Warehouse語法。
  • 在 Fabric Data Warehouse 建立架構(DDL)。
  • 將資料從 Synapse 專用 SQL 集區擷取至 ADLS。
  • 標記 T-SQL 程式碼(預存程序、函式、檢視)中不受支援的 Fabric 語法。

如果你符合以下情況,這個選項就很適合你:

  • 熟悉 T-SQL。
  • 想使用整合開發環境來進行 T-SQL 開發。
  • 想要更細緻地控制你負責哪些任務。

您可以執行結構描述 (DDL) 轉換、資料擷取或 T-SQL 程式碼評定的特定預存程序。

資料遷移時,請使用 COPY INTO 或 Fabric Data Factory 將資料匯入倉庫。

使用 SQL 資料庫專案移轉

Fabric Data Warehouse 支援 Visual Studio Code 內可用的 SQL 資料庫專案擴充功能。

此擴充功能可在 Visual Studio Code 中使用。 此功能可啟用原始檔控制、資料庫測試和結構描述驗證的功能。

欲了解更多關於原始碼控制的資訊,請參閱 開發與部署概述。

如果你偏好使用 SQL Database Project 來部署,可以使用這個選項。 此選項將 Fabric 遷移的儲存程序整合進 SQL 資料庫專案,提供無縫的遷移體驗。

SQL 資料庫專案可以:

  • 將架構(DDL)轉換成Fabric Data Warehouse語法。
  • 在 Fabric Data Warehouse 建立架構(DDL)。
  • 將資料從 Synapse 專用 SQL 集區擷取至 ADLS。
  • 標記 T-SQL 程式碼的非支援語法 (預存程序、函式、檢視)。

資料遷移時,請使用 COPY INTO 或 Data Factory 將資料匯入倉庫。

Microsoft Fabric CAT 團隊提供 PowerShell 腳本,透過 SQL 資料庫專案擷取、建立及部署結構(DDL)及資料庫程式碼(DML)。 欲了解攻略,請參考 GitHub 上的 microsoft/fabric-migration。

欲了解更多 SQL 資料庫專案資訊,請參閱「 開始使用 SQL 資料庫專案擴充功能 」及 「從命令列建置資料庫專案」。

使用 CETAS 移轉資料

T-SQL CREATE EXTERNAL TABLE AS SELECT (CETAS)指令提供最具成本效益且最佳的方法,將資料從 Azure Synapse 專用 SQL 池擷取至 Azure Data Lake Storage (ADLS) Gen2。

CETAS 可以執行的動作:

  • 將資料擷取至 ADLS。
    • 此選項要求您先在資料倉儲中建立綱要(DDL),然後才能匯入資料。 考慮本文中遷移結構描述 (DDL) 的選項。

此選項的優點是:

  • 移轉程序對來源 Synapse 專用 SQL 集區中的每個資料表都只會提交一個查詢。 這個查詢不會佔用所有並發時段,也不會阻擋並行客戶生產的 ETL 或查詢。
  • 你不需要擴充至 DWU6000,因為每個資料表只會使用一個並行插槽,所以你可以使用較低的 DWU。
  • 擷取過程能在所有運算節點間平行執行,這項功能提升了效能。

使用 CETAS 將資料匯出為 Parquet 檔案至 ADLS。 Parquet 檔案具備高效率資料儲存的優勢,並透過欄式壓縮,減少在網路上傳輸時所需的頻寬。 由於 Fabric 以 Delta parquet 格式儲存資料,資料擷取速度比文字檔快 2.5 倍,因為擷取過程中不會轉換成 Delta 格式的額外負擔。

若要增加 CETAS 輸送量:

  • 新增平行 CETAS 作業,增加對並行插槽的使用,以允許更高的吞吐量。
  • 調整 Synapse 專用 SQL 集區上的 DWU 規模。

透過 dbt 移轉

本節介紹已在 Synapse 專用 SQL 池環境中使用 dbt 的客戶的 dbt 選項。

dbt 可以執行的動作:

  • 將架構(DDL)轉換成Fabric Data Warehouse語法。
  • 在 Fabric Data Warehouse 建立架構(DDL)。
  • 將資料庫程式碼 (DML) 轉換為 Fabric 語法。

dbt 架構會在每次執行時,即時產生 DDL 和 DML (SQL 指令碼)。 透過使用以陳述形式SELECT表達的模型檔案,dbt 透過改變設定檔(連接字串)和適配器類型,立即將 DDL/DML 轉譯到任何目標平台。

DBT 框架採用程式碼優先的方法。 請使用本文件中列出的選項,如 CETAS 或 COPY/Data Factory 來遷移資料。

透過使用 dbt 介面接器Microsoft Fabric Data Warehouse,你可以將針對不同平台(如Azure Synapse專用 SQL 池、Snowflake、Databricks、Google BigQuery 或 Amazon Redshift)的現有 dbt 專案,透過簡單的設定變更遷移到倉庫。

要開始針對Fabric Data Warehouse的 DBT 專案,請參考教學:為Fabric Data Warehouse設定 DBT。 文件中也列出了在不同倉庫與平台間移動的選項。

將資料擷取至 Fabric Data Warehouse

若要匯入 Fabric Data Warehouse,請依照你的偏好使用COPY INTO或Fabric Data Factory。 這兩種方法是推薦且效能最佳的選項,因為它們在效能吞吐量相當的情況下,前提是檔案已解壓到 Azure Data Lake Storage(ADLS)Gen2。

透過考慮以下因素,設計您的流程以達到最大效能:

  • 有了 Fabric,從 ADLS 同時載入多個資料表到Fabric Data Warehouse時,就不會有資源爭用。 因此,載入平行執行緒時,效能不會降低。 最大擷取吞吐量僅受 Fabric 運算能力的限制。
  • Fabric 工作負載管理提供了載入和查詢資源分配的隔離。 當查詢和資料載入同時執行時,不會有資源爭用。