由于在CDH或HDP中运行的Hive的早期版本与CDP中的Hive 3之间的语义变化,您需要执行许多与迁移相关的更改。Hive 3中与db.table引用和DROP CASCADE相关的一些语法更改可能需要对应用程序进行更改。
转换时间戳
将数字转换为时间戳的应用程序的结果从Hive 2到Hive 3有所不同。ApacheHive更改了CAST的行为以符合SQL标准,该标准不将时区与TIMESTAMP类型相关联。
升级到CDP之前
将数字类型值强制转换为时间戳可用于生成反映集群时区的结果。例如,1597217764557是2020-08-12 PDT。运行以下查询将数字转换为PDT中的时间戳:
> SELECT CAST(1597217764557 AS TIMESTAMP);| 2020-08-12 00:36:04 |
升级到CDP之后
将数字类型值转换为时间戳会产生反映UTC而不是集群时区的结果。运行以下查询将数字强制转换为UTC中的时间戳。
> SELECT CAST(1597217764557 AS TIMESTAMP);| 2020-08-12 07:36:04.557 |
需要采取的行动
更改应用程序。不要通过数字强制转换来获取本地时区。内置函数from_utc_timestamp和to_utc_timestamp可用于模拟升级前的行为。
检查字段变更的兼容性
默认配置更改可能导致更改列类型的应用程序失败。
升级到CDP之前
在HDP 2.x中hive.metastore.disallow.incompatible.col.type.changes默认值是false,阻止Hive不兼容的字段类型的变更。例如,您可以将STRING列更改为不兼容类型的列,例如MAP 。没有错误发生。
升级到CDP之后
在CDP中,hive.