將 Teradata 移轉的 SQL 問題減到最少
本文章是七部分系列的第五部分,提供如何從 Teradata 移轉至 Azure Synapse Analytics 的指引。 本文著重於將 SQL 問題減到最少的最佳做法。
概述
Teradata 環境的特性
秘訣
Teradata 在 1980 年代帶動使用 MPP 的大規模 SQL 資料庫。
在 1984 年,Teradata 首度發行了資料庫產品。 它引進了大量平行處理 (MPP) 技術,可大規模處理資料,效率比當時可用的現有大型主機技術更好。 之後,產品經過不斷改善,許多大型金融機構、電信和零售公司都開始採用。 原始實作方式使用專屬硬體,而且是連結至大型主機的通道,通常為 IBM 或與 IBM 相容的處理器。
雖然最新釋出的產品版本納入網路連線能力,並強化在雲端中使用 Teradata 技術堆疊的可用性 (包括 Azure),但大部分現有的安裝都仍為內部部署,因此許多使用者均會考慮將部分或所有 Teradata 資料移轉至 Azure Synapse Analytics,以享受移至現代化雲端環境的優點。
秘訣
許多現有的 Teradata 安裝均使用維度資料模型的資料倉儲。
Teradata 技術通常用於實作資料倉儲,支援使用 SQL 對大量資料進行複雜的分析查詢。 星星式或雪花式架構是相當常見的維度資料模型,如同個別部門的資料超市實作。
這個 SQL 與維度資料模型的組合可簡化移轉至 Azure Synapse Analytics 的程序,因為基本概念與 SQL 技能是可轉移的。 建議的方法為依原樣移轉現有的資料模型,以降低風險與花費時間。 即使最終目的是要變更資料模型 (例如移至資料保存庫模型)、依原樣執行初始移轉,然後在 Azure 雲端環境中進行變更,仍可在此利用效能、彈性可擴縮性與成本優勢。
雖然 SQL 語言已標準化,但在某些情況下,個別廠商已實作專屬延伸模組。 本文件著重於從舊版 Teradata 環境移轉時可能會遇到的潛在 SQL 差異,並提供因應措施。
在移轉過程中使用 Azure VM Teradata 執行個體
秘訣
使用 Azure VM 建立暫時 Teradata 執行個體以加速移轉,並將來源系統的影響降到最低。
從內部部署 Teradata 環境執行移轉時,請運用 Azure 環境。 Azure 提供經濟實惠的雲端儲存空間和彈性的可擴充性,藉此在 Azure 中的 VM 內建立 Teradata 執行個體,並與目標 Azure Synapse Analytics 環境共置。
使用此方法時,可以使用如 Teradata Parallel Data Transporter (或如 Attunity Replicate 等第三方資料複製工具) 等標準 Teradata 公用程式來有效率地移動要移轉至 VM 執行個體的 Teradata 資料表子集。如此一來,所有移轉工作都可以在 Azure 環境中進行。 這種方法有幾項優點:
初始複寫資料後,來源系統不受其他移轉工作的影響。
Azure 環境中有熟悉的 Teradata 介面、工具和公用程式可供使用。
一旦在 Azure 環境後,內部部署來源系統和雲端目標系統之間的網路頻寬可用性沒有任何潛在問題。
Azure Data Factory 等工具能以極高效率呼叫 Teradata Parallel Transporter 等公用程式,快速輕鬆地遷移資料。
完全在 Azure 環境中協調和控制移轉流程。
使用 Azure Data Factory 來實作中繼資料驅動移轉
秘訣
使用 Azure Data Factory 功能將移轉流程自動化。
運用 Azure 環境的功能來自動化與協調移轉流程。 此方法也會盡可能減少對現有 Teradata 環境的移轉影響,該環境可能已接近滿執行容量。
Azure Data Factory 是雲端式資料整合服務,可在雲端建立資料驅動工作流程,以便協調及自動進行資料移動和資料轉換。 使用 Azure Data Factory,可以建立並排程資料驅動的工作流程 (稱為管道),它可以內嵌來自不同資料存放區的資料。 使用計算服務 (例如,Azure HDInsight Hadoop、Spark、Azure Data Lake Analytics 和 Azure Machine Learning) 可以處理或轉換資料。
藉由建立中繼資料來列出要移轉的資料表與其位置,即可使用 Azure Data Factory 設備來管理與自動化移轉流程的部分程序。 您也可以使用 Azure Synapse Analytics Pipelines。
Teradata 和 Azure Synapse 的 SQL DDL 差異
SQL 資料定義語言 (DDL)
秘訣
SQL DDL 命令 CREATE TABLE
與 CREATE VIEW
具有標準核心元素,但也可用於定義實作特定的選項。
ANSI SQL 標準會定義 DDL 命令的基本語法,例如 CREATE TABLE
與 CREATE VIEW
。 這些命令均可用於 Teradata 和 Azure Synapse Analytics,但它們也已擴充以允許實作特定功能的定義,例如編製索引、散發資料表與分割資料的選項。
下列各節將討論移轉至 Azure Synapse Analytics 期間要考慮的 Teradata 特定選項。
資料表考量
秘訣
使用現有的索引來指出移轉倉儲中編製索引的候選項目。
在不同的技術之間移轉資料表時,只有未經處理資料與其描述性中繼資料會在兩個環境之間實際移動。 來自來源系統的其他資料庫元素 (如索引和記錄檔) 不會直接移轉,因為這些專案可能不需要這些檔案,或可能在新的目標環境中以不同的方式實作。 例如,Teradata CREATE TABLE
語法中沒有與 MULTISET
選項對等的項目。
請務必了解來源環境中使用效能最佳化的位置,例如索引。 這會指出可以在新的目標環境中新增效能最佳化的位置。 例如,如果在來源 Teradata 環境中已建立非唯一次要索引 (NUSI),這可能表示應該在已移轉的 Azure Synapse Analytics 資料庫中建立非叢集索引。 其他原生效能最佳化技術 (如資料表複寫),可能比直接建立「類似」索引更為適用。
不支援的 Teradata 資料表類型
秘訣
Azure Synapse Analytics 內的標準資料表可以支援已移轉的 Teradata 時間序列和時態表。
Teradata 也支援時間序列和時態性資料的特殊資料表類型。 Azure Synapse Analytics 不會直接支援這些資料表類型的語法和某些函數,但可以將資料遷移到標準資料表中,其中在日期/時間資料行上具有所需的資料類型和索引或資料分割。
Teradata 透過查詢重寫向時態性查詢新增額外的篩選條件,限制適用的日期範圍,藉此實作時態性查詢功能。 如果此功能目前正在來源 Teradata 環境中使用並要移轉,則必須將這項額外的篩選條件新增至相關的時態查詢。
Azure 環境也包含針對大規模時間序列資料進行複雜分析的特定功能,稱為時間序列深入解析—這是以 IoT 資料分析應用程式為目標,而且可能更適合此使用案例。
不支援的 Teradata 資料表類型
秘訣
評估不支援的資料類型在準備階段的影響。
大部分的 Teradata 資料類型在 Azure Synapse Analytics 中都有直接的對等用法。 下表顯示 Azure Synapse 不支援的 Teradata 資料類型以及建議的對應。 在資料表中,Teradata 資料行類型是儲存在系統目錄 (例如 DBC.ColumnsV
) 中的類型。
Teradata 資料行類型 | Teradata 資料類型 | Azure Synapse Analytics 資料類型 |
---|---|---|
++ | TD_ANYTYPE | 在 Azure Synapse Analytics 中並不支援 |
A1 | ARRAY | 在 Azure Synapse Analytics 中並不支援 |
AN | ARRAY | 在 Azure Synapse Analytics 中並不支援 |
AT | TIME | TIME |
BF | BYTE | BINARY |
BO | BLOB | 系統不直接支援 BLOB 資料類型,但可以取代為 BINARY。 |
BV | VARBYTE | BINARY |
CF | VARCHAR | CHAR |
CO | CLOB | 系統不直接支援 CLOB 資料類型,但可以取代為 VARCHAR。 |
CV | VARCHAR | VARCHAR |
D | DECIMAL | DECIMAL |
DA | 日期 | 日期 |
DH | INTERVAL DAY TO HOUR | Azure Synapse Analytics 不支援 INTERVAL 資料類型,但可以使用日期比較函數 (例如 DATEDIFF 和 DATEADD) 來計算日期。 |
DM | INTERVAL DAY TO MINUTE | Azure Synapse Analytics 不支援 INTERVAL 資料類型,但可以使用日期比較函數 (例如 DATEDIFF 和 DATEADD) 來計算日期。 |
DS | INTERVAL DAY TO SECOND | Azure Synapse Analytics 不支援 INTERVAL 資料類型,但可以使用日期比較函數 (例如 DATEDIFF 和 DATEADD) 來計算日期。 |
DT | DATASET | Azure Synapse Analytics 支援 DATASET 資料類型。 |
DY | INTERVAL DAY | Azure Synapse Analytics 不支援 INTERVAL 資料類型,但可以使用日期比較函數 (例如 DATEDIFF 和 DATEADD) 來計算日期。 |
F | FLOAT | FLOAT |
HM | INTERVAL HOUR TO MINUTE | Azure Synapse Analytics 不支援 INTERVAL 資料類型,但可以使用日期比較函數 (例如 DATEDIFF 和 DATEADD) 來計算日期。 |
HR | INTERVAL HOUR | Azure Synapse Analytics 不支援 INTERVAL 資料類型,但可以使用日期比較函數 (例如 DATEDIFF 和 DATEADD) 來計算日期。 |
HS | INTERVAL HOUR TO SECOND | Azure Synapse Analytics 不支援 INTERVAL 資料類型,但可以使用日期比較函數 (例如 DATEDIFF 和 DATEADD) 來計算日期。 |
I1 | BYTEINT | TINYINT |
I2 | SMALLINT | SMALLINT |
I8 | bigint | bigint |
I | INTEGER | INT |
JN | JSON | Azure Synapse Analytics 目前不支援 JSON 資料類型,但 JSON 資料可以儲存在 VARCHAR 欄位中。 |
MI | INTERVAL MINUTE | Azure Synapse Analytics 不支援 INTERVAL 資料類型,但可以使用日期比較函數 (例如 DATEDIFF 和 DATEADD) 來計算日期。 |
MO | INTERVAL MONTH | Azure Synapse Analytics 不支援 INTERVAL 資料類型,但可以使用日期比較函數 (例如 DATEDIFF 和 DATEADD) 來計算日期。 |
MS | INTERVAL MINUTE TO SECOND | Azure Synapse Analytics 不支援 INTERVAL 資料類型,但可以使用日期比較函數 (例如 DATEDIFF 和 DATEADD) 來計算日期。 |
N | NUMBER | NUMERIC |
PD | PERIOD(DATE) | 可以轉換成 VARCHAR 或分割成兩個不同的日期 |
下午 | 期間 (具有時區的時間戳記) | 可以轉換成 VARCHAR 或分割成兩個不同的時間戳記 (DATETIMEOFFSET) |
PS | PERIOD(TIMESTAMP) | 可以轉換成 VARCHAR 或分割成兩個不同的時間戳記 (DATETIMEOFFSET) |
PT | PERIOD(TIME) | 可以轉換成 VARCHAR 或分割成兩個不同的時間 |
PZ | PERIOD (TIME WITH TIME ZONE) | 可以轉換成 VARCHAR 或分割成兩個不同的時間,但 TIME 不支援 WITH TIME ZONE |
SC | INTERVAL SECOND | Azure Synapse Analytics 不支援 INTERVAL 資料類型,但可以使用日期比較函數 (例如 DATEDIFF 和 DATEADD) 來計算日期。 |
SZ | TIMESTAMP WITH TIME ZONE | DATETIMEOFFSET |
TS | timestamp | DATETIME 或 DATETIME2 |
TZ | TIME WITH TIME ZONE | 不支援 TIME WITH TIME ZONE,因為 TIME 只會使用「時鐘」時間儲存,而不需要時區位移。 |
XM | XML | Azure Synapse Analytics 目前不支援 XML 資料類型,但 XML 資料可以儲存在 VARCHAR 欄位中。 |
YM | INTERVAL YEAR TO MONTH | Azure Synapse Analytics 不支援 INTERVAL 資料類型,但可以使用日期比較函數 (例如 DATEDIFF 和 DATEADD) 來計算日期。 |
YR | INTERVAL YEAR | Azure Synapse Analytics 不支援 INTERVAL 資料類型,但可以使用日期比較函數 (例如 DATEDIFF 和 DATEADD) 來計算日期。 |
使用 Teradata 目錄資料表中的中繼資料來判斷是否要移轉這些資料類型中的任何一種,然後在此移轉方案中允許執行。 例如,使用如此項的 SQL 查詢來尋找是否出現任何需要注意不支援的資料類型。
SELECT
ColumnType, CASE
WHEN ColumnType = '++' THEN 'TD_ANYTYPE'
WHEN ColumnType = 'A1' THEN 'ARRAY' WHEN
ColumnType = 'AN' THEN 'ARRAY' WHEN
ColumnType = 'BO' THEN 'BLOB'
WHEN ColumnType = 'CO' THEN 'CLOB'
WHEN ColumnType = 'DH' THEN 'INTERVAL DAY TO HOUR' WHEN
ColumnType = 'DM' THEN 'INTERVAL DAY TO MINUTE' WHEN
ColumnType = 'DS' THEN 'INTERVAL DAY TO SECOND' WHEN
ColumnType = 'DT' THEN 'DATASET'
WHEN ColumnType = 'DY' THEN 'INTERVAL DAY'
WHEN ColumnType = 'HM' THEN 'INTERVAL HOUR TO MINUTE' WHEN
ColumnType = 'HR' THEN 'INTERVAL HOUR'
WHEN ColumnType = 'HS' THEN 'INTERVAL HOUR TO SECOND' WHEN
ColumnType = 'JN' THEN 'JSON'
WHEN ColumnType = 'MI' THEN 'INTERVAL MINUTE' WHEN
ColumnType = 'MO' THEN 'INTERVAL MONTH'
WHEN ColumnType = 'MS' THEN 'INTERVAL MINUTE TO SECOND' WHEN
ColumnType = 'PD' THEN 'PERIOD(DATE)'
WHEN ColumnType = 'PM' THEN 'PERIOD (TIMESTAMP WITH TIME ZONE)'
WHEN ColumnType = 'PS' THEN 'PERIOD(TIMESTAMP)' WHEN
ColumnType = 'PT' THEN 'PERIOD(TIME)'
WHEN ColumnType = 'PZ' THEN 'PERIOD (TIME WITH TIME ZONE)' WHEN
ColumnType = 'SC' THEN 'INTERVAL SECOND'
WHEN ColumnType = 'SZ' THEN 'TIMESTAMP WITH TIME ZONE' WHEN
ColumnType = 'XM' THEN 'XML'
WHEN ColumnType = 'YM' THEN 'INTERVAL YEAR TO MONTH' WHEN
ColumnType = 'YR' THEN 'INTERVAL YEAR'
END AS Data_Type,
COUNT (*) AS Data_Type_Count FROM
DBC.ColumnsV
WHERE DatabaseName IN ('UserDB1', 'UserDB2', 'UserDB3') -- select databases to be migrated
GROUP BY 1,2
ORDER BY 1;
秘訣
第三方工具和服務可以自動化資料對應工作。
有一些第三方廠商會提供工具和服務來自動化移轉,包括資料類型的對應。 若如 Informatica 或 Talend 等第三方廠商 ETL 工具已在 Teradata 環境中使用,則此工具可以實作任何必要的資料轉換。
產生資料定義語言 (DDL)
秘訣
使用現有的 Teradata 中繼資料,以自動產生 Azure Synapse Analytics 的 CREATE TABLE
與 CREATE VIEW DDL
。
編輯現有的 Teradata CREATE TABLE
和 CREATE VIEW
指令碼,以視需要建立具有已修改資料類型的對等定義。 一般而言,這牽涉到移除額外的 Teradata 特定子句,例如 FALLBACK
或 MULTISET
。
不過,所有指定現有 Teradata 環境內資料表與檢視目前定義的資訊都會保留在系統目錄資料表。 這是這項資訊的最佳來源,因為保證是最新且完整的資訊。 請注意,使用者維護的文件可能不會與目前的資料表定義同步。
透過檢視目錄 (例如 DBC.ColumnsV
) 來存取這項資訊,並為 Azure Synapse Analytics 中的對等資料表產生對等 CREATE TABLE
的 DDL 語句。
秘訣
第三方工具和服務可以自動化資料對應工作。
有一些 Microsoft 合作夥伴會提供工具和服務將移轉流程自動化,包括資料類型對應。 此外,若已在 Teradata 環境中使用如 Informatica 或 Talend 等第三方廠商 ETL 工具,則此工具可以實作任何必要的資料轉換。
Teradata 和 Azure Synapse Analytics 的 SQL DML 差異
SQL 資料操作語言 (DML)
秘訣
SQL DML 命令 SELECT
、INSERT
和 UPDATE
具有標準核心元素,但也可能會實作不同的語法選項。
ANSI SQL 標準會定義 DDL 命令的基本語法,例如 SELECT
、INSERT
、UPDATE
與 DELETE
。 Teradata 和 Azure Synapse Analytics 均使用這些命令,但在某些情況下會有實作差異。
下列各節將討論移轉至 Azure Synapse Analytics 期間應該考慮的 Teradata 特定 DML 命令。
SQL DML 語法差異
請留意移轉時在 Teradata SQL 與 Azure Synapse Analytics (T-SQL) 之間的 SQL 資料操作語言 (DML) 語法差異:
QUALIFY
:Teradata 支援QUALIFY
運算子。 例如:SELECT col1 FROM tab1 WHERE col1='XYZ' QUALIFY ROW_NUMBER () OVER (PARTITION by col1 ORDER BY col1) = 1;
Azure Synapse Analytics 語法中的對等項目為:
SELECT * FROM ( SELECT col1, ROW_NUMBER () OVER (PARTITION by col1 ORDER BY col1) rn FROM tab1 WHERE col1='XYZ' ) WHERE rn = 1;
日期算術:Azure Synapse Analytics 具有如
DATEADD
和DATEDIFF
的運算子,可用於DATE
或DATETIME
欄位。 Teradata 支援日期的直接減法,例如SELECT DATE1 - DATE2 FROM...
在
GROUP BY
序數中,明確提供 T-SQL 資料行名稱。LIKE ANY
:Teradata 支援LIKE ANY
語法,例如:SELECT * FROM CUSTOMER WHERE POSTCODE LIKE ANY ('CV1%', 'CV2%', 'CV3%');
Azure Synapse 語法中的對等項目為:
SELECT * FROM CUSTOMER WHERE (POSTCODE LIKE 'CV1%') OR (POSTCODE LIKE 'CV2%') OR (POSTCODE LIKE 'CV3%');
根據系統設定,Teradata 中的字元比較在預設情況下可能不區分大小寫。 在 Azure Synapse Analytics 中,字元比較一律會區分大小寫。
使用 EXPLAIN 來驗證舊版 SQL
提示
使用來自現有系統查詢記錄的實際查詢來尋找潛在的移轉問題。
測試舊版 Teradata SQL 以與 Azure Synapse Analytics 相容的其中一種方法,就是從舊版系統查詢記錄中擷取一些代表性的 SQL 語句,並以 EXPLAIN 為這些查詢加上前置詞 (並在 Azure Synapse Analytics 中假設「類似」的移轉資料模型),然後在 Azure Synapse Analytics 中執行這些 EXPLAIN
語句。 任何不相容的 SQL 都會擲回錯誤,可使用此資訊來判斷重新編碼工作的規模。 此方法不需要將資料載入 Azure 環境,只會建立相關的資料表和檢視內容。
函數、預存程序、觸發程序和序列
秘訣
在準備階段中,要評估要移轉的非資料物件數目與類型。
從如 Teradata 等成熟舊版資料倉儲環境移轉時,通常除了需要移轉至新目標環境的簡單資料表與檢視內容外,還有一些元素。 此範例包括函式、預存程式、觸發程序與序列。
在準備階段中,還要建立清查需要移轉的物件,並定義處理它們的方法。 然後,在專案計劃中指派適當的資源配置。
您可能會在 Azure 環境中找到設備,其取代 Teradata 環境中作為函式或預存程序實作的功能。 在此情況下,使用內建的 Azure 設備,而非重新編碼 Teradata 函式通常更有效率。
秘訣
第三方廠商產品和服務可以將非資料元素的移轉自動化。
Microsoft 合作夥伴提供可將移轉自動化的工具和服務。
如需這些元素的詳細資訊,請參閱下列各節。
函式
與大多數資料庫產品相同,Teradata 支援 SQL 實作中的系統函數和使用者定義函數。 移轉至如 Azure Synapse Analytics 另一個資料庫平台,即可使用通用系統函數,在不進行變更的情況下進行移轉。 某些系統函數的語法可能稍有不同,但仍可以將必要的變更自動化。 若沒有對等專案的系統函數 (例如任意使用者定義的函數),可能需要使用目標環境中可用的語言來重新編碼。 Azure Synapse 會使用流行的 Transact-SQL 程式設計語言來實作使用者定義函數。
預存程序
大部分的現代化資料庫產品都允許將程序儲存在資料庫。 Teradata 會為此目的提供 SPL 語言。 預存程序通常包含 SQL 陳述式和一些程序邏輯,並可能傳回資料或狀態。
Azure Synapse Analytics 專屬的 SQL 集區也支援使用 T-SQL 的預存程序,因此如果您必須移轉預存程序,請據以重新編碼。
觸發程序
Azure Synapse Analytics 不支援建立觸發程序,但您可以在 Azure Data Factory 內實作。
序列
Azure Synapse Analytics 序列的處理方式與 Teradata 類似,使用 IDENTITY 建立代理金鑰或受控識別。
Teradata 與 T-SQL 的對應
此資料表顯示與 Azure Synapse Analytics SQL 資料類型對應的 Teradata 至 T-SQL 相容:
Teradata 資料類型 | Azure Synapse Analytics SQL 資料類型 |
---|---|
BIGINT | BIGINT |
bool | bit |
boolean | bit |
byteint | TINYINT |
char [(p)] | char [(p)] |
char varying [(p)] | varchar [(p)] |
character [(p)] | char [(p)] |
character varying [(p)] | varchar [(p)] |
date | date |
Datetime | Datetime |
dec [(p[,s])] | decimal [(p[,s])] |
decimal [(p[,s])] | decimal [(p[,s])] |
double | float(53) |
雙精度 | float(53) |
float [(p)] | float [(p)] |
float4 | float(53) |
float8 | float(53) |
int | int |
int1 | TINYINT |
int2 | SMALLINT |
int4 | int |
int8 | BIGINT |
整數 | 整數 |
interval | 不支援 |
national char varying [(p)] | nvarchar [(p)] |
national character [(p)] | nchar [(p)] |
national character varying [(p)] | nvarchar [(p)] |
nchar [(p)] | nchar [(p)] |
numeric [(p[,s])] | numeric [(p[,s]) |
nvarchar [(p)] | nvarchar [(p)] |
real | real |
SMALLINT | SMALLINT |
time | time |
time with time zone | datetimeoffset |
time without time zone | time |
時間範圍 | 不支援 |
timestamp | datetime2 |
timetz | datetimeoffset |
varchar [(p)] | varchar [(p)] |
摘要
一般現有的舊版 Teradata,安裝手段的最終目的是讓移轉至 Azure Synapse Analytics 變得更為簡單。 它們會針對大型資料磁碟區使用 SQL 進行分析查詢,而且採用某種形式的維度資料模型。 這些因素使其成為移轉至 Azure Synapse Analytics 的良好候選項目。
若要將移轉實際 SQL 程式碼的工作減到最少,請遵循下列建議:
資料倉儲的初始移轉應該依原樣進行,才能將風險和所花費的時間降到最低,即使最終環境將納入如資料保存庫等不同的資料模型也一樣。
請考慮在 Azure VM 中使用 Teradata 執行個體作為移轉程式的基礎。
了解 Teradata SQL 實作與 Azure Synapse Analytics 之間的差異。
使用現有 Teradata 實作中的中繼資料和查詢記錄來評估差異的影響,並規劃降低的方法。
盡可能將移轉的錯誤、風險和時間降到最少,才能將程式自動化。
請考慮使用專家 Microsoft 合作夥伴和服務來簡化移轉。
下一步
若要深入了解 Microsoft 和第三方工具,請參閱本系列中的下一篇文章:Teradata 資料倉儲的工具移轉至 Azure Synapse Analytics。