Greenplum迁移至Hive场景下含hex_to_int的SQL语句转换求助
Greenplum到Hive迁移hex_to_int函数替换方案
Greenplum中hex_to_int()函数的作用是将十六进制字符串转换为十进制整数,Hive没有原生同名函数,可使用conv(十六进制字符串, 16, 10)实现完全等效的能力,两个待转换SQL的改写结果如下:
- 第一条原语句:
('41405'||lpad(hex_to_int(lac),5,'0')||lpad(hex_to_int(ci),5,'0'))
Hive兼容改写版本:-- 写法1:保留||运算符(需确认Hive版本开启了pipes_as_concat参数) ('41405'||lpad(conv(lac,16,10),5,'0')||lpad(conv(ci,16,10),5,'0')) -- 写法2:使用concat函数,全版本兼容 concat('41405', lpad(conv(lac,16,10),5,'0'), lpad(conv(ci,16,10),5,'0')) - 第二条原语句:
lpad(hex_to_int(lac),5,'0')
Hive兼容改写版本:lpad(conv(lac,16,10),5,'0')
语句中文含义:将十六进制格式的lac字段值转换为十进制整数后,在左侧补0,将总长度对齐到5位
如果后续需要对转换后的结果做数值计算,可嵌套cast函数转换为数值类型,示例:cast(conv(lac,16,10) as bigint)
内容的提问来源于stack exchange,提问作者Developer Rajinikanth
相关产品推荐
相关产品推荐

