1.0数据类型版本

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进制精确数字类型。默认为decimal(54,18),precisionscale不可调整。整型部分取值范围:-1036+1~1036-1,小数部分精确到10-18

STRING

"abc"、'bcd'、"alibaba"、'inc'

字符串类型。

长度限制为8 MB。

DATETIME

DATETIME'2017-11-11 00:00:00'

日期时间类型。

取值范围:000011日~99991231日。

BOOLEAN

True、False

BOOLEAN类型。

取值范围:TrueFalse。

数据类型说明如下:

  • 上述数据类型均可以为NULL。

  • 整型常量的语义默认为BIGINT类型。如果常量超过了BIGINT的值域(例如1,000,000,000,000,000,000,000,000),会被作为DOUBLE类型处理。例如SELECT 1 + a;中的整型常量1会被作为BIGINT类型处理。

  • 如果参数涉及2.0数据类型的内置函数,无法在1.0数据类型版本正常使用。

  • 分区表的分区列的数据类型只支持STRING类型。

  • 支持连接STRING常量。例如,abcxyz会解析为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 BYCLUSTER 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