將資料匯入倉庫

適用於:✅Microsoft Fabric 的倉儲

Microsoft Fabric 中的 Warehouse 提供內建的資料擷取工具。 利用這些工具,透過無程式碼或豐富的體驗,大規模地將資料匯入倉庫。

選擇資料擷取工具

根據以下標準選擇資料擷取選項:

  • 使用 COPY (Transact-SQL) 語句來進行程式碼豐富的資料擷取操作。 它提供最高的資料擷取吞吐量。 當你需要將資料擷取納入 Transact-SQL 邏輯時,會使用它。
    • 要開始,請參考 使用 COPY 陳述式匯入資料。
    • Warehouse 也支援傳統的 BULK INSERT 陳述式,以保持相容性。 在 Fabric Data Warehouse 中,此陳述式對應到使用傳統載入選項時的 COPY INTO 行為。
    • COPY Warehouse 中的語句支援來自 Azure 儲存帳戶和 OneLake Lakehouse 資料夾的資料來源。
    • 在 Workspace Identity 子句中指定 CREDENTIAL,以便在存取來源時模擬 Fabric 工作區身分。 例如: CREDENTIAL = (IDENTITY = 'Workspace Identity') 。 該語句會持續在目前使用者的 SQL 安全情境中執行。
  • 當資料位於你的應用程式層,且你無法先暫存檔案時,請使用 BCP API(預覽版) 直接在用戶端擷取資料。
    • 要開始,請參見使用 BCP API 導入資料(預覽)。
    • BCP API 支援 bcp.exe 腳本及應用程式 API,如 C# SqlBulkCopy 和 JavaSQLServerBulkCopy。
    • 若要達到最高吞吐量的檔案式擷取,只要可以暫存,就應優先使用 COPY INTO。
  • 使用 管線 來執行無程式碼或低程式碼、穩健的資料擷取工作流程,這些工作流程可以重複執行、按排程執行,或涉及大量資料。
    • 要開始,請參考 「使用管線將資料匯入你的倉庫」。
    • 透過使用管線,您可以協調完整的工作流程,實現完整的擷取、轉換、載入(ETL)體驗。 此經驗包括協助準備目的地環境、執行自訂 Transact-SQL 語句、執行查詢,或將資料從來源複製到目的地的活動。
  • 使用 資料流 ,提供無程式碼的體驗,允許自訂轉換以取得資料來源再導入。
    • 要開始,請參考 「使用資料流匯入資料」。
    • 這些轉換包括 (但不限於) 變更資料類型、新增或移除資料行,或使用函式來產生計算結果資料行。
  • 針對程式代碼豐富的體驗使用 T-SQL 擷取 來建立新的數據表,或使用相同工作區或外部記憶體內的原始資料來更新現有的數據表。
    • 要開始,請參考 使用 Transact-SQL 將資料匯入倉庫。
    • 使用 Transact-SQL 功能如 INSERT...SELECT、SELECT INTO 或 CREATE TABLE AS SELECT (CTAS),從同一工作空間中參考其他倉庫、湖屋或鏡像資料庫的資料表讀取資料。 你也可以利用這些功能讀取 OPENROWSET 函式的資料,該函式會參考外部Azure儲存帳號中的檔案。
    • 你也可以在Fabric工作空間的不同倉庫間寫跨資料庫查詢。

支援的資料格式和來源

Microsoft Fabric 中 Warehouse 的資料擷取支援多種資料格式與來源。 本文列出的每個選項都包含其支援的資料連接器類型與資料格式清單。

對於 T-SQL 擷取,資料表資料來源必須位於相同的Microsoft Fabric工作區內,檔案資料來源必須位於 Azure Data Lake 或 Azure Blob 儲存空間中。 你可以用三部分命名或是來源資料的 OPENROWSET 函式來查詢資料。 表格資料來源可以參考 Delta Lake 的資料集,而 OPENROWSET 則可以參考 Parquet、CSV 或 Azure Data Lake 或 Azure Blob 儲存中的 JSONL 檔案。

例如,假設一個工作區有兩個倉庫,分別命名 Inventory 為 和 Sales。 以下查詢會在Inventory倉庫中建立一個新的資料表,該資料表是將Inventory倉庫的資料表和Sales倉庫的資料表聯合起來,並包含包含客戶資訊的外部檔案。

CREATE TABLE Inventory.dbo.RegionalSalesOrders
AS
SELECT 
    s.SalesOrders,
    i.ProductName,
    c.CustomerName
FROM Sales.dbo.SalesOrders s
JOIN Inventory.dbo.Products i
    ON s.ProductID = i.ProductID
JOIN OPENROWSET( BULK 'abfss://<container>@<storage>.dfs.core.windows.net/<customer-file>.csv' ) AS c
    ON s.CustomerID = c.CustomerID
WHERE s.Region = 'West region';

Note

透過 使用 OPENROWSET 來讀取資料的速度可能比從資料表查詢資料還慢。 如果您打算重複存取相同的外部數據,請考慮將它內嵌至專用數據表,以改善效能和查詢效率。

COPY (Transact-SQL) 陳述式支援 CSV、JSONL 和 PARQUET 檔案格式。 支援的資料來源包括 Azure Data Lake Storage (ADLS) Gen2、Azure Blob 儲存體 以及 OneLake。

針對直接用戶端擷取情境,BCP API(預覽版)支援如 bcp.exe、C# SqlBulkCopy及 Java SQLServerBulkCopy 等工具與 API,透過 SQL 連線而無需先做檔案暫存。

管線 和 資料流程 支援各種資料來源和資料格式。 如需詳細資訊,請參閱 管線 和 資料流程。

使用 Workspace Identity 搭配 COPY INTO

使用 Workspace Identity 來 COPY INTO 區分來源資料的存取權限與寫入目標倉庫資料表的權限。 Workspace Identity 支援 Azure Blob 儲存體、ADLS Gen2 和 OneLake 來源。 該語句會在目前使用者的 SQL 安全上下文中執行。 該 WITH (CREDENTIAL = (IDENTITY = 'Workspace Identity')) 條款僅允許 COPY INTO 在工作區存取原始碼時冒充其身份。 所有 SQL 權限與稽核歸屬仍與執行使用者相關聯。

若未使用 Workspace Identity,透過項目共用取得倉儲存取權的使用者,只要至少具備讀取項目權限及所需的 SQL 權限,即可執行 COPY INTO。

在使用 Workspace Identity 執行 COPY INTO 前,請先完成以下設定:

  1. 為包含目標倉庫的工作區設定工作區身份。
  2. 授予工作區身份對來源的存取權限:
    • 對於 Azure Blob 儲存體 和 ADLS Gen2,請依據工作區名稱找到工作區身份,並在儲存帳號或容器上指派 Storage Blob 資料讀取器角色。 對於 ADLS Gen2 目錄層級的存取,請授予所需的 ACL 權限。 像對 Microsoft Entra 使用者指派權限一樣,為工作空間身分指派權限。
    • 針對 OneLake,依工作區名稱尋找工作區識別,將其新增至包含來源資料的工作區,並至少指派「參與者」工作區角色。
  3. 至少指派執行中的使用者在包含目標倉庫的工作區中擔任檢視者角色。 僅有物品權限並不授權使用者冒充工作區身份。 工作區角色的要求僅在使用者指定工作區身份時適用。
  4. 授予執行中的使用者 INSERT 對目標資料表的權限。 當 Workspace Identity 是憑證時, ADMINISTER DATABASE BULK OPERATIONS 不需要權限。

以下範例示範如何透過模擬 Workspace Identity 來存取來源資料,並從 OneLake 載入 CSV 檔案:

COPY INTO dbo.SalesOrders
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspace-id>/<item-id>/Files/orders/*.csv'
WITH (
    FILE_TYPE = 'CSV',
    FIRSTROW = 2,
    CREDENTIAL = (IDENTITY = 'Workspace Identity')
);

Important

敏感性標籤政策因組織而異。 COPY INTO 當目的網站有敏感標籤並有限制限制,導致無法操作時,可能會失敗。 如果敏感性標籤導致失敗,請先從目的地移除該標籤再嘗試指令。

最佳做法

COPY Microsoft Fabric 中 Warehouse 中的指令提供簡單、靈活且快速的介面,用於 Azure 儲存體 和 OneLake 的 SQL 工作負載高吞吐量資料擷取。

您也可以使用 T-SQL 語言來建立新的資料表,然後插入其中,然後更新和刪除數據列。 你可以透過跨資料庫查詢,從 Microsoft Fabric 工作空間中的任何資料庫插入資料。 如果您想要將資料從 Lakehouse 內嵌至倉儲,您可以使用跨資料庫查詢來執行。 例如:

INSERT INTO MyWarehouseTable
SELECT * FROM MyLakehouse.dbo.MyLakehouseTable;
  • 避免使用單例 INSERT 陳述式來匯入資料,因為這種做法會導致查詢和更新效能不佳。 如果您連續使用 singleton INSERT 陳述式進行資料導入,請使用 CREATE TABLE AS SELECT (CTAS) 或 INSERT...SELECT 模式建立一個新資料表,然後刪除原始資料表,接著用 CREATE TABLE AS SELECT (CTAS) 再次創建您的資料表。
    • 刪除現有的資料表會對您的語意模型產生影響,包括您對語意模型做出的任何自訂量值或自訂項目。
  • 處理外部檔案資料時,請確保檔案大小至少為 4 MB。
  • 對於大型的壓縮 CSV 檔案,請考慮將您的檔案分割成多個檔案。
  • Azure Data Lake Storage (ADLS) Gen2 可提供比 Azure Blob 儲存體 (舊版) 更為優異的效能。 盡可能考慮使用 ADLS Gen2 帳戶。
  • 針對經常執行的管線,考慮將 Azure 儲存體帳戶與可同時存取相同檔案的其他服務隔離。
  • 顯式交易可讓您將多個資料變更分組在一起,僅在交易完全提交且讀取一或多個資料表時才會顯示這些變更。 如有任何變更失敗,您也可以復原交易。
  • 如果 a SELECT 位於交易中,且之前有資料插入,回滾後 自動產生的統計 數據可能會不準確。 不正確的統計資料可能會導致查詢計劃和執行時間未最佳化。 如果你在大量 SELECT 之後以 INSERT 回復交易,請為 中提及的資料行SELECT。

Note

無論你如何將資料匯入倉庫,資料擷取任務都會透過 V-Order 寫入優化來優化它產生的 parquet 檔案。 V-Order 可最佳化 Parquet 檔案,以在 Microsoft Fabric 計算引擎(例如 Power BI、SQL、Spark 等)上實現極速的讀取。 倉庫查詢通常能透過此優化獲得更快速的查詢讀取時間,同時確保 Parquet 檔案百分之百符合其開源規範。 不要關閉 V-Order,因為這可能會影響讀取效能。 如需有關 V 順序的詳細資訊,請參閱了解和管理 Warehouse 的 V 順序。

有關 Fabric Data Warehouse 資料導入的常見問題

COPY 命令載入壓縮 CSV 檔案的檔案分割指導方針為何?

考慮分割大型 CSV 檔案,尤其是在原始檔案數量較少的情況下,但要確保每個分割後的檔案至少有 4 MB,以提升效能。

載入 Parquet 檔案之 COPY 命令的檔案分割指引為何?

請考慮分割大型 Parquet 檔案,特別是在檔案數目較少的情況下。

檔案的數目或大小是否有任何限制?

檔案數量與大小均無限制。 不過,為了最佳效能,請使用至少 4 MB 的檔案。

如果我沒指定 COPY 指令,它用的是哪個憑證?

根據預設,COPY INTO會使用執行該作業的使用者 Microsoft Entra 身分來存取來源。