配置单元转义字符(\\)导致不匹配的令牌异常错误

oxcyiej7  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(539)

我有一个配置单元字段,其中数据以这种格式存储。

co_mx
["2.00","7570180962446"]
[3,"7566180246570"]
[6,"7577182138618"]
[10.00,"7573181367421"]
[10,"7573181433469"]

我想提取列表中的第二个元素,即较大的数字串。
当我在hivecliterminal中运行代码时,我只使用了两个转义字符(\),它可以工作,但是当使用 hive -e 要运行代码,我必须使用4个转义字符,但代码的粗体部分,即 then case语句的一部分导致了一些我无法调试的问题。

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

感谢你的帮助

wfsdck30

wfsdck301#

你不需要护盾 , . 这应该很管用: split(co_mx,',') 你可以用 [] 在许多情况下,对于这样的屏蔽: '[\"]' -这里的逃生舱是用来装炮弹的。在这种情况下,一次越狱就足够了。使用 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

相关问题