hive - 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 位数字(全为零)。
谁能解释为什么会发生这种情况以及我如何解决这种行为?
解决方案
Impala/Hive 将多个前导零视为冗余并修剪它们。我不确定是否可以打开/关闭此行为。我使用 lpad 功能解决了这个问题。