全部產品
Search
文件中心

Platform For AI:SQL指令碼

更新時間:Jul 13, 2024

SQL指令碼是自訂SQL組件,您可以通過SQL指令碼編輯器編寫SQL語句,並提交至MaxCompute執行。本文為您介紹SQL指令碼的組件配置和使用情境。

組件配置

Designer僅支援通過可視化方式,配置SQL指令碼組件的參數,組件參數配置如下所示。

參數

描述

使用Script模式

Script模式下,需要使用者自己建立輸出表,表名指定為${o1}可作為節點連接埠輸出。更多資訊,請參見SQL指令碼模式

輸入源

展示上遊輸入的表名。

是否由系統添加Create Table語句

  • 選中是否由系統添加Create Table語句複選框,則SQL指令碼的最後一行SQL語句必須為Select語句,PAI會自動建立一個暫存資料表,用來儲存Select語句查詢的結果。

  • 取消選中是否由系統添加Create Table語句複選框,您需要自己在SQL語句中建立資料表${o1},作為向下遊傳遞的資料表。

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

image

情境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;

image

情境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語句設定執行環境變數。image

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

image