SQLスクリプトコンポーネントを使用すると、カスタム SQL ステートメントを作成して MaxCompute で実行できます。このトピックでは、コンポーネントの構成とそのユースケースについて説明します。
コンポーネントの構成
ビジュアルモデリングでは、SQLスクリプトコンポーネントのパラメーターをその構成タブで設定できます。
|
パラメーター |
説明 |
|
スクリプトモードを使用 |
スクリプトモードでは、ノードの出力ポートとして機能する ${o1} という名前の出力テーブルを作成する必要があります。詳細については、「SQL スクリプトモード」をご参照ください。 |
|
入力ソース |
上流の入力テーブルの名前を表示します。 |
|
システムが Create Table 文を追加するかどうか |
|
|
SQL スクリプト |
カスタム SQL スクリプトを作成して、ロジックを実装できます。SQL 構文の詳細については、「SQL 概要」をご参照ください。 コードエディタは、コード補完 (インテリジェントなキーワード提案) や組み込みのクエリテンプレートなどの機能を提供し、コードをより速く作成するのに役立ちます。詳細については、「コード開発効率の向上」をご参照ください。 |
-
SQLスクリプトコンポーネントは、0~4 個の入力と 1 個の出力をサポートします。
-
SQLスクリプトコンポーネントが上流テーブルに接続されると、入力ソースが t1、t2、t3、t4 に自動的にマッピングされます。変数 ${t1}、${t2}、${t3}、または ${t4} を使用して、ソーステーブル名を指定せずにこれらのテーブルを直接参照できます。
-
SQLスクリプトコンポーネントは 1 つの出力をサポートします。SQL ステートメントで ${o1} 変数を使用して、出力データテーブルを表すことができます。
-
SQL ステートメントで ${lifecycle} パラメーターを使用して、ワークスペースに構成されているデフォルトの一時テーブルのライフサイクルを適用できます。デフォルト値は 28 日です。
説明SQL ステートメントでデータテーブルを作成する場合は、必要に応じて一時テーブルのライフサイクルを設定してください。詳細については、「ワークスペース内の一時テーブルのクリーンアップ時間を設定する」をご参照ください。
-
パラメーター構成パネルで [システムが Create Table 文を追加するかどうか] チェックボックスを選択した場合、スクリプトに他の SQL ステートメントを含めることができますが、最後の文は Select 文である必要があります。PAI はクエリ結果を格納するための一時テーブルを自動的に作成します。
ユースケース
SQLスクリプトコンポーネントは、以下のユースケースをサポートします。
シナリオ 1:単一の上流テーブルからのデータ分析
[システムが Create Table 文を追加するかどうか] チェックボックスにチェックを入れます。PAI は、出力として一時テーブルを自動的に作成し、ダウンストリームコンポーネントに渡します。次のコードは、SQL スクリプトの例です。
select age,
(case sex when 'male' then 1 else 0 end) as sex,
(case cp when 'angina' then 0 when 'notang' then 1 else 2 end) as cp,
trestbps,
chol,
(case fbs when 'true' then 1 else 0 end) as fbs,
(case restecg when 'norm' then 0 when 'abn' then 1 else 2 end) as restecg,
thalach,
(case exang when 'true' then 1 else 0 end) as exang,
oldpeak,
(case slop when 'up' then 0 when 'flat' then 1 else 2 end) as slop,
ca,
(case thal when 'norm' then 0 when 'fix' then 1 else 2 end) as thal,
(case status when 'sick' then 1 else 0 end) as ifHealth
from ${t1};
コンポーネントペインで SQLスクリプト を検索し、SQLスクリプト コンポーネントをキャンバスにドラッグします。データテーブルの読み込み-1 コンポーネントの出力を SQLスクリプト-1 コンポーネントの入力に接続します。
シナリオ 2:複数の上流テーブルからのデータ結合
[システムが Create Table 文を追加するかどうか] チェックボックスのチェックを外します。${o1} および ${lifecycle} 変数を使用して、出力として一時テーブルを作成します。次のコードは SQL スクリプトの例です。
create table if not exists ${o1} lifecycle ${lifecycle}
as
with
a as (select * from ${t1}),
b as (select * from ${t2}),
c as (select * from ${t3})
select * from a
UNION all
select * from b
UNION all
select * from c;
コンポーネントペインで SQLスクリプト を検索し、キャンバスにドラッグします。3 つの データテーブルの読み込み ノードを SQLスクリプト ノードに接続します。パラメーター設定パネルで、入力ソースを次のようにマッピングします:t1 を データテーブルの読み込み-1 に、t2 を データテーブルの読み込み-2 に、t3 を データテーブルの読み込み-3 にマッピングします。
シナリオ 3:テーブル名によるデータ読み込み
[システムが Create Table 文を追加するかどうか] チェックボックスのチェックを外します。${o1} および ${lifecycle} 変数を使用して、出力として一時テーブルを作成します。次のコードは SQL スクリプトの例です。
set odps.sql.mapper.split.size=128;
set odps.sql.executionengine.batch.rowcount=100;
drop table if exists test_a_5_1;
create table test_a_5_1
as
select * from pai_online_project.wumai_data;
drop table if exists test_a_5_2;
create table test_a_5_2
as
select * from pai_online_project.wumai_data;
create table if not exists ${o1}
LIFECYCLE ${lifecycle}
as
select a.pm2, a.pm10, a.so2, b.co, b.no2
from
test_a_5_1 a join test_a_5_2 b
on a.time = b.time
and a.hour = b.hour;
select * from ${o1};
set 文は、SQL スクリプトの先頭で実行環境変数を設定します。
シナリオ 4:PAI コマンドの実行
[システムが Create Table 文を追加するかどうか] チェックボックスをオフにし、変数 ${o1} と ${lifecycle} を使用して出力として一時テーブルを作成します。 次のコードは SQL スクリプトの例です。
drop table if exists ${o1};
PAI -name type_transform_v1 -project algo_public
-Dlifecycle=${lifecycle} -DoutputTable=${o1}
-Dcols_to_double="time,hour,pm2,pm10,so2,co,no2"
-Ddefault_double_value="0.0" -Ddefault_int_value="0"
-DreserveOldFeat="false" -DinputTable="pai_online_project.wumai_data";