MaxCompute说明
MaxCompute 适用于数据量大(TB级别),实时性要求不高的场合,它的每个作业的准备,提交等阶段要花费数秒时间,因此要求每秒处理几千至数万笔事务的业务是不能用 MaxCompute 完成的,这种情况请用 Tablestore。
MaxCompute 采用的是类似于 SQL 的语法,可以看作是标准 SQL 的一个子集,但不能因此简单的把 MaxCompute 等价成一个数据库,它在很多方面并不具备数据库的特征,如事务、主键约束。
数据存储单元
在 MaxCompute 中,所有的数据都被存储在表中,表是由行和列组成的二维数据结构,每行代表一条记录,不同的列由列名和列数据类型标识,如下表所示:
SHOP_NAME | REVENUE |
---|---|
SHOP1 | 1000 |
SHOP1 | 1500 |
为了提高处理效率,可以对表进行分区(partition),这时数据可以看成由逻辑上独立的许多块组成,在使用数据时如果指定了需要访问的分区名称,则只会读取相应的分区,避免全表扫描,在数据量大的时候这个特性非常有用。大部分的数据可以采用日期,地区等属性进行分区,如下表所示:
SHOP_NAME | REVENUE | REGION |
---|---|---|
SHOP1 | 1000 | HZ |
SHOP1 | 1500 | HZ |
SHOP1 | 1000 | SH |
SHOP1 | 1500 | SH |
数据类型
类型 | 说明 |
---|---|
BIGINT | 8 字节有符号整型 |
BOOLEAN | 布尔型,包括 TRUE/FALSE |
DOUBLE | 8 字节双精度浮点数 |
STRING | 字符串 |
DATETIME | 日期类型 |
备注:
- BIGINT 的取值范围是-9223372036854775807 ~ 9223372036854775807。请不要使用-9223372036854775808,这是系统保留值。
- DOUBLE 的取值范围是 -1.0 * 10^308 ~ +1.0 * 10^308。
- DATETIME 类型表达的有效日期范围是 0001-01-01 00:00:00 到 9999-12-31 23:59:59
保留字
以下关键字是 MaxCompute 的保留字,在对表、列或是分区命名时请不要使用,否则会报错。保留字不区分大小写。
- % & && ( ) * . / ; ? | || + <
<= <> => >= ALL AND AS BETWEEN BY CASE CLUSTERED
CREATE DESC DISTINCT DROP ELSE END EXISTS
EXPORT FALSE FROM FULL GROUP IF IN INTO
IS JOIN LEFT LIKE LIMIT LOAD NOT NULL
ON OR ORDER OUTER OVER PARTITION PARTITIONED
RANGE READ RENAME RESOURCE RIGHT RLIKE SELECT
STRING TABLE THEN TO TRUE UNION VIEW WHEN
WHERE
运算符
关系操作符
操作符 | 说明 |
---|---|
A=B | 如果 A 或 B 为 NULL,返回 NULL;如果 A 等于 B,返回 TRUE,否则返回 FALSE |
A<>B | 如果 A 或 B 为 NULL,返回 NULL;如果 A 不等于 B,返回 TRUE,否则返回 FALSE |
A<B | 如果 A 或 B 为 NULL,返回 NULL;如果 A 小于 B,返回 TRUE,否则返回 FALSE |
A<=B | 如果 A 或 B 为 NULL,返回 NULL;如果 A 小于等于 B,返回 TRUE,否则返回 FALSE |
A>B | 如果 A 或 B 为 NULL,返回 NULL;如果 A 大于 B,返回 TRUE,否则返回 FALSE |
A>=B | 如果 A 或 B 为 NULL,返回 NULL;如果 A 大于等于 B,返回 TRUE,否则返回 FALSE |
A IS NULL | 如果 A 为 NULL,返回 TRUE,否则返回 FALSE |
A IS NOT NULL | 如果 A 不为 NULL,返回 TRUE,否则返回 FALSE |
A LIKE B | 如果 A 或 B 为 NULL,返回 NULL,A 为字符串,B 为要匹配的模式,如果匹配,返回 TRUE,否则返回 FALSE。’%‘匹配任意多个字符,’_‘匹配单个字符。要匹配%或_需要用转义符表示\\%, \\_ ‘aaa’ LIKE ‘a__’ ->TRUE ’aaa’ LIKE ‘a%’ ->TRUE ’aaa’ LIKE ‘aab’ ->FALSE ’a%b’ LIKE ‘a\\%b’ ->TRUE ’axb’ LIKE ‘a\\%b’ ->FALSE |
A RLIKE B | 如果 A 或 B 为 NULL,返回 NULL,A 是字符串,B 是字符串常量正则表达式,如果 B 为空串会报错退出。如果匹配成功,返回 TRUE,否则返回 FALSE |
A IN B | B 是一个集合,如果 A 为 NULL,返回 NULL,如 A 在 B 中则返回 TRUE,否则返回 FALSE |
备注:
- 两个 double 相等当且仅当 15 位有效数字之前都相等,且第 15 位相差不能大于 3。
算术操作符
操作符 | 说明 |
---|---|
A + B | 如果 A 或 B 为 NULL,返回 NULL;否则返回 A + B 的结果,A 和 B 为数字类型。如果 A 和 B 的类型不同,则自动转为高一级的类型。 |
A – B | 如果 A 或 B 为 NULL,返回 NULL;否则返回 A – B 的结果。A 和 B 为数字类型。如果 A 和 B 的类型不同,则自动转为高一级的类型。 |
A * B | 如果 A 或 B 为 NULL,返回 NULL;否则返回 A * B 的结果。A 和 B 为数字类型。如果 A 和 B 类型不同,则自动转为高一级的类型。 |
A / B | 如果 A 或 B 为 NULL,返回 NULL;否则返回 A / B 的结果。A 和 B 为数字类型,结果为 DOUBLE 类型。 |
A % B | 如果 A 或 B 为 NULL,返回 NULL;否则返回 A 模 B 的结果。 |
+A | 仍然返回 A |
-A | 如果 A 为 NULL,返回 NULL,否则返回-A |
备注:
算术运算符(+, -, *, /, %)会做隐式类型转换,当 double、bigint 或 string 做运算时,会转换成 double 类型。
位运算操作符
操作符 | 说明 |
---|---|
A & B | 返回 A 与 B 进行按位与的结果。例如: 1&2 返回 0,1&3 返回 1,NULL 与任何值按位与都为 NULL。A 和 B 必须为 bigint 类型。 |
A | B |
备注:
位运算符不支持隐式转换,只允许 bigint 类型。
逻辑操作符
操作符 | 说明 |
---|---|
A AND B | TRUE AND TRUE=TRUE TRUE AND FALSE=FALSE FALSE AND TRUE=FALSE FALSE AND NULL=FALSE NULL AND FALSE=FALSE TRUE AND NULL=NULL NULL AND TRUE=NULL NULL AND NULL=NULL |
A OR B | TRUE OR TRUE=TRUE TRUE OR FALSE=TRUE FALSE OR TRUE=TRUE FALSE OR NULL=NULL NULL OR FALSE=NULL TRUE OR NULL=TRUE NULL OR TRUE=TRUE NULL OR NULL=NULL |
NOT A | 如果 A 是 NULL,返回 NULL;如果 A 是 TRUE,返回 FALSE;如果 A 是 FALSE,返回 TRUE |
备注:
逻辑操作符只允许 boolean 类型参与运算,不支持隐式类型转换。