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";