MaxCompute 2.0推出了兼容开源主流产品的2.0数据类型和Hive兼容数据类型两个数据类型版本。加上原有的1.0数据类型版本,目前MaxCompute一共支持3个数据类型版本。
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。
在新增项目时MaxCompute可以对3个版本的数据类型进行选择,各个版本默认设置如下:
- 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数据类型版本。
- 2.0数据类型版本
setproject odps.sql.type.system.odps2=true; --打开MaxCompute 2.0数据类型。 setproject odps.sql.decimal.odps2=true; --打开Decimal 2.0数据类型。 setproject odps.sql.hive.compatible=false; --关闭Hive兼容模式。
适用于在2020年04月之前无存量数据的MaxCompute项目,且该项目依赖的产品组件支持2.0数据类型版本。
- Hive兼容数据类型
setproject odps.sql.type.system.odps2=true; --打开MaxCompute 2.0数据类型。 setproject odps.sql.decimal.odps2=true; --打开Decimal 2.0数据类型。 setproject odps.sql.hive.compatible=true; --打开Hive兼容模式。
适用于从Hadoop迁移的MaxCompute项目,且该项目依赖的产品组件支持2.0数据类型版本。
说明 阿里云其他产品或组件对数据类型的支持情况,请参见组件与数据类型的兼容。
选择数据类型版本
项目选择的数据类型版本影响范围如下:
- 表的数据类型。
- DML语句、内置函数的行为。
- 与MaxCompute密切相关的开发组件。
查看项目的数据类型版本
您可以在MaxCompute客户端上执行如下命令,查看已经创建项目的属性。
setproject;
查看odps.sql.type.system.odps2、odps.sql.decimal.odps2、odps.sql.hive.compatible属性判断当前项目的数据类型版本。
修改项目的数据类型版本
如果发现项目当前选择的数据类型版本不能满足业务需求,可以修改数据类型版本。
项目管理员(Project Owner)或超级管理员角色(Super_Administrator Role)可以在MaxCompute客户端、使用控制台(查询编辑器)连接、MaxCompute Studio或DataWorks上执行如下命令,修改项目的数据类型版本。
重要 在DataWorks数据开发的ODPS SQL节点中不能单独执行如下SET类SQL,必须与SELECT或INSERT类SQL一起执行。
--查看项目数据类型版本。
setproject;
--开启/关闭MaxCompute2.0数据类型版本。
setproject odps.sql.type.system.odps2=true/false;
--开启/关闭decimal2.0数据类型。
setproject odps.sql.decimal.odps2=true/false;
--开启/关闭hive兼容模式数据类型版本。
setproject odps.sql.hive.compatible=true/false;
修改建议如下:
- 项目当前使用2.0数据类型版本,如果发现必须使用的组件不支持2.0数据类型。您可以使用如下方式解决与不支持2.0数据类型组件的对接问题:
- 将项目修改为1.0数据类型版本。
- 在与不支持2.0数据类型组件对接任务时,将Session设置为1.0数据类型版本。 说明 将如下语句与Session中的命令一起提交,即可将该Session设置为1.0数据类型版本。该命令仅支持小写。
set odps.sql.type.system.odps2=false;
- 项目使用2.0数据类型版本,部分SQL必须使用1.0数据类型,但是部分功能依赖2.0数据类型(例如current_timestamp函数)。解决方法如下:
- 将SQL拆分为单独的Session,将Session设置为1.0数据类型版本。
- 将SQL改写为可以替代的功能。
- 如果项目最开始使用了2.0数据类型版本,后面变更成1.0数据类型版本。需要注意以下2点:
- 对于已经使用了2.0数据类型的表,读取数据时,TINYINT、SMALLINT、INT转为BIGINT类型,CHAR、VARCHAR转为STRING类型。
- 建立1.0数据类型的表,将2.0数据类型的表中数据通过CAST函数导入1.0数据类型的表,即可将2.0数据类型的数据转化为1.0数据类型。