共用方式為


針對 Azure Synapse Analytics 專用 SQL 集區 的移轉方法至 Fabric 資料倉儲

適用於:Microsoft Fabric 中的✅ 資料庫

本文詳細說明將 Azure Synapse Analytics 專用 SQL 集區中的資料倉儲移轉至 Microsoft Fabric Warehouse 的方法。

小提示

如需策略和規劃移轉的詳細資訊,請參閱移轉規劃:Azure Synapse Analytics 專用 SQL 集區至 Fabric 資料倉儲

您可以使用適用於資料倉儲的 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 Warehouse 的移轉專案時,請選擇一個您能夠處理的工作負載區域。

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

小提示

建立需要移轉的物件詳細目錄,並記錄整個移轉流程 (從開始到結束),以便針對其他專用 SQL 集區或工作負載進行重複。

初始移轉中移轉的資料量應該夠大,才能示範 Fabric Warehouse 環境的功能和優點,但也不能太大而無法快速展現價值。 1-10 TB 範圍內的大小是典型大小。

使用 Fabric Data Factory 進行移轉

在本節中,我們會討論熟悉 Azure Data Factory 和 Synapse 管線的低程式碼/無程式碼角色使用 Data Factory 的選項。 此拖放 UI 選項提供簡單的步驟來轉換 DDL 及移轉資料。

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

  • 將結構描述 (DDL) 轉換為 Fabric Warehouse 語法。
  • 在 Fabric Warehouse 上建立結構描述 (DDL)。
  • 將資料移轉至 Fabric Warehouse。

選項1。 資料架構/資料移轉 - 複製精靈和 ForEach 複製活動

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

  • 在專用 SQL 集區中產生並執行 22 個 SELECT 查詢 (每個選取的資料表各一個)。
  • 請確定您擁有適當的 DWU 和資源類別,以允許執行產生的查詢。 針對此案例,您需要至少有 DWU1000 並用 staticrc10,以便最多允許 32 個查詢來處理已提交的 22 個查詢。
  • Data Factory 將資料從專用 SQL 集區直接複製到 Fabric Warehouse 需要暫存。 攝取過程包含兩個階段。
    • 第一個階段包含將資料從專用 SQL 集區擷取至 ADLS,並稱為檢閱及測試。
    • 第二個階段包含將資料從暫存區匯入至 Fabric Warehouse。 大部分的資料擷取時間都處於準備階段。 綜上所述,資料準備對擷取效能會有巨大的影響。

使用複製精靈產生 ForEach 提供了簡單的 UI,可一步轉換 DDL 並將選取的資料表從專用 SQL 集區內嵌至 Fabric Warehouse。

不過,整體輸送量並非最佳。 使用中介階段的需求,以及「資料來源至中介階段」步驟中的讀取和寫入並行化,是造成效能延遲的主要因素。 建議只針對維度資料表使用此選項。

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

若要改善輸送量以使用 Fabric 管線載入較大的事實數據表,建議您針對每個具有分割區選項的事實數據表使用 [複製活動]。 這對於複製作業提供了最佳效能。

您可以選擇使用來源資料表的實體分割(若有提供)。 如果資料表沒有實體分區,您必須指定分區欄位,並提供最小值和最大值,以使用動態分區。 在下列螢幕擷取畫面中,管線 [ 來源 ] 選項會根據資料行指定 ws_sold_date_sk 分割區的動態範圍。

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

雖然使用分區可以增加暫存階段的吞吐量,但仍需要考慮適當的調整:

  • 根據您選擇的分割區域範圍,可能會有機會使用所有的並行插槽,因為它可能會在專用 SQL 集區上產生超過 128 個查詢。
  • 您需要將規模調整至至少 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,以允許執行擷取查詢。 利用分割,速率會比沒有分割選項提高 10 倍。 您可以增加 DWU 以透過計算資源取得額外的輸送量,但專用 SQL 集區最多允許 128 個作用中查詢。

如需有關 Synapse DWU 至 Fabric 對應的詳細資訊,請參閱部落格:將 Azure Synapse 專用 SQL 集區對應至 Fabric 資料倉儲計算

選項 3。 DDL 移轉 - 複製精靈與 ForEach 複製活動

上述兩個選項是較小型資料庫的絕佳資料移轉選項。 但是,如果您需要較高的輸送量,我們建議使用替代選項:

  1. 將資料從專用 SQL 集區擷取至 ADLS,因此可降低階段效能額外負荷。
  2. 使用 Data Factory 或 COPY 命令,將資料內嵌至 Fabric Warehouse。

您可以繼續使用 Data Factory 來轉換結構描述 (DDL)。 使用複製精靈,您可以選取特定的資料表或所有資料表。 根據設計,此過程會一步完成結構描述和資料的移轉,透過查詢語句中使用 TOP 0 假條件,擷取不含任何資料列的結構描述。

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

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

您可以使用 Fabric 管線,從任何來源 Azure SQL Database 或專用 SQL 集區輕鬆移轉資料表物件的 DDL (結構描述)。 此管線會將來源專用 SQL 池資料表的結構描述(DDL)移轉至 Fabric 倉儲。

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

管線設計:參數

此管線接受參數 SchemaName,可讓您指定要移轉的結構描述。 dbo 結構描述是預設值。

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

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 活動內,新增複製活動。 此方法會使用管線內的動態運算式語言來建置SELECT TOP 0 * FROM <TABLE>,僅將不含資料的架構移轉至 Fabric 倉儲。

在 [來源] 索引標籤中:

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

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

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

  • 將 [資料存放區類型] 設定為 [工作區]
  • 工作區資料存放區類型資料倉儲,而 [資料倉儲] 設定為 Fabric Warehouse。
  • 目的地資料表的結構描述和資料表名稱是使用動態內容定義的。
    • 目前架構指的是這次迭代的欄位,SchemaName 和片段: @item().SchemaName
    • 資料表正在參考 TableName 的程式碼段:@item().TableName

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

管線設計:匯流器

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

執行此處理流程之後,您會看到資料倉儲已填入來源中的每個資料表,並具有適當的結構。

使用 Synapse 專用 SQL 集區中的預存程序進行移轉

此選項使用預存程序來執行 Fabric 移轉。

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

移轉預存程序可以執行的動作:

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

對於以下人員而言,為絕佳選項:

  • 熟悉 T-SQL。
  • 想要使用整合式開發環境,例如 SQL Server Management Studio (SSMS)。
  • 想要更細微地控制他們想要處理的工作。

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

對於資料移轉,您需要使用 COPY INTO 或 Data Factory 將資料內嵌至 Fabric Warehouse。

使用 SQL 資料庫專案移轉

Microsoft Fabric Data Warehouse 支援於 Visual Studio Code 內可用的 SQL Database Projects 擴充功能中。

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

如需有關 Microsoft Fabric 中倉儲的原始檔控制的詳細資訊,包括 Git 整合和部署管線,請參閱使用 Warehouse 進行原始檔控制

對於偏好使用 SQL 資料庫專案進行部署的人員來說,這是一個絕佳選項。 此選項基本上已將 Fabric 移轉預存程序整合到 SQL 資料庫專案中,以提供順暢移轉體驗。

SQL 資料庫專案可以:

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

對於資料移轉,您會使用 COPY INTO 或 Data Factory 將資料內嵌至 Fabric Warehouse。

Microsoft Fabric CAT 小組已提供一組 PowerShell 腳本,以處理透過 SQL 資料庫專案擷取、建立和部署架構 (DDL) 和資料庫程式碼 (DML)。 如需使用 SQL 資料庫專案與實用 PowerShell 指令碼的逐步導覽,請參閱 GitHub.com 上的 microsoft/fabric-migration

如需有關 SQL 資料庫專案的詳細資訊,請參閱開始使用 SQL Database Projects 延伸項目建置和發佈專案

使用 CETAS 移轉資料

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

CETAS 可以執行的動作:

  • 將資料擷取至 ADLS。
    • 此選項需要使用者在 Fabric Warehouse 上建立結構描述 (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 Warehouse 語法。
  • 在 Fabric Warehouse 上建立結構描述 (DDL)。
  • 將資料庫程式碼 (DML) 轉換為 Fabric 語法。

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

dbt 架構採用程式優先的方法。 必須使用本文件中所列的選項來移轉資料,例如 CETASCOPY/Data Factory

適用於 Microsoft Fabric 資料倉儲的 dbt 配接器,可讓以不同平台 (例如 Synapse 專用 SQL 集區、Snowflake、Databricks、Google Big Query 或 Amazon Redshift) 為目標的現有 dbt 專案移轉至具有簡單組態變更的 Fabric Warehouse。

若要開始使用以 Fabric Warehouse 為目標的 dbt 專案,請參閱教學課程:設定適用於 Fabric 資料倉儲的 dbt。 本文件還會列出在不同倉儲/平台之間移動的選項。

資料攝取至 Fabric Warehouse

若要擷取至 Fabric Warehouse,請使用 COPY INTO 或 Fabric Data Factory,視您的喜好設定而定。 這兩種方法都是建議且效能最佳的選項,因為它們具有對等的效能輸送量,前提是檔案已擷取至 Azure Data Lake Storage (ADLS) Gen2。

需要注意的幾個因素,讓您可以設計流程以達到最大效能:

  • 若使用 Fabric,將多個資料表從 ADLS 同時載入至 Fabric Warehouse 時,沒有任何資源爭用。 因此,載入平行執行緒時,效能不會降低。 最大資料匯入輸送量僅會受限於 Fabric 容量的計算能力。
  • Fabric 工作負載管理提供了載入和查詢資源分配的隔離。 查詢和資料載入同時執行時,不會有任何資源爭用。