MaxCompute 1.0数据类型版本是MaxCompute三种数据类型版本之一,该数据类型版本仅支持1.0数据类型。本文为您介绍1.0数据类型版本的设置方法、支持的数据类型以及与其它数据类型版本的差异。

定义

项目空间选择数据类型版本为1.0数据类型版本时,项目的数据类型属性定义如下。
setproject odps.sql.type.system.odps2=false; --关闭MaxCompute 2.0数据类型。
setproject odps.sql.decimal.odps2=false; --关闭Decimal 2.0数据类型。
setproject odps.sql.hive.compatible=false; --关闭Hive兼容模式。

适用场景

适用于早期的MaxCompute项目,且该项目依赖的产品组件不支持2.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命令参考

与其它数据类型版本差异说明

  • 1.0数据类型版本的LIMIT、ORDER BY、DISTRIBUTE BY、SORT BY和CLUSTER BY操作与2.0数据类型版本不同。
    例如,LIMIT操作语句SELECT * FROM t1 UNION ALL SELECT * FROM t2 LIMIT 10;
    • 1.0数据类型版本:SELECT * FROM t1 UNION ALL SELECT * FROM ( SELECT * FROM t2 LIMIT 10) t2;
    • 2.0数据类型版本:SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t2 ) t LIMIT 10;
  • 1.0数据类型版本的IN表达式与2.0数据类型版本不同。
    例如a IN (1, 2, 3)
    • 1.0数据类型版本:IN括号里的所有值类型必须一致。
    • 2.0数据类型版本:IN括号里的所有值支持通过隐式类型转换为一致类型。

复杂数据类型

类型 定义方法 构造方法
ARRAY
  • ARRAY<BIGINT>
  • ARRAY<STRUCT<a:BIGINT, b:STRING>>
  • ARRAY(1, 2, 3)
  • ARRAY(NAMED_STRUCT('a', 1, 'b', '2'), NAMED_STRUCT('a', 3, 'b', '4'))
MAP
  • MAP<STRING, STRING>
  • MAP<BIGINT, ARRAY<STRING>>
  • MAP("k1", "v1", "k2", "v2")
  • MAP(1L, ARRAY('a', 'b'), 2L, ARRAY('x', 'y'))
STRUCT
  • STRUCT<'x', BIGINT, 'y', BIGINT>
  • STRUCT<'field1', BIGINT, 'field2', ARRAY<BIGINT>, 'field3', MAP<BIGINT>>
  • NAMED_STRUCT('x', 1, 'y', 2)
  • NAMED_STRUCT('field1', 100L, 'field2', ARRAY(1, 2), 'field3', MAP(1, 100, 2, 200))
说明 MaxCompute的复杂数据类型可以被嵌套使用,相关的内建函数说明请参见ARRAYMAPSTRUCT