首页 > 解决方案 > Impala CONV 函数无法始终将 BASE-16 转换为 BASE-2

问题描述

我有需要转换为 Base-2 二进制字符串的十六进制字符串,但我无法让 Impala 始终如一地执行。

例如

我希望这样的声明:

select conv('0020008000',16,2) union
select conv('000006040A',16,2);

返回:

0000 0000 0010 0000 0000 0000 1000 0000 0000 0000
0000 0000 0000 0000 0000 0110 0000 0100 0000 1010

但是,相反,它正在返回:

0000 0000 0010 0000 0000 0000 1000 0000 0000 0000
                          1100 0000 1000 0001 010

第一个 HEX 值转换正确,但第二个缺少前 21 位数字(全为零)。

谁能解释为什么会发生这种情况以及我如何解决这种行为?

标签: hivebinaryhexclouderaimpala

解决方案


Impala/Hive 将多个前导零视为冗余并修剪它们。我不确定是否可以打开/关闭此行为。我使用 lpad 功能解决了这个问题。


推荐阅读