全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件
MaxCompute

数据类型

更新时间:2018-01-26 11:57:47

基本数据类型

MaxCompute2.0 支持的基本数据类型如下表,新增类型有:TINYINT、SMALLINT、 INT、 FLOAT、VARCHAR、TIMESTAMP 和 BINARY,MaxCompute 表中的列必须是下列描述的任意一种类型,详情如下:

注意

  • SQL(Create、select、insert等操作)中涉及到新数据类型(TINYINT、SMALLINT、 INT、 FLOAT、VARCHAR、TIMESTAMP BINARY),需在 SQL 语句前加语句:set odps.sql.type.system.odps2=true;,执行时set语句和sql语句一起提交执行。

    涉及int类型,加上述set语句的时候是32位,不加的时候会被转换成bigint,64位。

  • MR类型任务目前暂时不支持操作新数据类型。

类型 是否新增 常量定义 描述
TINYINT 1Y,-127Y 8 位有符号整形,范围 -128 到 127
SMALLINT 32767S, -100S 16 位有符号整形, 范围 -32768 到 32767
INT 1000,-15645787(注释1) 32位有符号整形,范围-231到231 - 1
BIGINT 100000000000L, -1L 64位有符号整形, 范围-263 + 1到263 - 1
FLOAT 32位二进制浮点型
DOUBLE 3.1415926 1E+7 64位二进制浮点型
DECIMAL 3.5BD, 99999999999.9999999BD 10 进制精确数字类型,整形部分范围-1036+1到1036-1, 小数部分精确到 10-18
VARCHAR 无 ( 注释2 ) 变长字符类型,n为长度,取值范围 1 到 65535
STRING “abc”,’bcd’,”alibaba” ‘inc’ ( 注释3 ) 字符串类型,目前长度限制为 8M
BINARY 二进制数据类型,目前长度限制为 8M
DATETIME DATETIME ‘2017-11-11 00:00:00’ 日期时间类型,范围从0000年1月1日到9999年12月31日,精确到毫秒
TIMESTAMP TIMESTAMP ‘2017-11-11 00:00:00.123456789’ 与时区无关的时间戳类型,范围从0000年1月1日到9999年12月31日 23.59:59.999999999, 精确到纳秒
BOOLEAN TRUE,FALSE boolean 类型, 取值 TRUE 或 FALSE

上述的各种数据类型均可为 NULL。

注释:

  • 注释1:对于 INT 常量,如果超过 INT 取值范围,会转为 BIGINT;如果超过 BIGINT 取值范围,会转为 DOUBLE。

    在旧版 MaxCompute 中,因为历史原因,SQL 脚本中的所有 INT 类型都被转换为 BIGINT,例如:

    1. create table a_bigint_table(a int); -- 这里的int实际当作bigint处理
    2. select cast(id as int) from mytable; -- 这里的int实际当作bigint处理

    为与 MaxCompute 原有模式兼容,MaxCompute2.0 在未设定 odps.sql.type.system.odps2 为 true 的情况下,仍保留此转换,但会报告一个警告,提示 INT 被当作 BIGINT 处理了,如果您的脚本有此种情况,建议全部改写为 BIGINT,避免混淆。

  • 注释2:VARCHAR 类型常量可通过 STRING 常量的隐式转换表示。

  • 注释3:STRING 常量支持连接,例如 ‘abc’ ‘xyz’ 会解析为 ‘abcxyz’,不同部分可以写在不同行上。

复杂数据类型

MaxCompute2.0 支持的复杂类型见下表。

注意:SQL(Create、select、insert等操作)中涉及到这几个复杂数据类型,需在sql语句前加语句:set odps.sql.type.system.odps2=true;,执行时set语句和sql语句一起提交执行。

类型 定义方法 构造方法
ARRAY array< int >;
array< struct< a:int, b:string >>
array(1, 2, 3);
array(array(1, 2);
array(3, 4))
MAP map< string, string >;
map< smallint, array< string>>
map(“k1”, “v1”, “k2”, “v2”);
map(1S, array(‘a’, ‘b’), 2S, array(‘x’, ‘y))
STRUCT struct< x:int, y:int>;
struct< field1:bigint, field2:array< int>, field3:map< int, int>>
named_struct(‘x’, 1, ‘y’, 2);
named_struct(‘field1’, 100L, ‘field2’, array(1, 2), ‘field3’, map(1, 100, 2, 200)
本文导读目录