幕後的 Azure Synapse Pathway
Azure Synapse Pathway 的目標是要保留原始程式碼的功能意圖,同時針對 Synapse SQL 進行最佳化。 Synapse Pathway 使用三階段的流程,將 SQL 程式碼從來源系統轉譯為 Azure Synapse SQL。
每個階段都會保留並增加來源的知識 (包括來源特定的中繼資料),以確保轉譯的最高品質。
階段 1 – 語彙分析和剖析
SQL 語言剖析是一個已解決多次的問題。 有許多商業和開放原始碼剖析器可協助執行下列基礎流程:取得來源陳述式,將其細分為邏輯 Token,然後針對集合或剖析器規則執行,以確保語言的一致性。
Synapse Pathway 會定義來源文法,讓工具識別並處理輸入到擴增式抽象語法樹 (AST) 以便進一步處理的 SQL。
階段 2 - 擴增式抽象語法樹 (AST)
Synapse Pathway 定義了擴增式抽象語法樹 (AST) 中所有物件的通用表示法。 Pathway AST 包含來自其他陳述式或片段的中繼資料,可協助正確轉換陳述式。
指令碼產生元件不僅會追蹤 Token 為函數,還會追蹤來源系統類型需求,藉以對 Synapse SQL 的轉譯作業做出更明智的決策。
例如,絕對函數的來源函數定義為:
ABS( float_expression )
Azure Synapse SQL 將絕對函數定義為:
ABS ( numeric_expression )
在這個簡單案例中,Synapse Pathway 理解 Synapse SQL 從浮點數轉換為數值是隱含轉換,不需要進一步的類型轉換。 這是簡單、簡潔且有效的程式碼轉譯。
保留有關來源陳述式和片段的這項中繼資訊,有助於了解平台之間的結構差異 – 例如,WHERE 子句中搜尋條件述詞的退出邏輯轉換。
階段 3 - 語法產生
該流程的最後一個階段是產生 Synapse SQL 的語法。 Synapse Pathway 使用來源檔案所產生的 AST 結構,將每個 DDL 物件寫入個別檔案。 語法產生器會使用目標平台的深度知識將陳述式最佳化。
例如,在資料載入案例中常見的模式為先刪除暫存表格中的所有內容,然後以 INSERT/SELECT 方式從另一個暫存表格載入資料。
DELETE staging.table1 ALL;
INSERT INTO staging.table1…
FROM staging.table2;
Synapse SQL 具有適用於此案例的最佳化路徑 – CREATE TABLE AS SELECT。 CTAS 陳述式是以批次為基礎的作業,透過使用所有可用的計算基礎結構,以最低限度記錄實現高效能。 如果沒有這種關於 Synapse SQL 的見解,工具通常會產生截斷和 INSERT/SELECT 陳述式。
TRUNCATE TABLE staging.table1;
INSERT INTO staging.table1…
FROM staging.table2;
雖然這還算不錯,但此程式碼可以最佳化為 DROP TABLE 和 CTAS,進而達到更高的效能。
DROP TABLE staging.table1;
CREATE TABLE staging.table1
WITH
(
-- Derived from the original table definition
DISTRIBUTION = HASH(column1),
-- Derived from the original table definition
CLUSTERED COLUMNSTORE INDEX
)
AS SELECT * FROM staging.table2;
下一步
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應