我有一个配置单元字段,其中的数据以这种格式存储。
co_mx
["2.00","7570180962446"]
[3,"7566180246570"]
[6,"7577182138618"]
[10.00,"7573181367421"]
[10,"7573181433469"]
我想提取列表中的第二个元素,即较大的数字字符串。
当我在Hive cli终端中运行代码时,我只使用了两个转义符(\),并且可以正常工作,但是我发现当使用hive -e
运行代码时,我必须使用4个转义符,但是代码的粗体部分,即case语句的then
部分引起了一些我无法调试的问题。
select
cast(
trim(case
when instr(split(split(co_mx,'\\\\,')[1],'\\\\]')[0],'\\\\"')>0 then
**split(split(split(co_mx,'\\\\,')[1],'\\\\]')[0],'\\\\"')[1]**
else split(split(co_mx,'\\\\,')[1],'\\\\]')[0]
end)
as string) as id
from input_table
感谢帮助
答案 0 :(得分:1)
您不需要屏蔽,
。这应该可以正常工作:split(co_mx,',')
在许多情况下,您可以使用[]
来进行如下屏蔽:'[\"]'
-这里的转义符是在shell中使用的。在这种情况下,一次转义就足以用于外壳。
您可以像这样"
来转义'[\"]'
并使用rlike
而不是instr
。
您的句子被重写:
select
cast(
trim(case
when MyStr rlike '[\"]' then split(MyStr,'[\"]')[1]
else MyStr
end)
as string) as id
from (select s.*,
split(split(co_mx,',')[1],'[]]')[0] MyStr
from input_table s
) s