針對 Azure Synapse Analytics 中的專用 SQL 集區設計 PolyBase 資料載入策略

傳統 SMP 資料倉儲會使用擷取、轉換和載入 (ETL) 程序來載入資料。 Azure SQL 集區是大量平行處理 (MPP) 架構,具備計算和儲存體資源的延展性和彈性。 擷取、載入和轉換 (ELT) 程序可以利用內建的分散式查詢處理功能,而且不需要在載入之前轉換資料的資源。

雖然 SQL 集區支援許多載入方法,包括 BCP 和 SQL 大量複製 API 等等的非 Polybase 選項,不過載入日期最快、最能夠調整的方式是透過 PolyBase 來載入。 PolyBase 是一種技術,能夠透過 T-SQL 語言存取在 Azure Blob 儲存體或 Azure Data Lake Store 中儲存的外部資料。

擷取、載入和轉換 (ELT)

擷取、載入和轉換 (ELT) 是從來源系統擷取資料、載入至資料倉儲再進行轉換的程序。

對於專用 SQL 集區實作 PolyBase ELT 的基本步驟如下:

  1. 將來源資料擷取至文字檔。
  2. 讓資料登陸到 Azure Blob 儲存體或 Azure Data Lake Store。
  3. 準備要載入的資料。
  4. 使用 PolyBase 將資料載入專用 SQL 集區暫存表格。
  5. 轉換資料。
  6. 將資料插入生產資料表。

如需載入教學課程,請參閱使用 PolyBase 將資料從 Azure Blob 儲存體載入 Azure Synapse Analytics 中

如需詳細資訊,請參閱載入模式部落格

1.將來源資料擷取至文字檔

從來源系統取得資料視儲存位置而定。 目標是將資料移至 PolyBase 支援的分隔符號文字檔。

PolyBase 外部檔案格式

PolyBase 會從 UTF-8 和 UTF-16 編碼分隔符號文字檔載入資料。 PolyBase 也會從 Hadoop 檔案格式 RC 檔案、ORC 和 Parquet 載入。 PolyBase 也可以從 Gzip 和 Snappy 壓縮檔案載入資料。 PolyBase 目前不支援延伸的 ASCII、固定寬度格式和巢狀格式,例如 WinZip、JSON 和 XML。

如果您從 SQL Server 匯出,您可以使用 bcp 命令列工具將資料匯出到標示分隔符號的文字檔。 Azure Synapse Analytics 資料類型對應的 Parquet 如下所示:

Parquet 資料類型 SQL 資料類型
TINYINT TINYINT
SMALLINT SMALLINT
int int
BIGINT BIGINT
boolean bit
double FLOAT
FLOAT real
double money
double SMALLMONEY
字串 NCHAR
字串 NVARCHAR
字串 char
字串 varchar
BINARY BINARY
BINARY varbinary
timestamp date
timestamp smalldatetime
timestamp datetime2
timestamp Datetime
timestamp time
date date
decimal decimal

2.讓資料登陸到 Azure Blob 儲存體或 Azure Data Lake Store

若要讓資料登陸到 Azure 儲存體,您可以將它移至 Azure Blob 儲存體Azure Data Lake Store。 在任一位置中,資料應該會儲存到文字檔。 PolyBase 可以從任一位置載入。

您可以用來將資料移至 Azure 儲存體的工具和服務:

  • Azure ExpressRoute 服務會增強網路輸送量、效能及可預測性。 ExpressRoute 是一項服務,它會透過專用私人連線將您的資料路由傳送至 Azure。 ExpressRoute 連線不會透過公用網際網路路由傳送資料。 相較於透過公用網際網路的一般連線,這個連線提供更為可靠、速度更快、延遲更低且安全性更高的網際網路連線。
  • AzCopy 公用程式透過公用網際網路將資料移至 Azure 儲存體。 如果您的資料大小小於 10 TB,就適用這個選項。 若要使用 AzCopy 定期執行載入,請測試網路速度以查看是否可以接受。
  • Azure Data Factory (ADF) 具有閘道,您可以在本機伺服器上安裝。 然後您可以建立管線,將資料從本機伺服器移至 Azure 儲存體。 若要搭配專用 SQL 集區使用 Data Factory,請參閱將資料載入專用 SQL 集區

3.準備要載入的資料

在將資料載入 SQL 集區之前,您可能需要在儲存體帳戶中準備及清除資料。 資料準備可以在您的資料是在來源中、當您將資料匯出到文字檔時,或是在資料在 Azure 儲存體之後執行。 盡可能儘早在程序中使用資料最簡單。

定義外部資料表

在您可以載入資料之前,您必須在您的資料倉儲中定義外部資料表。 PolyBase 使用外部資料表以定義及存取 Azure 儲存體中的資料。 外部資料表類似於資料表檢視。 外部資料表包含資料表結構描述,並指向儲存在資料倉儲外部的資料。

定義外部資料表牽涉到指定資料來源、文字檔格式和資料表定義。 以下是您需要的 T-SQL 語法主題:

格式化文字檔

一旦定義外部物件,您必須對齊文字檔的資料列與外部資料表和檔案格式定義。 文字檔之每個資料列中的資料必須對齊資料表定義。 若要格式化文字檔:

  • 如果您的資料是來自非關聯式來源,您必須將它轉換成資料列和資料行。 無論資料是來自關聯式或非關聯式來源,資料都必須轉換以對齊您打算將資料載入其中之資料表的資料行定義。
  • 格式化文字檔中的資料,以對齊 SQL 集區目的地資料表中的資料行和資料類型。 如果外部文字檔與資料倉儲資料表的的資料類型之間沒有對齊,會導致在載入期間資料列遭到拒絕。
  • 使用結束字元分隔文字檔中的欄位。 請務必使用在來源資料中找不到的字元或字元序列。 搭配 CREATE EXTERNAL FILE FORMAT 使用您指定的結束字元。

4. 使用 PolyBase 將資料載入專用 SQL 集區暫存表格

這是將資料載入暫存資料表的最佳做法。 暫存資料表可讓您處理錯誤,而不會干擾生產資料表。 暫存表格也可讓您在將資料插入生產資料表之前,使用 SQL 集區內建的分散式查詢處理功能來轉換資料。

以 PolyBase 載入的選項

若要使用 PolyBase 載入資料,您可以使用任何一種載入選項:

  • PolyBase 與 T-SQL 非常適合於當您的資料是在 Azure Blob 儲存體或 Azure Data Lake Store 中的時候。 它給予您對於載入程序最多的控制權,但是也需要您定義外部資料物件。 其他方法會在您將來源資料表對應至目的地資料表時,在幕後定義這些物件。 若要協調 T-SQL 載入,您可以使用 Azure Data Factory、SSIS 或 Azure 函式。
  • 具有 SSIS 的 PolyBase 會在您的來源資料位於 SQL Server 時正常運作。 SSIS 會定義來源至目的地資料表對應,也會協調載入。 如果您已經有 SSIS 套件,您可以將套件修改為搭配新的資料倉儲目的地。
  • PolyBase 與 Azure Data Factory (ADF) 是另一個協調工具。 它會定義管線並排程作業。
  • 搭配使用 PolyBase 與 Azure DataBricks,可以使用 PolyBase 將資料從 Azure Synapse Analytics 資料表移轉到 Databricks 資料框架和/或將資料從 Databricks 資料框架寫入至 Azure Synapse Analytics 資料表。

非 PolyBase 載入選項

如果您的資料與 PolyBase 不相容,您可以使用 bcpSQLBulkCopy API。 BCP 會直接載入專用 SQL 集區而不需要透過 Azure Blob 儲存體,其僅適用於小型載入。 請注意,這些選項的載入效能會低於 PolyBase。

5.轉換資料

當資料在暫存表格時,執行您的工作負載需要的轉換。 然後將資料移至生產資料表中。

6.將資料插入生產資料表

INSERT INTO ...SELECT 陳述式會從暫存表格將資料移至永久資料表。

當您設計 ETL 程序時,嘗試在小型測試範例上執行程序。 嘗試從資料表將 1000 個資料列擷取至檔案,將它移至 Azure,然後嘗試將它載入暫存表格。

合作夥伴載入解決方案

我們有許多合作夥伴皆提供載入解決方案。 若要深入了解,請參閱我們的解決方案合作夥伴清單。

後續步驟

如需載入指引,請參閱載入資料的指引