开发者社区 问答 正文

MaxCompute产品简介:基本概念:数据类型



基本数据类型


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

  • 若想使用新数据类型,需在 SQL 语句前加语句:set odps.sql.type.system.odps2=true;
类型是否新增常量定义描述
TINYINT1Y,-127Y8 位有符号整形,范围 -128 到 127
SMALLINT32767S, -100S16 位有符号整形, 范围 -32768 到 32767
INT1000,-15645787(注释1)32位有符号整形,范围-231到231 - 1
BIGINT100000000000L, -1L64位有符号整形, 范围-263 + 1到263 - 1
FLOAT32位二进制浮点型
DOUBLE3.1415926 1E+764位二进制浮点型
DECIMAL3.5BD, 99999999999.9999999BD10 进制精确数字类型,整形部分范围-1036+1到1036-1, 小数部分精确到 10-18
VARCHAR无 ( 注释2 )变长字符类型,n为长度,取值范围 1 到 65535
STRING“abc”,’bcd’,”alibaba” ‘inc’ ( 注释3 )字符串类型,目前长度限制为 8M
BINARY二进制数据类型,目前长度限制为 8M
DATETIMEDATETIME ‘2017-11-11 00:00:00’日期时间类型,范围从0000年1月1日到9999年12月31日,精确到毫秒
TIMESTAMPTIMESTAMP ‘2017-11-11 00:00:00.123456789’与时区无关的时间戳类型,范围从0000年1月1日到9999年12月31日 23.59:59.999999999, 精确到纳秒
BOOLEANTRUE,FALSEboolean 类型, 取值 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 语句前加语句:set odps.sql.type.system.odps2=true;
类型定义方法构造方法
ARRAYarray< int >;
array< struct< a:int, b:string >>
array(1, 2, 3);
array(array(1, 2);
array(3, 4))
MAPmap< string, string >;
map< smallint, array< string>>
map(“k1”, “v1”, “k2”, “v2”);
map(1S, array(‘a’, ‘b’), 2S, array(‘x’, ‘y))
STRUCTstruct< 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)

展开
收起
行者武松 2017-10-23 14:59:57 3281 分享 版权
阿里云 AI 助理回答

MaxCompute 2.0 引入了更多数据类型以增强其处理多样化数据的能力,包括基本数据类型和复杂数据类型。下面是对您提供的信息的总结和补充说明:

基本数据类型

在MaxCompute 2.0中,新增了一系列基本数据类型,以满足不同场景下的需求。使用这些新类型前,需要在SQL语句前设置set odps.sql.type.system.odps2=true;来启用新类型系统。

  • TINYINT: 8位有符号整数,范围从-128到127。
  • SMALLINT: 16位有符号整数,范围从-32768到32767。
  • INT: 32位有符号整数,注意脚本中的兼容性问题,如超出范围会自动转换为BIGINT。
  • FLOAT: 32位二进制浮点型。
  • VARCHAR(n): 变长字符类型,长度可指定,范围1到65535。
  • TIMESTAMP: 与时区无关的时间戳,精确到纳秒,格式如TIMESTAMP '2017-11-11 00:00:00.123456789'
  • BINARY: 二进制数据类型,最大长度8MB。

此外,还保留了原有的一些类型,如BIGINT、DOUBLE、DECIMAL、STRING、DATETIME、BOOLEAN等。

复杂数据类型

为了支持更复杂的结构化数据,MaxCompute 2.0引入了以下复杂数据类型:

  • ARRAY: 用于存储同质元素的有序集合。定义方法为array<element_type>,例如array<int>表示一个整数数组。
  • MAP: 存储键值对的无序集合,键必须唯一。定义方法为map<key_type, value_type>,如map<string, int>
  • STRUCT: 结构体类型,可以包含多个不同类型的字段。定义方法为一系列命名字段,如struct<field1:type1, field2:type2>,构造时使用named_struct('field1', value1, 'field2', value2)

复杂数据类型使得MaxCompute能够更好地适应半结构化和非结构化数据的处理,提高了数据分析的灵活性和效率。

使用提示

  • 在编写SQL查询时,确保正确设置了odps.sql.type.system.odps2参数以利用新类型。
  • 注意不同类型间的隐式转换规则,避免数据丢失或不准确的计算结果。
  • 利用复杂数据类型时,合理设计数据模型,可以有效提升数据处理的性能和便捷性。

通过上述数据类型的支持,MaxCompute 2.0能够更好地服务于大数据分析、数据仓库构建以及机器学习等多种应用场景。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答