大数据计算服务MaxCompute
SQL
SQL
概要介绍
MaxCompute SQL适用于海量数据(TB级别),实时性要求不高的场合,它的每个作业的准备,提交等阶段要花费较长时间,因此要求每秒处理几千至数万笔事务的业务是不能用 MaxCompute 完成的。
MaxCompute SQL采用的是类似于SQL的语法,可以看作是标准SQL的子集,但不能因此简单的把MaxCompute 等价成一个数据库,它在很多方面并不具备数据库的特征,如事务、主键约束、索引等。目前在 MaxCompute 中允许的最大SQL长度是2MB。
关键字
MaxCompute 将SQL语句的关键字作为保留字。在对表、列或是分区命名时请不要使用,否则会报错。保留字不区分大小写。下面只给出常用的保留字列表,完整的保留字列表请参阅 MaxCompute SQL保留字。
% & && ( ) * +
- . / ; < <= <>
= > >= ? ADD ALL ALTER
AND AS ASC BETWEEN BIGINT BOOLEAN BY
CASE CAST COLUMN COMMENT CREATE DESC DISTINCT
DISTRIBUTE DOUBLE DROP ELSE FALSE FROM FULL
GROUP IF IN INSERT INTO IS JOIN
LEFT LIFECYCLE LIKE LIMIT MAPJOIN NOT NULL
ON OR ORDER OUTER OVERWRITE PARTITION RENAME
REPLACE RIGHT RLIKE SELECT SORT STRING TABLE
THEN TOUCH TRUE UNION VIEW WHEN WHERE
MaxCompute SQL允许数据类型之间的转换,类型转换方式包括:显式类型转换及隐式类型转换。
类型转换说明
显式类型转换
显式类型转换是用cast将一种数据类型的值转换为另一种类型的值的行为,在MaxCompute SQL中支持的显式
---------其中,'Y'表示可以转换,'N'表示不可以转换,'-'表示不需要转换。 比如:
备注:
将double类型转为bigint类型时,小数部分会被截断,例如:cast(1.6 as bigint) = 1;满足double格式的string类型转换为bigint时,会先将string转换为double,再将double转换为bigint,因此,小数部分会被截断,例如cast("1.6" as bigint) = 1;
满足bigint格式的string类型可以被转换为double类型,小数点后保留一位,例如:cast("1" as double) = 1.0;
不支持的显式类型转换会导致异常;如果在执行时转换失败,报错退出;
日期类型转换时采用默认格式yyyy-mm-dd hh:mi:ss,详细说明信息请参考String类型与Datetime类型之间的转换;
部分类型之间不可以通过显式的类型转换,但可以通过SQL内建函数进行转换,例如:从boolean类型转换到string类型,可使用函数to_char,详细介绍请参考 TO_CHAR ,而to_date函数同样支持从string类型到datetime类型的转换,详细介绍请参考 TO_DATE ;关于cast的介绍请参阅 CAST ;
DECIMAL超出值域,CAST STRING TO DECIMAL可能会出现最高位溢出报错,最低位溢出截断等情况。
隐式类型转换及其作用域
隐式类型转换是指在运行时,由 MaxCompute 依据上下文使用环境及类型转换规则自动进行的类型转换。MaxCompute 支持的隐式类型转换规则与显式转换相同:
select cast(user_id as double) as new_id from user;
select cast('2015-10-01 00:00:00' as datetime) as new_date from user;
-
-----其中,'Y'表示可以转换,'N'表示不可以转换,'-'表示不需要转换。
常见用法如下:
备注:
不支持的隐式类型转换会导致异常;如果在执行时转换失败,也会导致异常;
由于隐式类型转换是 MaxCompute 依据上下文使用环境自动进行的类型转换,因此,我们推荐在类型不匹配时显式的用cast进行转换;
隐式类型转换规则是有发生作用域的。在某些作用域中,只有一部分规则可以生效。详细信息请参考隐式类型转换的作用域;
关系运算符
关系运算符包括:=, <>, <, <=, >, >=, IS NULL, IS NOT NULL, LIKE, RLIKE和IN。由于LIKE, RLIKE和IN的隐式类型转换规则不同于其他关系运算符,将单独拿出章节对这三种关系运算符做出说明。本小节的说明不包含这三种特殊的关系运算符。当不同类型的数据共同参与关系运算时,按照下述原则进行隐式类型转换。
备注:
如果待比较的两个类型间不能进行隐式类型转换,则该关系运算不能完成,报错退出;关系运算符介绍,请参阅 关系操作符 ;
select user_id+age+'12345',concat(user_name,user_id,age)from user;
--------特殊的关系运算符(LIKE, RLIKE, IN)
LIKE及RLIKE的使用方式形如:正则匹配日期年月日时分秒
此二者在隐式类型转换中的注意事项:
LIKE和RLIKE的source和pattern参数均仅接受string类型;
其他类型不允许参与运算,也不能进行到string类型的隐式类型转换;IN的使用方式形如:
In的隐式转换规则:
In右侧的value值列表中的数据类型必须一致;
当key与values之间比较时,若bigint, double, string之间比较,统一转double,若datetime和string之间比较,统一转datetime。除此之外不允许其它类型之间的转换。
算术运算符
算术运算符包括:+, -, * , /, %, +, -,其隐式转换规则:
只有string、bigint、double和Decimal才能参与算术运算。String在参与运算前会进行隐式类型转换到double。Bigint和double共同参与计算时,会将bigint隐式转换为double。日期型和布尔型不允许参与算数运算。 备注:
算术运算符的相关章节 算术操作符。
逻辑运算符
逻辑运算符包括:and, or和not,其隐式转换规则:
只有boolean才能参与逻辑运算。
其他类型不允许参与逻辑运算,也不允许其他类型的隐式类型转换。
备注:
逻辑运算符的相关章节 逻辑操作符。
source like pattern;source rlike pattern;
key in (value1, value2, …)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论