Platform for AI (PAI) のビジュアルモデリングにおける SQL スクリプトコンポーネントは、パイプライン内でカスタム MaxCompute SQL ステートメントを実行します。SQL スクリプトを使用すると、次のことができます。
1つ以上のアップストリームコンポーネントからのデータをクリーンアップし、再形成する
複数の入力テーブルを1つの出力に結合する
アップストリームコンポーネントなしで、ソーステーブルから直接読み取る
SET 文、PAI コマンド、ライフサイクル構成などの MaxCompute 固有の特徴を適用する
SQL スクリプトコンポーネントは、ビジュアルモデリングでのみ構成します。このコンポーネントは最大4つの入力を受け入れ、1つの出力を生成します。
パラメーター
| パラメーター | 説明 |
|---|---|
| [スクリプトモードの使用] | スクリプトモードを有効にします。スクリプトモードでは、コンポーネントが出力として使用できるように、出力テーブルを作成し、${o1} という名前を付けます。詳細については、「スクリプトモードでの SQL」をご参照ください。 |
| [入力ソース] | 入力テーブルの名前です。 |
| [システムが CREATE TABLE ステートメントを追加するかどうか] | 選択した場合、SQL スクリプトを SELECT ステートメントで終了します。PAI は、クエリ結果を保存するために、一時テーブル (プレフィックス pai_temp 付き) を自動的に作成します。選択を解除した場合、出力テーブルを手動で作成するために、SQL スクリプトに CREATE TABLE IF NOT EXISTS ${o1} LIFECYCLE ${lifecycle} ステートメントを含めます。 |
| [SQL スクリプト] | カスタム SQL スクリプトです。エディターは、コードキーワードのオートコンプリートと組み込み検索テンプレートを提供します。サポートされている構文については、「MaxCompute SQL の概要」を、エディターの生産性機能については、「コード開発の効率を向上させる機能」をご参照ください。 |
変数リファレンス
各入力ポートは固定変数名にマッピングされます。アップストリームコンポーネントから接続を描画してポートを選択し、対応する変数を使用して入力テーブルを参照します。元のテーブル名を使用する必要はありません。
| 変数 | 説明 |
|---|---|
${t1}, ${t2}, ${t3}, ${t4} | アップストリームコンポーネントの接続時に選択されたポートによってマッピングされる入力テーブル |
${o1} | 出力テーブル |
${lifecycle} | 現在のワークスペースにおける一時テーブルのライフサイクル(デフォルト:28 日)。詳細については、「ワークスペースの管理」をご参照ください。 |
出力テーブルの作成
このコンポーネントは、出力テーブルを作成するための2つのモードを提供します。
| モード | 使用するタイミング | 実行すること |
|---|---|---|
| 自動作成 | 最後の文として単一の SELECT 文 | CREATE TABLE ステートメントを追加するかどうか を選択します。SQL スクリプトを SELECT 文で終了します。PAI は、pai_temp プレフィックスが付いた一時テーブルを自動的に作成します。 |
| 手動作成 | 複数の文、PAI コマンド、または明示的なテーブル制御 | [システムが CREATE TABLE 文を追加するかどうか] をクリアします。SQL スクリプトに CREATE TABLE IF NOT EXISTS ${o1} LIFECYCLE ${lifecycle} を含めます。 |
CREATE TABLE 文を使用して一時テーブルを手動で作成する場合は、テーブルのライフサイクルを設定します。詳細については、「ワークスペースの管理」をご参照ください。
シナリオ
以下の表を使用して、ユースケースに一致するシナリオを特定し、対応する例に従ってください。
| シナリオ | アップストリーム入力 | 出力テーブルの作成 |
|---|---|---|
| 単一のアップストリームテーブルから読み取る | 1つのアップストリームコンポーネント | 自動作成 (SELECT 文) |
| 複数のアップストリームテーブルを結合する | 2つ以上のアップストリームコンポーネント | 手動 (${o1} + ${lifecycle}) |
| 名前付きソーステーブルから直接読み取る | アップストリームコンポーネントなし | 手動 (${o1} + ${lifecycle}) |
| スクリプト内で PAI コマンドを実行する | 任意 | 手動 (${o1} + ${lifecycle}) |
シナリオ 1: 単一のアップストリームテーブルから読み取る
[システムが CREATE TABLE 文を追加するかどうか] を選択し、スクリプトの末尾に SELECT 文を記述します。 PAI は、pai_temp というプレフィックスが付いた一時テーブルを出力として作成します。
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};
シナリオ 2: 複数のアップストリームテーブルを結合する
出力テーブルを手動で作成するには、${o1} と ${lifecycle} を使用します。
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;
シナリオ 3: 名前付きソーステーブルから直接読み取る
アップストリームコンポーネントがない場合、ソーステーブルを名前で参照します。出力テーブルを手動で作成するには、${o1} と ${lifecycle} を使用します。上部の SET 文は MaxCompute 環境変数を構成します。
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};
シナリオ 4: スクリプト内で PAI コマンドを実行する
出力テーブルを手動で作成するには、${o1} と ${lifecycle} を使用します。
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";