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.odps2odps.sql.decimal.odps2odps.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数据类型。