【整理帖】MaxCompute 2.0 NewSQL

MaxCompute 2.0自去年上线后,NewSQL被得到了广泛使用,下面我们带大家看看NewSQL具体有哪些功能特性。


NewSQL新增特性


新的基本数据类型与内建函数 https://yq.aliyun.com/articles/225027

复杂类型的扩充 https://yq.aliyun.com/articles/225026

CTE,VALUES,SEMIJOIN https://yq.aliyun.com/articles/225025

此外 NewSQL一直在SQL语法上扩充和改进

GroupBy的改进

SQL1.0要求group by list和select list的对应列保持高度一直,如start_time和 t.start_time其实是相同的,但在1.0里这种用法会报错。

select stat_time
	  ,count(*) as today_car_cnt
 from t 
 group by t.stat_time;

Insert into的语法改进

SQL1.0语法
insert into table table_name select * from dual;
在NewSQL, table关键字可以省略
insert into table_name select * from dual;

Join语法的改进

SQL1.0语法
select * from dual l left outer join dual r on l.key=r.key;
在NewSQL, outer关键字可以省略
select * from dual l left join dual r on l.key=r.key;

此外 NewSQL还支持了 semi join和 anti join
select A.theme_id, count(1) as click_cnt from 
A LEFT SEMI JOIN B
on A.mid=B.mid;
SQL1.0不支持Join on条件里使用or,NewSQL放开了这个限制
select a.datenum,a.open_id,ABS(b.datenum-a.datenum) as num_abs
from ots_scan_gps_h_20180314 a 
left outer join ots_scan_history_hh b 
on b.dt='2018-03-14_22'  and ( a.city is not null or a.city<>'' );

UNION支持隐式类型转换

SQL1.0 UNION 两边Schema必须完全一直, NewSQL可以自动做隐式类型转换,隐式转换规则参考 https://yq.aliyun.com/articles/225027

新的内置函数

参考:https://yq.aliyun.com/articles/225027

Table Alias语法扩充

SQL1.0的table alias, t1和t2

select t1.* 
from predict t1 join syk_level t2
on t1.province_id = t2.province_id;
NewSQL可以用as关键字
select t1.* 
from predict as t1 join syk_level as t2
on t1.province_id = t2.province_id;

Top level UNION的支持

SQL1.0
select * from (select * from t1 union all select * from t2) t;

NewSQL
select * from t1 union all select * from t2

UNION DISTINCT(UNION)的支持

SQL1.0只支持 UNION ALL,NewSQL支持 UNION ALL 和 UNION [DISTINCT]

没有From的Select

NewSQL的新语法
select 1 as id, 98.7 as score;

Implicit Join

NewSQL的语法

select t1.* 
from predict as t1, syk_level as t2
where t1.province_id = t2.province_id;

NewSQL放宽了列名的使用限制

SQL1.0 的列名不允许使用SQL关键字,NewSQL放宽了这个限制

对MAPJOIN HINT的失败处理

SQL1.0里,MAPJOIN HINT不合法会报错,NewSQL改为了返回警告并忽略。

Window Function的扩充

SQL1.0里不允许对Window Fuction的结果进行运算,NewSQL放开了这个限制
select *
,origin - lag(origin) over (partition by eqp_id, type_id order by utc_time) as origin_gap
from w;
SQL1.0里每条Query的Window Fuction不能超过5个,NewSQL放开了这个限制

SQ1.0里的Window Funciton不允许order by或partition by为constance,NewSQL放开了这个限制

select ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY 1) AS rownum from dual;
SQL1.0要求ROW_NUMBER函数必须有partition by,NewSQL放开了这个限制
select *, 
row_number() over(order by sale_total desc) as province_sale_rank
from yc_passenger;

购买&试用MaxCompute,请扫二维码加入钉钉群。
96e17df884ab556dc002c912fa736ef6558cbb51

猜你喜欢

转载自yq.aliyun.com/articles/591109