すべてのプロダクト
Search
ドキュメントセンター

DataWorks:SQL コンポーネントの開発

最終更新日:Mar 26, 2026

複数のパイプラインが同じ SQL ロジックを共有し、異なるテーブルで操作する場合、そのコードを個別に維持することはメンテナンスの負担となります。ロジックの変更はすべてのコピーで更新する必要があり、コピー&ペーストのエラーは見落とされがちです。スクリプトテンプレートは、SQL ロジックを一度定義し、異なる入力テーブルと出力テーブルを持つ複数のパイプラインで再利用することで、この問題を解決します。このトピックでは、DataWorks でスクリプトテンプレートを作成、参照、管理する方法について説明します。

仕組み

スクリプトテンプレートは、プログラミング言語の関数のように機能します。ロジックを一度定義し、異なる引数で繰り返し呼び出します。テンプレートの本文には、可変テーブル名と文字列値のプレースホルダーとして @@{parameter_name} が含まれています。SQL スニペットノードがテンプレートを参照し、具体的なパラメーター値を指定すると、DataWorks はプレースホルダーを置き換え、実行可能な SQL を生成します。

例えば、テンプレートの本文には以下が含まれます。

INSERT OVERWRITE TABLE @@{myoutput} PARTITION (pt='${bizdate}')
SELECT ...
FROM @@{myinputtable}
WHERE r2.rank <= @@{topn};

SQL スニペットノードが myinputtablecompany_sales_record に、myoutputcompany_sales_top_n に、topn10 にバインドすると、DataWorks はこれらの値を置き換え、結果の SQL を実行します。

スクリプトテンプレートは、SQL スニペットノードでのみ機能します。テンプレートベースのパイプラインを実行するには、テンプレートを参照する SQL スニペットノードを作成します。

基本概念

概念説明
スクリプトテンプレート名前付きの入力パラメーターと出力パラメーターを @@{parameter_name} 形式で持つ、再利用可能な SQL コードプロセス
SQL スニペットノードスクリプトテンプレートを参照し、具体的なパラメーター値を指定するノードタイプ
入力パラメーター (テーブル)ソーステーブルをテンプレートにバインドします。バインドされたテーブルは、パラメーター定義と同じ数のフィールドと互換性のあるフィールドタイプを持っている必要があります。
入力パラメーター (文字列)フィルターのしきい値や省名など、文字列値または変数をテンプレートにバインドします。
出力パラメーターSQL コードプロセスが生成する出力テーブルを定義します。タイプはテーブルである必要があります。
ワークスペースレベルのテンプレートデプロイメント後、現在のワークスペースのメンバーのみが利用可能です。
パブリックテンプレート現在のテナントに公開され、すべてのテナントユーザーが利用できます。
パラメーター定義は参照用です。DataWorks はすぐにスキーマチェックを強制しません。パラメーター定義と実際のテーブルスキーマとの不一致は、ノードの実行時に実行時エラーを引き起こします。

制限事項

  • SQL スニペットノードには、DataWorks Standard Edition 以降のエディションが必要です。詳細については、「DataWorks のエディション間の違い」をご参照ください。

  • ワークスペースレベルのテンプレートは、[ワークスペース固有] タブに表示されます。ワークスペースのメンバーのみが使用できます。

  • パブリックテンプレートは、[パブリック] タブに表示されます。テナント内のすべてのユーザーが使用できます。

前提条件

開始する前に、以下を確認してください。

スクリプトテンプレートの定義

ステップ 1: スニペットペインを開く

  1. DataWorks コンソールにログインします。上部のナビゲーションバーで、対象のリージョンを選択します。左側のナビゲーションウィンドウで、[データ開発とO&M] > [データ開発] を選択します。対象のワークスペースを選択し、[データ開発へ] をクリックします。

  2. DataStudio ページの左側のナビゲーションウィンドウで、[Snippets] をクリックします。

    [Snippets] が表示されていない場合は、左下隅の 设置 アイコンをクリックし、「DataStudio モジュールセクションでの設定構成」の手順に従って追加してください。

ステップ 2: テンプレートの作成

[スニペット]」ペインで、次の図に示す操作を使用して、スクリプト テンプレートを作成し、名前を付けます。

创建组件
現在のワークスペース内のメンバーアカウントによって作成されたテンプレートは、[ワークスペース固有] タブに表示されます。テナント内で作成されたテンプレートは、[パブリック] タブに表示されます。

ステップ 3: テンプレートの構成

構成タブには、SQL コードプロセス、入力パラメーター、出力パラメーターの 3 つの部分があります。

过程体

SQL コードプロセス

コードエディタで SQL ロジックを記述します。可変テーブル名と文字列値を @@{parameter_name} プレースホルダーに置き換えます。SQL スニペットノードが実行されると、DataWorks はこれらのプレースホルダーを実際の値に置き換えます。

入力パラメーター

1 つ以上の入力パラメーターを追加します。各パラメーターには、次のいずれかのタイプがあります。

  • [テーブル]: ソーステーブルをバインドします。ユーザーがどのスキーマを指定するかを理解できるように、期待されるスキーマをテキストブロックとして定義します。スキーマは以下の形式で定義します:

    Name of Field 1  Type of Field 1  Description of Field 1
    Name of Field 2  Type of Field 2  Description of Field 2
    ...
    Name of Field n  Type of Field n  Description of Field n

    例:

    area_id   string  'Region ID'
    city_id   string  'City ID'
    order_amt double  'Order amount'
  • 文字列: 数値のしきい値やフィルター条件などの文字列値をバインドします。オプションで、参照時に値が指定されていない場合に使用するデフォルト値を設定できます。ユースケース:

    • 売上高上位 N 都市のエクスポート: 文字列パラメーターを使用して N の値を渡します。

    • 省によるフィルター: 文字列パラメーターを使用して省名を渡します。

出力パラメーター

タイプがテーブルの出力パラメーターを 1 つ以上追加します。参照用に期待される出力スキーマを定義します。

例:

area_id   string  'Region ID'
city_id   string  'City ID'
order_amt double  'Order amount'
rank      bigint  'Ranking'
テンプレートには、複数の入力パラメーターと出力パラメーターを含めることができます。

ステップ 4: テンプレートの保存とコミット

構成タブのツールバーで、保存 アイコンをクリックして保存し、次に 提交 アイコンをクリックしてコミットします。テンプレートがコミットされると、SQL スニペットノードが参照可能になります。

スクリプトテンプレートの参照

前提条件

開始する前に、以下を確認してください。

テンプレートの参照

SQL スニペットノードの構成タブで、以下の図の手順に従ってスクリプトテンプレートを選択し、構成します。

image.png
  1. 参照するスクリプトテンプレートを選択します。

    • テンプレートの新しいバージョンが利用可能な場合は、[コードを更新] をクリックして取り込んでください。

    • テンプレート定義を確認するには、[スニペットの編集] をクリックします。

  2. パイプラインのテーブルと要件に基づいて、入力パラメーターと出力パラメーターの値を構成します。

スクリプトテンプレートの管理

テンプレートをすべてのテナントユーザーに公開する

デプロイメント後、テンプレートはデフォルトでワークスペースレベルになります。テナント内のすべてのユーザーが利用できるようにするには、テンプレートの構成タブにあるツールバーの[Publish Snippet] アイコン(図中の①で示されています)をクリックします。

分享及查看引用记录

参照レコードの表示

スニペット ノード」タブ(図中の[2])で、現在のテンプレートを参照するすべてのノードを確認できます。下流への影響を理解するために、テンプレートを変更する前にこのリストを確認してください。

テンプレートのアップグレード

テンプレート内の SQL コードまたはパラメータ設定を編集し、保存して再コミットします。各再コミットにより、新しいバージョンが作成されます。バージョン履歴は、右側のナビゲーションウィンドウにある [バージョン] タブ(図中の 3 で示されています)で表示できます。

组件升级

参照ノードへの影響

テンプレートがスペックアップされると、SQL スニペット ノードで最新バージョンのテンプレートを使用するかどうかを決定できます。新しいバージョンを採用するには、SQL スニペット ノードを開き、[コードを更新] をクリックし、新しいパラメータ設定がパイプラインで正常に機能することを確認してから、ノードをコミットしてデプロイします。

image.png

例のシナリオ

開発者 C がテンプレートのバージョン V1.0 を作成します。ユーザー A は V1.0 を参照します。開発者 C は後に V2.0 にアップグレードします。ユーザー A は新しいバージョンが利用可能であることを確認し、V2.0 の詳細を確認して、ノードを V2.0 に更新するかどうかを決定します。

構成タブのリファレンス

界面
機能説明
[保存]現在のテンプレート設定を保存します。
[ロックを奪取]スクリプトテンプレートの所有者でない場合、別のユーザーから編集ロックを奪取してテンプレートを編集できるようにします。
[送信]テンプレートを開発環境にコミットします。
公開スニペット現在のテナント内のすべてのユーザーにテンプレートを利用可能にします。
I/O パラメータの解析SQL コードから入力パラメーターと出力パラメーターを解析します。
実行開発環境でテンプレートを実行します。
[停止]実行中のテンプレートを停止します。
[コードのフォーマット]キーワードで SQL コードをフォーマットします。
[パラメーター]基本情報を表示し、入力パラメーターと出力パラメーターを構成します。
バージョンデプロイされたすべてのテンプレートバージョンを表示します。
[スニペットノード]テンプレートを参照するすべてのノードを表示します。

ベストプラクティス: 売上高上位 N のランキング

この例では、各リージョンにおける総売上高の上位 N 件の都市を返す get_top_n スクリプトテンプレートの作成手順、および SQL スニペットノードからの参照手順について示します。

前提条件

開始する前に、以下を確認してください。

ステップ 1: get_top_n テンプレートの定義

get_top_n という名前のスクリプトテンプレートを作成します。完全な手順については、「スクリプトテンプレートの定義」をご参照ください。以下の構成を使用します。

image.png

パラメーター設定

カテゴリパラメータータイプ説明パラメーター定義
入力パラメーターmyinputtableテーブル売上データテーブルarea_id string, city_id string, order_amt double, rank bigint
入力パラメーターtopn文字列返す上位都市の数該当なし
出力パラメーターmyoutputテーブルリージョンごとの上位都市のランキングarea_id string, city_id string, order_amt double, rank bigint

SQL コードプロセス

テンプレートは、@@{myinputtable}@@{myoutput}、および @@{topn} をプレースホルダーとして使用します。ノードが実行されると、DataWorks はこれらをバインドされた値に置き換えます。

INSERT OVERWRITE TABLE  @@{myoutput}  PARTITION (pt='${bizdate}')
 SELECT r3.area_id,
 r3.city_id,
 r3.order_amt,
 r3.rank
from (
SELECT
   area_id,
   city_id,
   rank,
   order_amt_1505468133993_sum as order_amt ,
   order_number_1505468133991_sum,
   profit_amt_1505468134000_sum
FROM
   (SELECT
   area_id,
   city_id,
   ROW_NUMBER() OVER (PARTITION BY r1.area_id ORDER BY r1.order_amt_1505468133993_sum DESC) AS rank,
   order_amt_1505468133993_sum,
   order_number_1505468133991_sum,
   profit_amt_1505468134000_sum
FROM
   (SELECT
   area AS area_id,
   city AS city_id,
   SUM(order_amt) AS order_amt_1505468133993_sum,
   SUM(order_number) AS order_number_1505468133991_sum,
   SUM(profit_amt) AS profit_amt_1505468134000_sum
FROM
  @@{myinputtable}
WHERE
   SUBSTR(pt, 1, 8) IN ( '${bizdate}' )
GROUP BY
   area,
   city )
   r1 ) r2
WHERE
   r2.rank >= 1 AND r2.rank <= @@{topn}
ORDER BY
   area_id,
   rank limit 10000) r3;

ステップ 2: SQL スニペットノードからのテンプレート参照

xc_Referenced script template_get_top_n という名前の SQL スニペットノードを作成し、get_top_n テンプレートを選択し、以下に示すようにパラメーターを構成します。

image.png

パラメーター構成

  • myinputtable: 365 日のライフサイクルを持つパーティションテーブルである company_sales_record にバインドします。

    CREATE TABLE IF NOT EXISTS company_sales_record
    (
        order_id         STRING COMMENT '注文 ID (PK)',
        report_date      STRING COMMENT '注文生成日',
        customer_name    STRING COMMENT '顧客名',
        order_level      STRING COMMENT '注文レベル',
        order_number     DOUBLE COMMENT '注文数',
        order_amt        DOUBLE COMMENT '注文金額',
        back_point       DOUBLE COMMENT '割引',
        shipping_type    STRING COMMENT '輸送方法',
        profit_amt       DOUBLE COMMENT '利益額',
        price            DOUBLE COMMENT '単価',
        shipping_cost    DOUBLE COMMENT '輸送コスト',
        area             STRING COMMENT 'リージョン',
        province         STRING COMMENT '省',
        city             STRING COMMENT '都市',
        product_type     STRING COMMENT '製品タイプ',
        product_sub_type STRING COMMENT '製品サブタイプ',
        product_name     STRING COMMENT '製品名',
        product_box      STRING COMMENT '製品パッケージング',
        shipping_date    STRING COMMENT '輸送日'
    )
    COMMENT '詳細な売上データ'
    PARTITIONED BY
    (
        pt               STRING
    )
    LIFECYCLE 365;
  • topn: 各リージョンの総売上高上位 10 都市を返すために 10 に設定します。

  • myoutput: company_sales_top_n にバインドします。

    CREATE TABLE IF NOT EXISTS company_sales_top_n
    (
    area STRING COMMENT 'リージョン',
    city STRING COMMENT '都市',
    sales_amount DOUBLE COMMENT '売上金額',
    rank BIGINT COMMENT 'ランキング'
    )
    COMMENT '会社売上ランキング'
    PARTITIONED BY (pt STRING COMMENT '')
    LIFECYCLE 365;

次のステップ

開発完了後、ノードを本番用に構成します。

  • スケジューリングプロパティの構成: 定期的なスケジューリング、再実行設定、およびスケジューリングの依存関係を設定します。詳細については、「概要」をご参照ください。

  • ノードのデバッグ: デプロイメント前にコードロジックをテストします。詳細については、「デバッグ手順」をご参照ください。

  • ノードのデプロイ: 定期的なスケジューリングをアクティブにするためにデプロイします。詳細については、「ノードのデプロイ」をご参照ください。