このトピックでは、スクリプトテンプレートの定義と構成、およびスクリプトテンプレートの作成方法について説明します。
定義
スクリプトテンプレートは、複数の入力および出力パラメーターを含む SQL コードプロセスを定義します。 各 SQL コードプロセスは、1 つ以上のソーステーブルを参照します。 ソーステーブルのデータをフィルタリングし、ソーステーブルを結合し、それらを集約して、新しい業務に必要な結果テーブルを生成できます。
利点
実際の業務では、SQL コードプロセスの多くが類似しています。 これらのプロセス内の入力テーブルと出力テーブルは、同じまたは互換性のある構造になっていますが、名前が異なります。 この場合、開発者は SQL コードプロセスをスクリプトテンプレートとして抽象化し、SQL コードを再利用できます。 スクリプトテンプレートは、入力テーブルから入力パラメーターを抽出し、出力テーブルに出力パラメーターを生成します。
SQL スクリプトテンプレートを作成するには、業務プロセスに従ってスクリプトテンプレートリストからスクリプトテンプレートを選択し、選択したスクリプトテンプレート用に業務内の特定の入力および出力テーブルを構成します。これは、コードを繰り返しコピーすることなく実施できます。 これにより開発効率を大幅に向上させ、繰り返し開発を行うことを防ぐことができます。 作成された SQL スクリプトテンプレートは、他の SQL ノードと同じ方法で展開および実行できます。
構成
関数と同様に、スクリプトテンプレートは入力パラメーター、出力パラメーター、および SQL コードプロセスで構成されます。
入力パラメーター
- テーブルタイプのパラメーターは、SQL コードプロセスで参照されるテーブルを指定します。 スクリプトテンプレートを使用する場合、特定の業務に必要な入力テーブルを指定できます。
- 文字列タイプのパラメーターは、SQL コードプロセスでの変数制御パラメーターを指定します。 たとえば、SQL コードプロセスの結果テーブルの各地域の上位 N 都市の売上高のみをエクスポートするには、文字列型パラメーターを使用して
N の値を指定します。
SQL コードプロセスの結果テーブルで都道府県の総売上高をエクスポートするには、文字列型パラメーターを設定して都道府県を指定し、指定した都道府県の売上データを取得します。
- パラメーターの説明は、SQL コードプロセスのパラメーターの役割を指定します。
- パラメーター定義は、テーブル構造のテキスト定義で、これはテーブルタイプのパラメーターに対してのみ必要です。 テーブルタイプのパラメーターのパラメーター定義を指定する場合、テーブルタイプパラメーターで定義されたものと同じフィールド名と互換性のあるタイプを含む入力テーブルを提供して、SQL コードプロセスが正しく実行できるようにする必要があります。 提供されていない場合、指定されたフィールド名が入力テーブルで見つからないため、SQL コードプロセスの実行時にエラーが返されます。 入力テーブルには、テーブルタイプパラメーターで定義されたフィールド名とタイプが含まれている必要があります。 入力テーブルには他のフィールドも含めることができます。 入力テーブルのフィールド名とタイプは、任意の順序で指定できます。 パラメーター定義は参考情報です。
- パラメーター定義は次の形式で入力することを推奨します。
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'
出力パラメーター
- スクリプトテンプレートの出力パラメーターには、パラメーター名、パラメータータイプ、パラメーターの説明、パラメーター定義などのプロパティがあります。 パラメータータイプは、テーブルのみです。 文字列タイプの出力パラメーターは論理的な意味を持ちません。
- テーブルタイプのパラメーターは、SQL コードプロセスから生成されるテーブルを指定します。 スクリプトテンプレートを使用する場合は、特定の業務に対して SQL コードプロセスが生成する結果テーブルを指定できます。
- パラメーターの説明は、SQL コードプロセスのパラメーターの役割を指定します。
- パラメーターの定義は、テーブル構造のテキスト定義です。 テーブルタイプのパラメーターのパラメーター定義を指定する場合、テーブルタイプパラメーターで定義されたものと同じ数のフィールドと互換性のあるタイプを含む出力テーブルを指定して、SQL コードプロセスが正しく実行できるようにする必要があります。 指定されていない場合、フィールド数が一致しない、またはタイプに互換性がないため、SQL コードプロセスの実行時にエラーが返されます。 出力テーブルのフィールド名は、テーブルタイプパラメーターで定義された名前と一致させる必要はありません。 パラメーター定義は参考情報です。
- パラメーター定義は次の形式で入力することを推奨します。
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' rank bigint 'Ranking'
SQL コードプロセス
SQL コードプロセスのパラメーターは、@@{Parameter name}
の形式で参照されます。
抽象 SQL コードプロセスを含めることにより、スクリプトテンプレートは入力パラメーターに基づいて入力テーブルを制御および処理し、業務に必要な出力テーブルを生成します。
SQL コードプロセスを開発する際は必要に応じて設定を行い、プロセス中に正しい SQL コードを生成し実行するために、コード内の入力パラメーターと出力パラメーターを適切に使用する必要があります。
スクリプトテンプレートの作成
- DataWorks コンソールにログインします。 左側のナビゲーションペインで、[ワークスペース] をクリックします。 [ワークスペース] ページでテンプレートを作成するワークスペースを確認し、[操作] 列の [データ分析] をクリックします。
- 左側のナビゲーションペインで [スニペット] をクリックします。
- アイコンにポインターを合わせ、 をクリックします。
- [スニペットを作成] ダイアログボックスで、[スニペット名]、[説明]、[ロケーション] を設定します。
- [送信] をクリックします。
ソーステーブルの構造
フィールド | タイプ | 説明 |
---|---|---|
order_id | varchar | 注文 ID |
report_date | datetime | 注文日 |
customer_name | varchar | 顧客名 |
order_level | varchar | 注文の優先度 |
order_number | double | 注文数 |
order_amt | double | 注文金額 |
back_point | double | 割引 |
shipping_type | varchar | 配送方法 |
profit_amt | double | 利益額 |
price | double | 単価 |
shipping_cost | double | 配送料 |
area | varchar | 地域 |
province | varchar | 都道府県 |
city | varchar | 市町村 |
product_type | varchar | 製品のタイプ |
product_sub_type | varchar | 製品のサブタイプ |
product_name | varchar | 製品名 |
product_box | varchar | 製品の梱包 |
shipping_date | datetime | 配送日 |
業務への影響
スクリプトテンプレート名 ::get_top_n
このスクリプトテンプレートは、指定された販売データテーブルをテーブルタイプの入力パラメーターとして使用し、上位の都市の数を文字列タイプの入力パラメーターとして使用し、都市の総売上を使用してランク付けします。 この SQL コードプロセスを使用すると、各地域の指定された上位都市のランキングを簡単に取得できます。
スクリプトテンプレートパラメーター
- パラメーター名:myinputtable
- タイプ :テーブル
- パラメーター名:topn
- タイプ:文字列
- パラメーター名:myoutput
- タイプ:テーブル
- area_id string
- city_id string
- order_amt double
- rank bigint
CREATE TABLE IF NOT EXISTS company_sales_top_n
(
area STRING COMMENT 'Region',
city STRING COMMENT 'City',
sales_amount DOUBLE COMMENT 'Sales amount',
rank BIGINT COMMENT 'Ranking'
)
COMMENT 'Company sales rankings'
PARTITIONED BY (pt STRING COMMENT '')
LIFECYCLE 365;
SQL コードプロセスの定義例
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_150546813****_sum,
profit_amt_15054681****_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_15054681****_sum,
order_number_15054681****sum,
profit_amt_1505468****_sum
FROM
(SELECT area AS area_id,
city AS city_id,
SUM(order_amt) AS order_amt_1505468****_sum,
SUM(order_number) AS order_number_15054681****_sum,
SUM(profit_amt) AS profit_amt_1505468****_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;
共有範囲
スクリプトテンプレートは、ワークスペース内で共有することも、公開することもできます。
デフォルトでは、展開されたスクリプトテンプレートは現在のワークスペース内のユーザーが閲覧および使用できます。 スクリプトテンプレートの開発者は、[スニペットを公開] アイコンをクリックして、アカウントのすべてのユーザーがスクリプトテンプレートを表示および使用できるように、汎用スクリプトテンプレートを現在のテナントアカウントに公開できます。
下図のように、[スニペットを公開] アイコンはスクリプトテンプレートの構成タブに表示されます。 アイコンがクリック可能な場合、スクリプトテンプレートは公開されています。
スクリプトテンプレートの使用
開発済のスクリプトテンプレートの使用方法については、「スクリプトテンプレートの使用」をご参照ください。