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,请扫二维码加入钉钉群。