Azure Synapse Pathway の舞台裏
適用対象: Azure Synapse Analytics
Azure Synapse Pathway の目標は、Synapse SQL 用に最適化しながら元のコードの機能上の意図を維持することです。 Synapse Pathway では、ソース システムから Azure Synapse SQL に SQL コードを翻訳するために 3 つのステージからなるプロセスを使用します。
各ステージでは、ソース固有のメタデータを含むソースの知識を維持して拡張することで、翻訳における最高品質を保証します。
ステージ 1 – 字句解析と構文解析
SQL 言語の構文解析は、何度も解決されてきた問題です。 ソース ステートメントを取得し、それを論理トークンに分割してから、セットまたはパーサー規則に対して実行して言語の一貫性を確保するための、多くの商用およびオープンソースのパーサーがあります。
Synapse Pathway では、ツールで SQL 入力を識別して処理し、さらに処理するために使用される拡張抽象構文ツリー (AST) を作成できるようにするソース文法を定義します。
ステージ 2 - 拡張抽象構文ツリー (AST)
Synapse Pathway では、拡張抽象構文ツリー (AST) 内のすべてのオブジェクトの共通表現を定義します。 Pathway AST には、ステートメントの適切な変換を支援するために、他のステートメントまたはフラグメントからのメタデータが含まれています。
トークンが関数であることだけでなく、ソース システムの種類の要件を追跡することで、スクリプト生成コンポーネントでは Synapse SQL への翻訳について、より賢明な決定を行うことができます。
たとえば、絶対関数のソース関数は次のように定義されます。
ABS( float_expression )
Azure Synapse SQL では、次のように絶対関数を定義します。
ABS ( numeric_expression )
このシンプルなケースの場合、Synapse Pathway で、Synapse SQL での float から numeric への変換が暗黙的な変換であることが認識され、それ以上の型キャストは必要ありません。 シンプルなクリーンで効果的なコード翻訳。
ソースのステートメントとフラグメントに関するこのメタ情報を維持することは、プラットフォーム間に構造的な違いがある場合に役立ちます。たとえば、WHERE 句の検索条件述語のオプトアウト ロジックでの変換などです。
ステージ 3 - 構文の生成
プロセスの最後のステージでは、Synapse SQL の構文を生成します。 ソース ファイルから生成された AST 構造体を使用して、Synapse Pathway によって各 DDL オブジェクトが個々のファイルに書き込まれます。 構文ジェネレーターでは、ターゲット プラットフォームに関する詳細な知識を使用してステートメントが最適化されます。
たとえば、データ読み込みシナリオで見られる一般的なパターンでは、まずステージング テーブル内のすべての内容を削除してから、別のステージング テーブルのデータを INSERT または SELECT の方法で読み込みます。
DELETE staging.table1 ALL;
INSERT INTO staging.table1…
FROM staging.table2;
Synapse SQL には、このシナリオのために最適化されたパス (CREATE TABLE AS SELECT) があります。 CTAS ステートメントはバッチ ベースの操作であり、利用可能なすべてのコンピューティング インフラストラクチャを使用することにより、最小のログ記録でハイ パフォーマンスが得られます。 Synapse SQL に関するこの分析情報がないと、多くの場合、ツールでは truncate および 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;