链接:数据类型_云原生大数据计算服务 MaxCompute(MaxCompute)-阿里云帮助中心
MaxCompute数据类型版本
MaxCompute设置数据类型版本属性的参数共有3个:
- odps.sql.type.system.odps2:MaxCompute 2.0数据类型版本的开关,属性值为True或False。
- odps.sql.decimal.odps2:MaxCompute 2.0的Decimal数据类型的开关,属性值为True或False。
- odps.sql.hive.compatible:MaxCompute Hive兼容模式(即部分数据类型和SQL行为兼容Hive)数据类型版本的开关,属性值为True或False。
1.0数据类型版本
数据类型
类型 | 常量示例 | 描述 |
---|---|---|
BIGINT | 100000000000L、-1L | 64位有符号整型。 取值范围:-263+1~263-1。 |
DOUBLE | 3.14159261E+7 | 64位二进制浮点型。 |
DECIMAL | 3.5BD、99999999999.9999999BD | 10进制精确数字类型。 整型部分取值范围:-1036+1~1036-1,小数部分精确到10-18。 |
STRING | "abc"、'bcd'、"alibaba"、'inc' | 字符串类型。 长度限制为8 MB。 |
DATETIME | DATETIME'2017-11-11 00:00:00' | 日期时间类型。 取值范围:0000年1月1日~9999年12月31日。 |
BOOLEAN | True、False | BOOLEAN类型。 取值范围:True或False。 |
数据类型说明如下:
- 上述数据类型均可以为NULL。
- 整型常量的语义默认为BIGINT类型。如果常量超过了BIGINT的值域(例如1,000,000,000,000,000,000,000,000),会被作为DOUBLE类型处理。例如
SELECT 1 + a;
中的整型常量1会被作为BIGINT类型处理。 - 如果参数涉及2.0数据类型的内置函数,无法在1.0数据类型版本正常使用。
- 分区表的分区列的数据类型只支持STRING类型。
- 支持连接STRING常量。例如,abc和xyz会解析为abcxyz。
- 向DECIMAL字段插入常量时,常量的写法需要与常量定义中的格式保持一致。例如示例代码中的
3.5BD
。INSERT INTO test_tb(a) VALUES (3.5BD);
- DATETIME查询显示的时间值不包含毫秒。Tunnel通过
-dfp
指定时间格式,可以指定显示到毫秒,例如tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS'
。Tunnel详情请参见Tunnel命令参考。
复杂数据类型
类型 | 定义方法 | 构造方法 |
---|---|---|
ARRAY |
|
|
MAP |
|
|
STRUCT |
|
|
2.0数据类型版本
基础数据类型
类型 | 常量示例 | 描述 |
TINYINT | 1Y、-127Y | 8位有符号整型。 取值范围:-128~127。 |
SMALLINT | 32767S、-100S | 16位有符号整型。 取值范围:-32768~32767。 |
INT | 1000、-15645787 | 32位有符号整型。 取值范围:-2 31~2 31-1。 |
BIGINT | 100000000000L、-1L | 64位有符号整型。 取值范围:-2 63+1~2 63 -1。 |
BINARY | unhex('FA34E10293CB42848573A4E39937F479') | 二进制数据类型,目前长度限制为8 MB。 |
FLOAT | 3.14F、cast(3.14159261E+7 as float) | 32位二进制浮点型。 由于计算机存储以及内部计算逻辑,用FLOAT类型进行计算时会有精度损失,如果对精度要求比较高,需要将FLOAT数据类型转换成DECIMAL类型进行计算。 |
DOUBLE | 3.14D、3.14159261E+7 | 64位二进制浮点型。 由于计算机存储以及内部计算逻辑,用DOUBLE类型进行计算时会有精度损失,如果对精度要求比较高,需要将DOUBLE数据类型转换成DECIMAL类型进行计算。 |
DECIMAL(precision,scale) | 3.5BD、99999999999.9999999BD | 10进制精确数字类型。
如果不指定以上两个参数,则默认为
|
VARCHAR(n) | 无 | 变长字符类型,n为长度。 取值范围:1~65535。 |
CHAR(n) | 无 | 固定长度字符类型,n为长度。最大取值255。长度不足则会填充空格,但空格不参与比较。 |
STRING | "abc"、'bcd'、"alibaba"、'inc' | 字符串类型,目前长度限制为8 MB。 |
DATE | DATE'2017-11-11' | 日期类型,格式为 取值范围:0001-01-01~9999-12-31。 |
DATETIME | DATETIME'2017-11-11 00:00:00' | 日期时间类型。 取值范围:0001-01-01 00:00:00.000~9999-12-31 23:59:59.999,精确到毫秒。 |
TIMESTAMP | TIMESTAMP'2017-11-11 00:00:00.123456789' | 时间戳类型。 取值范围:0001-01-01 00:00:00.000000000~9999-12-31 23:59:59.999999999,精确到纳秒。 TIMESTAMP类型本身与时区无关,在任何时区,TIMESTAMP类型存储的都是从Epoch(UTC 1970-01-01 00:00:00)开始的一个偏移量。您可以通过内建函数对TIMESTAMP类型数据执行与时区相关的计算,如 |
BOOLEAN | True、False | BOOLEAN类型。 取值范围:True、False。 |
数据类型说明如下:
-
上述的各种数据类型均可以为NULL。
-
SQL中的INT关键字是32位整型。
--将a转换为32位整型。 cast(a as INT)
-
整型常量的语义会默认为INT类型。例如
SELECT 1 + a;
中的整型常量1会被作为INT类型处理。如果常量过长,超过了INT的值域而又没有超过BIGINT的值域,则会作为BIGINT类型处理;如果超过了BIGINT的值域,则会被作为DOUBLE类型处理。 -
隐式转换
-
部分隐式类型转换会被禁用。例如,STRING->BIGINT、STRING->DATETIME、DOUBLE->BIGINT、DECIMAL->DOUBLE、DECIMAL->BIGINT有精度损失或者报错的风险。禁用类型可以通过CAST函数强制进行数据类型转换。
-
VARCHAR类型常量可以通过隐式转换为STRING常量。
-
-
表、函数以及UDF
-
参数涉及2.0数据类型的内置函数,在2.0数据类型版本下可以正常使用。
-
UDF包含的数据类型都会按照2.0数据类型进行解析重载。
-
分区列支持STRING、VARCHAR、CHAR、TINYINT、SMALLINT、INT、BIGINT数据类型。
-
-
STRING常量支持连接,多(2个及以上)个字符串放一起,会自动连接成一个字符串,例如执行
select 'abc' 'efg' 'ddt';
,返回结果为abcefgddt
。 -
给DECIMAL字段插入常量时,常量的写法需要与常量定义中的格式保持一致。例如下面示例代码中的
3.5BD
。insert into test_tb(a) values (3.5BD)
-
DATETIME查询显示的时间值不包含毫秒。Tunnel命令通过
-dfp
来指定时间格式,可以指定到毫秒显示,例如tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS'
。关于Tunnel命令的更多信息,请参见Tunnel命令。
复杂数据类型
类型 | 定义方法 | 构造方法 |
ARRAY |
|
|
MAP |
|
|
STRUCT |
|
|
JSON |
|
|
说明