从 Hive 到 Vertica 的数据类型转换

Hive 识别的数据类型与 Vertica 识别的数据类型不同。下表列出了 HCatalog 连接器如何将 Hive 数据类型转换为与 Vertica 兼容的数据类型。

Hive 和 Vertica 之间的数据宽度处理差异

HCatalog 连接器依靠 Hive SerDe 类从 HDFS 上的文件中提取数据。因此,从这些文件中读取的数据须遵从 Hive 的数据宽度限制。例如,假定 SerDe 将 INT 列的一个值解析成大于 232-1 的值(32 位整数的最大值)。在这种情况下,即使该值适合 Vertica 的 64 位 INTEGER 列也会被拒绝,因为它不属于 Hive 的 32 位 INT。

Hive 以字符为单位测量 CHAR 和 VARCHAR 的长度,而 Vertica 以字节为单位测量其长度。因此,如果使用多字节编码(如 Unicode),文本可能会在 Vertica 中被截断。

值经过解析并转换成 Vertica 数据类型后,会被视为原生数据。比较分别在 Hive 和 Vertica 中运行完全相同的查询所得的结果时,这种处理可能会导致一些混乱。例如,如果您的查询添加两个 INT 值,得到一个大于 232-1 的值,该值会溢出其 32 位 INT 数据类型,导致 Hive 返回错误。而使用 HCatalog 连接器在 Vertica 中运行具有相同数据的相同查询时,该值很可能仍然属于 Vertica 的 64 位 int 值。因此,该添加成功并返回一个值。