Impala CONV 函数无法始终如一地将 BASE-16 转换为 BASE-2

Impala CONV function not consistently converting BASE-16 to BASE-2

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

例如

我希望这样的声明:

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

至return:

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

然而,它是 returning:

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

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

任何人都可以解释为什么会发生这种情况以及我该如何解决这个问题?

Impala/Hive 将多个前导零视为冗余并修剪它们。我不确定是否可以切换此行为 on/off。我使用 lpad 函数解决了这个问题。