Share via


將 Netezza 移轉的 SQL 問題降到最少

本文章是七部分系列的第五部分,提供如何從 Netezza 移轉至 Azure Synapse Analytics 的指引。 本文著重於將 SQL 問題減到最少的最佳做法。

概述

Netezza 環境的特性

秘訣

Netezza 早在 2000 年代初期就已啟用「資料倉儲設備」概念。

在 2003 年,Netezza 首度發行了資料倉儲設備產品。 它可降低輸入成本,並改善巨量平行處理 (MPP) 技術,讓大規模處理資料的效率超越現有的大型主機或其他 MPP 技術。 之後,產品經過不斷改善,許多大型金融機構、電信和零售公司都開始採用。 原始實作使用專屬硬體,包括可現場程式化閘道陣列或 FPGA,並可透過 ODBC 或透過 TCP/IP 上的 JDBC 網路連線來存取。

大部分現有的 Netezza 安裝都是內部部署,因此許多使用者都考慮將部分或所有 Netezza 資料移轉至 Azure Synapse Analytics,以享有移至新式雲端環境的優點。

秘訣

許多現有的 Netezza 安裝均使用維度資料模型的資料倉儲。

Netezza 技術通常用於實作資料倉儲,支援使用 SQL 對大量資料進行複雜的分析查詢。 星星式或雪花式架構是相當常見的維度資料模型,如同個別部門的資料超市實作。

這個 SQL 與維度資料模型的組合可簡化移轉至 Azure Synapse Analytics 的程序,因為基本概念與 SQL 技能是可轉移的。 建議的方法為依原樣移轉現有的資料模型,以降低風險與花費時間。 即使最終目的是要變更資料模型 (例如移至資料保存庫模型)、依原樣執行初始移轉,然後在 Azure 雲端環境中進行變更,仍可在此利用效能、彈性可擴縮性與成本優勢。

雖然 SQL 語言已標準化,但在某些情況下,個別廠商已實作專屬延伸模組。 本文件著重於從舊版 Netezza 環境移轉時可能會遇到的潛在 SQL 差異,並提供因應措施。

使用 Azure Data Factory 來實作中繼資料驅動移轉

秘訣

使用 Azure Data Factory 功能將移轉流程自動化。

運用 Azure 環境的功能來自動化與協調移轉流程。 此方法也會盡可能減少對現有 Netezza 環境的移轉影響,該環境可能已接近滿執行容量。

Azure Data Factory 是雲端式資料整合服務,可在雲端建立資料驅動工作流程,以便協調及自動進行資料移動和資料轉換。 使用 Azure Data Factory,可以建立並排程資料驅動的工作流程 (稱為管道),它可以內嵌來自不同資料存放區的資料。 使用計算服務 (例如,Azure HDInsight Hadoop、Spark、Azure Data Lake Analytics 和 Azure Machine Learning) 可以處理或轉換資料。

藉由建立中繼資料來列出要移轉的資料表與其位置,即可使用 Azure Data Factory 設備來管理與自動化移轉流程的部分程序。 您也可以使用 Azure Synapse Analytics Pipelines

Netezza 與 Azure Synapse Analytics 之間的 SQL DDL 差異

SQL 資料定義語言 (DDL)

秘訣

SQL DDL 命令 CREATE TABLECREATE VIEW 具有標準核心元素,但也可用於定義實作特定的選項。

ANSI SQL 標準會定義 DDL 命令的基本語法,例如 CREATE TABLECREATE VIEW。 這些命令均可用於 Netezza 和 Azure Synapse Analytics,但它們也已擴充以允許實作特定功能的定義,例如編製索引、散發資料表與分割資料的選項。

下列各節將討論移轉至 Azure Synapse Analytics 期間要考慮的 Netezza 特定選項。

資料表考量

秘訣

使用現有的索引來指出移轉倉儲中編製索引的候選項目。

在不同的技術之間移轉資料表時,只有未經處理資料與其描述性中繼資料會在兩個環境之間實際移動。 來自來源系統的其他資料庫元素 (如索引和記錄檔) 不會直接移轉,因為這些專案可能不需要這些檔案,或可能在新的目標環境中以不同的方式實作。 例如,Netezza CREATE TABLE 語法中的 TEMPORARY 選項,與 Azure Synapse Analytics 中在資料表名稱前面加上「#」字元的作法相同。

請務必了解來源環境中使用效能最佳化的位置,例如索引。 這會指出可以在新的目標環境中新增效能最佳化的位置。 例如,如果在來源 Netezza 環境中建立區域對應,這可能表示應該在移轉 Azure Synapse Analytics 資料庫中建立非叢集索引。 其他原生效能最佳化技術 (如資料表複寫),可能比直接建立「類似」索引更為適用。

未經支援的 Netezza 資料庫物件類型

秘訣

Netezza 特定功能可以由 Azure Synapse Analytics 功能取代。

Netezza 會實作 Azure Synapse Analytics 中未直接支援的某些資料庫物件,但有方法可在新環境中達到相同的功能:

  • 區域對應:在 Netezza 中,系統會自動為某些資料行類型建立與維護區域對應,並在查詢時用來限制要掃描的資料量。 系統會在下列資料行類型上建立區域對應:

    • INTEGER 的長度為 8 位元或更少。
    • 時態性資料行。 例如 DATETIMETIMESTAMP
    • CHAR 資料行 (如果其為具體化檢視的一部分,並在 ORDER BY 子句中提及)。

    您可以使用 nz_zonemap 公用程式找出哪些資料行具有區域對應,此屬於 NZ 工具組的功能。 Azure Synapse Analytics 不會包含區域對應,但您可以使用其他使用者定義索引類型和/或資料分割達到相似的結果。

  • 叢集基底資料表 (CBT):在 Netezza 中,CBT 通常用於事實資料表,其可以擁有數十億筆記錄。 掃描如此龐大的資料表需要很長的處理時間,因為可能需要進行完整的資料表掃描才能取得相關記錄。 限制性 CBT 上的組織記錄可讓 Netezza 將相同或鄰近範圍的記錄分組。 此流程也會建立區域對應,藉由減少要掃描的資料量來提升效能。

    在 Azure Synapse Analytics 中,您可以使用資料分割和/或使用其他索引來達到類似的效果。

  • 具體化檢視:Netezza 支援具體化檢視,並建議在擁有許多資料行的大型資料表上建立一或多個資料行,其中只有少數資料行經常用於查詢。 當基底資料表的資料已更新時,系統會自動維護具體化檢視。

    Azure Synapse Analytics 支援具體化檢視,其功能與 Netezza 相同。

Netezza 資料類型對應

秘訣

評估不支援的資料類型在準備階段的影響。

大部分的 Netezza 資料類型在 Azure Synapse Analytics 中都有直接的對等用法。 下列資料表顯示這些資料類型,以及對應這些資料類型的建議方法。

Netezza 資料類型 Azure Synapse Analytics 資料類型
bigint bigint
BINARY VARYING(n) VARBINARY(n)
BOOLEAN BIT
BYTEINT TINYINT
CHARACTER VARYING(n) VARCHAR(n)
CHARACTER(n) CHAR(n)
日期 DATE(date)
DECIMAL(p,s) DECIMAL(p,s)
DOUBLE PRECISION FLOAT
FLOAT(n) FLOAT(n)
INTEGER INT
INTERVAL Azure Synapse Analytics 目前不支援 INTERVAL 資料類型,但可以使用 DATEDIFF 等時態性函數來計算。
MONEY MONEY
NATIONAL CHARACTER VARYING(n) NVARCHAR(n)
NATIONAL CHARACTER(n) NCHAR(n)
NUMERIC(p,s) NUMERIC(p,s)
REAL REAL
SMALLINT SMALLINT
ST_GEOMETRY(n) Azure Synapse Analytics 目前不支援如 ST_GEOMETRY 的空間資料類型,但資料可以儲存為 VARCHAR 或 VARBINARY。
TIME TIME
TIME WITH TIME ZONE DATETIMEOFFSET
timestamp DATETIME

產生資料定義語言 (DDL)

秘訣

使用現有的 Netezza 中繼資料,以自動產生 Azure Synapse Analytics 的 CREATE TABLECREATE VIEW

編輯現有的 Netezza CREATE TABLECREATE VIEW 指令碼,以視需要建立具有如前述已修改資料類型的對等定義。 一般而言,這牽涉到移除或修改任何額外的 Netezza 特定子句,例如 ORGANIZE ON

不過,所有會指定現有 Netezza 環境內資料表以及檢視目前定義的各項資訊,都會保留在系統目錄資料表。 這是這項資訊的最佳來源,因為保證是最新且完整的資訊。 請注意,使用者維護的文件可能不會與目前的資料表定義同步。

使用如 nz_ddl_table 的公用程式來存取此資訊,並產生 CREATE TABLE DDL 陳述式。 在 Azure Synapse Analytics 中編輯對等資料表的陳述式。

秘訣

第三方工具和服務可以自動化資料對應工作。

有一些 Microsoft 合作夥伴會提供工具和服務將移轉流程自動化,包括資料類型對應。 此外,若已在 Netezza 環境中使用如 Informatica 或 Talend 等第三方廠商 ETL 工具,則此工具可以實作任何必要的資料轉換。

Netezza 和 Azure Synapse Analytics 之間的 SQL DML 差異

SQL 資料操作語言 (DML)

秘訣

SQL DML 命令 SELECTINSERTUPDATE 具有標準核心元素,但也可能會實作不同的語法選項。

ANSI SQL 標準會定義 DDL 命令的基本語法,例如 SELECTINSERTUPDATEDELETE。 Netezza 和 Azure Synapse Analytics 均使用這些命令,但在某些情況下會有實作差異。

下列各節將討論移轉至 Azure Synapse Analytics 期間應該考慮的 Netezza 特定 DML 命令。

SQL DML 語法差異

請留意移轉時在 Netezza SQL 與 Azure Synapse Analytics 之間的 SQL 資料操作語言 (DML) 語法差異:

  • STRPOS:在 Netezza 中,該 STRPOS 語言函式會傳回字串內子字串的位置。 Azure Synapse Analytics 中的對等語言函式是 CHARINDEX,而且引數的順序會反轉。 例如,Netezza 中的 SELECT STRPOS('abcdef','def')... 相當於 Azure Synapse Analytics 中的 SELECT CHARINDEX('def','abcdef')...

  • AGE: Netezza 支援該 AGE 運算子來提供兩個時態值之間的間隔 (例如時間戳記或日期)。 例如:SELECT AGE('23-03-1956','01-01-2019') FROM...。 在 Azure Synapse Analytics 中,DATEDIFF 提供間隔。 例如:SELECT DATEDIFF(day, '1956-03-26','2019-01-01') FROM...。 請注意日期表示序列。

  • NOW(): Netezza 會在 Azure Synapse 中使用 NOW() 來代表 CURRENT_TIMESTAMP

函數、預存程序及序列

秘訣

在準備階段中,要評估要移轉的非資料物件數目與類型。

從如 Netezza 等成熟舊版資料倉儲環境移轉時,通常除了需要移轉至新目標環境的簡單資料表與檢視內容外,還有一些元素。 此範例包括函式、預存程式與序列。

在準備階段中,還要建立清查需要移轉的物件,並定義處理它們的方法。 然後,在專案計劃中指派適當的資源配置。

您可能會在 Azure 環境中找到設備,其取代 Netezza 環境中作為函式或預存程序實作的功能。 在此情況下,使用內建的 Azure 設備,而非重新編碼 Netezza 函式通常更有效率。

秘訣

第三方廠商產品和服務可以將非資料元素的移轉自動化。

Microsoft 合作夥伴提供可將移轉自動化的工具和服務,包括資料類型的對應。 此外,若已在 IBM Netezza 環境中使用 Informatica 或 Talend 等第三方廠商 ETL 工具,即可實作任何必要的資料轉換。

如需這些元素的詳細資訊,請參閱下列各節。

函式

與大多數資料庫產品相同,Netezza 支援 SQL 實作中的系統函數和使用者定義函數。 移轉至如 Azure Synapse Analytics 另一個資料庫平台,即可使用通用系統函數,在不進行變更的情況下進行移轉。 某些系統函數的語法可能稍有不同,但仍可以將必要的變更自動化。 若沒有對等專案的系統函數 (例如任意使用者定義的函數),可能需要使用目標環境中可用的語言來重新編碼。 Azure Synapse 會使用流行的 Transact-SQL 程式設計語言來實作使用者定義函數。 Netezza 使用者定義函數是以 nzLua 或 C++ 語言來撰寫程式碼。

預存程序

大部分的現代化資料庫產品都允許將程序儲存在資料庫。 Netezza 提供以 Postgres PL/pgSQL 為基礎的 NZPLSQL 語言。 預存程序通常包含 SQL 陳述式和一些程序邏輯,並可能傳回資料或狀態。

Azure Synapse Analytics 也支援使用 T-SQL 的預存程序,因此如果您必須移轉預存程序,請據以重新編碼。

序列

在 Netezza 中,序列是透過 CREATE SEQUENCE 建立的具名資料庫物件,可透過 NEXT VALUE FOR 方法提供唯一的值。 使用值來產生唯一的數字,用於作為主索引鍵值的代理索引鍵值。

在 Azure Synapse Analytics 中,沒有 CREATE SEQUENCE。 系統會使用 IDENTITY 來處理序列,以建立代理索引鍵 或使用 SQL 程式碼的受控識別,藉此建立數列中的下一個序列號碼。

使用 EXPLAIN 來驗證舊版 SQL

秘訣

使用來自現有系統查詢記錄的實際查詢來尋找潛在的移轉問題。

從舊版查詢記錄擷取一些具代表性的 SQL 陳述式,以評估舊版 Netezza SQL 與 Azure Synapse Analytics 的相容性。 然後將這些查詢前面加上 EXPLAIN,並 (假設Azure Synapse Analytics 中具有相同資料表和資料行名稱的「類似」移轉資料模型) 在 Azure Synapse Analytics 中執行這些 EXPLAIN 陳述式。 任何不相容的 SQL 都會傳回錯誤。 使用此資訊來判斷重新編碼工作的規模。 此方法不需要將資料載入 Azure 環境,只會建立相關的資料表和檢視內容。

IBM Netezza 與 T-SQL 的對應

此表格中有 IBM Netezza 與 Azure Synapse Analytics SQL 資料類型對應相容的 T-SQL:

IBM Netezza 資料類型 Azure Synapse Analytics SQL 資料類型
array 不支援
BIGINT BIGINT
binary large object [(n[K|M|G])] nvarchar [(n|max)]
 blob [(n[K|M|G])] nvarchar [(n|max)]
 byte [(n)] binary [(n)]|varbinary(max)
 byteint SMALLINT
 char varying [(n)] varchar [(n|max)]
character varying [(n)] varchar [(n|max)]
 char [(n)] char [(n)]|varchar(max)
character [(n)] char [(n)]|varchar(max)
 character large object [(n[K|M|G])] varchar [(n|max)
 clob [(n[K|M|G])] varchar [(n|max)
 資料集 不支援 
 date date
 dec [(p[,s])] decimal [(p[,s])]
 decimal [(p[,s])] decimal [(p[,s])]
 雙精度 float(53)
 float [(n)] float [(n)]
 graphic [(n)] nchar [(n)]| varchar(max)
 interval 不支援 
 json [(n)] nvarchar [(n|max)]
 長 varchar nvarchar(max)
 long vargraphic nvarchar(max)
 mbb 不支援 
 mbr 不支援 
 number [((p|*)[,s])] numeric [(p[,s])]
 numeric [(p [,s])]  numeric [(p[,s])]
 Period 不支援 
 real  real
 SMALLINT SMALLINT
 st_geometry 不支援 
 time time
 time with time zone datetimeoffset
 timestamp  datetime2
 timestamp with time zone datetimeoffset
 varbyte varbinary [(n|max)]
 varchar [(n)]  varchar [(n)]
 vargraphic [(n)] nvarchar [(n|max)]
 varray 不支援 
 Xml 不支援 
 xmltype 不支援 

摘要

一般現有的舊版 Netezza,安裝手段的最終目的是讓移轉至 Azure Synapse Analytics 變得更為簡單。 它們會針對大型資料磁碟區使用 SQL 進行分析查詢,而且採用某種形式的維度資料模型。 這些因素使其成為移轉至 Azure Synapse Analytics 的良好候選項目。

若要將移轉實際 SQL 程式碼的工作減到最少,請遵循下列建議:

  • 資料倉儲的初始移轉應該依原樣進行,才能將風險和所花費的時間降到最低,即使最終環境將納入如資料保存庫等不同的資料模型也一樣。

  • 了解 Netezza SQL 實作與 Azure Synapse Analytics 之間的差異。

  • 使用現有 Netezza 實作中的中繼資料和查詢記錄來評估差異的影響,並規劃降低的方法。

  • 盡可能將移轉的錯誤、風險和時間降到最少,才能將程式自動化。

  • 請考慮使用專家 Microsoft 合作夥伴和服務來簡化移轉。

下一步

若要深入了解 Microsoft 和第三方工具,請參閱本系列中的下一篇文章:Netezza 資料倉儲的工具移轉至 Azure Synapse Analytics