SQL指令碼是自訂SQL組件,您可以通過SQL指令碼編輯器編寫SQL語句,並提交至MaxCompute執行。本文為您介紹SQL指令碼的組件配置和使用情境。
組件配置
Designer僅支援通過可視化方式,配置SQL指令碼組件的參數,組件參數配置如下所示。
參數 | 描述 |
使用Script模式 | Script模式下,需要使用者自己建立輸出表,表名指定為${o1}可作為節點連接埠輸出。更多資訊,請參見SQL指令碼模式。 |
輸入源 | 展示上遊輸入的表名。 |
是否由系統添加Create Table語句 |
|
SQL指令碼 | 您可以自訂待實現功能的SQL指令碼,SQL語句具體文法,詳情請參見SQL概述。 在代碼編輯器介面,SQL指令碼支援自動補全代碼(智能推薦關鍵字代碼)、內建查詢範本等功能,協助您快速編寫代碼,提升開發效率,詳情請參見代碼開發提效。 |
SQL指令碼組件的使用說明:
SQL指令碼組件支援0~4個輸入,1個輸出。
如果SQL指令碼組件接入了上遊表,輸入源已自動對應成t1~t4,您可以直接調用${t1}、${t2}、${t3}或${t4},不用寫入源表名。
SQL指令碼組件支援1個輸出,您可以在SQL語句中使用${o1}代替輸出資料表。
您可以在SQL語句中,使用${lifecycle}參數自動擷取當前工作空間設定的暫存資料表生命週期,預設為28天。
說明如果您在SQL語句中自行建立了資料表,請按需設定暫存資料表的生命週期,詳情請參見設定工作空間暫存資料表清理時間。
如果您在可視化參數配置中選中了是否由系統添加Create Table語句複選框,SQL指令碼的中間位置可以配置任意的SQL語句,但是最後一句必須為Select語句,PAI會自動建立一個暫存資料表,用來儲存Select語句查詢的結果。
使用情境
SQL指令碼組件支援以下使用情境。
情境1:SQL指令碼組件從單個上遊表讀取資料後做一些分析
選中是否由系統添加Create Table語句複選框,PAI會自動建立一個以pai_temp開頭的暫存資料表作為輸出傳遞給下遊。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};
情境2:SQL指令碼組件從多個上遊表讀取資料做聯合分析
取消選中是否由系統添加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;
情境3:SQL指令碼組件無上遊輸入,直接通過表名讀取源表內容
取消選中是否由系統添加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};
其中SQL指令碼開始位置通過set語句設定執行環境變數。
情境4:在SQL指令碼組件中執行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";