幕後的 Azure Synapse Pathway

適用於:Azure Synapse Analytics

Azure Synapse Pathway 的目標是要保留原始程式碼的功能意圖,同時針對 Synapse SQL 進行最佳化。 Synapse Pathway 使用三階段的流程,將 SQL 程式碼從來源系統轉譯為 Azure Synapse SQL。

每個階段都會保留並增加來源的知識 (包括來源特定的中繼資料),以確保轉譯的最高品質。

Diagram explaining the Azure Synapse Pathway source, translation, and output

階段 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;

下一步