將資料從 Azure Data Lake 儲存體載入 Azure Synapse Analytics 中的專用 SQL 集區

本指南概述如何使用 COPY 語句 從 Azure Data Lake 儲存體載入資料。 如需跨所有驗證方法使用 COPY 語句的快速範例,請流覽下列檔: 使用專用 SQL 集區 安全地載入資料。

注意

若要在 COPY 語句上提供意見反應或報告問題,請將電子郵件傳送至下列通訊群組清單: sqldwcopypreview@service.microsoft.com 。

  • 建立目標資料表以從 Azure Data Lake 儲存體載入資料。
  • 建立 COPY 語句以將資料載入資料倉儲。

如果您沒有 Azure 訂用帳戶,請在開始前建立免費 Azure 帳戶

開始之前

開始本教學課程之前,請先下載並安裝最新版的 SQL Server Management Studio (SSMS)。

若要執行本教學課程,您需要:

  • 專用 SQL 集區。 請參閱 建立專用 SQL 集區和查詢資料
  • Data Lake 儲存體 帳戶。 請參閱 開始使用 Azure Data Lake 儲存體 。 針對此儲存體帳戶,您必須設定或指定下列其中一個認證來載入:儲存體帳戶金鑰、共用存取簽章 (SAS) 金鑰、Azure 目錄應用程式使用者,或具有適當 Azure 角色的 Microsoft Entra 使用者。
  • 目前,使用 COPY 命令將資料擷取至使用新 Azure 儲存體 DNS 分割區功能 之Azure 儲存體帳戶會導致錯誤。 在未在本教學課程中使用 DNS 分割的訂用帳戶中布建儲存體帳戶。

建立目標資料表

連線專用 SQL 集區,並建立您要載入的目標資料表。 在此範例中,我們會建立產品維度資料表。

-- A: Create the target table
-- DimProduct
CREATE TABLE [dbo].[DimProduct]
(
    [ProductKey] [int] NOT NULL,
    [ProductLabel] [nvarchar](255) NULL,
    [ProductName] [nvarchar](500) NULL
)
WITH
(
    DISTRIBUTION = HASH([ProductKey]),
    CLUSTERED COLUMNSTORE INDEX
    --HEAP
);

建立 COPY 語句

連線 SQL 專用集區並執行 COPY 語句。 如需範例的完整清單,請流覽下列檔: 使用專用 SQL 集區 安全地載入資料。

-- B: Create and execute the COPY statement

COPY INTO [dbo].[DimProduct]  
--The column list allows you map, omit, or reorder input file columns to target table columns.  
--You can also specify the default value when there is a NULL value in the file.
--When the column list is not specified, columns will be mapped based on source and target ordinality
(
    ProductKey default -1 1,
    ProductLabel default 'myStringDefaultWhenNull' 2,
    ProductName default 'myStringDefaultWhenNull' 3
)
--The storage account location where you data is staged
FROM 'https://storageaccount.blob.core.windows.net/container/directory/'
WITH  
(
   --CREDENTIAL: Specifies the authentication method and credential access your storage account
   CREDENTIAL = (IDENTITY = '', SECRET = ''),
   --FILE_TYPE: Specifies the file type in your storage account location
   FILE_TYPE = 'CSV',
   --FIELD_TERMINATOR: Marks the end of each field (column) in a delimited text (CSV) file
   FIELDTERMINATOR = '|',
   --ROWTERMINATOR: Marks the end of a record in the file
   ROWTERMINATOR = '0x0A',
   --FIELDQUOTE: Specifies the delimiter for data of type string in a delimited text (CSV) file
   FIELDQUOTE = '',
   ENCODING = 'UTF8',
   DATEFORMAT = 'ymd',
   --MAXERRORS: Maximum number of reject rows allowed in the load before the COPY operation is canceled
   MAXERRORS = 10,
   --ERRORFILE: Specifies the directory where the rejected rows and the corresponding error reason should be written
   ERRORFILE = '/errorsfolder',
) OPTION (LABEL = 'COPY: ADLS tutorial');

優化資料行存放區壓縮

根據預設,資料表會定義為叢集資料行存放區索引。 載入完成之後,某些資料列可能不會壓縮到資料行存放區。 原因有很多。 若要深入瞭解,請參閱 管理資料行存放區索引

若要在載入之後優化查詢效能和資料行存放區壓縮,請重建資料表以強制資料行存放區索引壓縮所有資料列。


ALTER INDEX ALL ON [dbo].[DimProduct] REBUILD;

優化統計資料

最好在載入之後立即建立單一資料行統計資料。 統計資料有一些選擇。 例如,如果您在每一個資料行上建立單一資料行統計資料,可能需要很長的時間才能重建所有統計資料。 如果您知道某些資料行不會位於查詢述詞中,您可以略過在這些資料行上建立統計資料。

如果您決定在每個資料表的每個資料行上建立單一資料行統計資料,您可以使用統計資料 一文中的 預存程式程式程式碼範例 prc_sqldw_create_stats

下列範例是建立統計資料的良好起點。 它會針對維度資料表中的每個資料行,以及在事實資料表中的每個聯結資料行上建立單一資料行統計資料。 您稍後一律可以將單一或多資料行統計資料新增至其他事實資料表資料行。

成就已解除鎖定!

您已成功將資料載入資料倉儲。 太棒了!

下一步

載入資料是使用 Azure Synapse Analytics 開發資料倉儲解決方案的第一個步驟。 查看我們的開發資源。

如需更多載入範例和參考,請檢視下列檔: