共用方式為


在 Azure Synapse Analytics 中為專用 SQL 集區設計 PolyBase 數據載入策略

傳統的 SMP 數據倉儲會使用擷取、轉換和載入 (ETL) 程式來載入資料。 Azure SQL 集區是一種大規模平行處理 (MPP) 架構,可利用計算和記憶體資源的延展性和彈性。 擷取、載入和轉換 (ELT) 程式可以利用內建的分散式查詢處理功能,並消除在載入之前轉換數據所需的資源。

雖然 SQL 集區支援許多載入方法,包括 BCP 和 SQL BulkCopy 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 命令行工具 將資料匯出成分隔的文字檔。 Parquet 到 Azure Synapse Analytics 數據類型對應如下所示:

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 載入選項

如果您的數據與 PolyBase 不相容,您可以使用 bcpSQLBulkCopy API。 BCP 會直接載入專用 SQL 集區,而不需要通過 Azure Blob 記憶體,而且僅適用於小型負載。 請注意,這些選項的載入效能比 PolyBase 慢。

5.轉換數據

當數據位於臨時表中時,請執行工作負載所需的轉換。 然後將數據移至生產數據表。

6.將數據插入生產數據表

INSERT INTO ...SELECT 語句會將數據從臨時表移至永久數據表。

當您設計 ETL 程式時,請嘗試在小型測試範例上執行程式。 請嘗試從數據表擷取 1000 個數據列到檔案,將其移至 Azure,然後嘗試將它載入臨時表。

合作夥伴載入解決方案

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

下一步

如需載入指引,請參閱 載入數據的指引。