我在Hive工作:
我有以下字符串:
D.07.01.01=1;B=NUL;A=NUL;D.07.01.01=NUL;R=1;D.07.01.01=2;D.07.01.08=2;D.07.01.07=1;D.07.01.06=2;D.07.01.05=1;D.07.01.04=2;D.07.01.03=1;F=YES;D.07.01.02=1
字符串
对于一个给定的代码(D.07.01.01
),我想得到它的所有占位符旁边的最大整数,在上面的字符串中,我有D.07.01.01=1
,D.07.01.01=NUL
和D.07.01.01=2
。
期望的结果是2。
谢谢
已编辑
我设法写了下面的代码,以便有一个包含我的desirec代码的所有值(1,2和Nul)的列表,这样我就可以在以后应用greatest
函数:
select split(regexp_replace('D.07.01.01=1;B=NUL;A=NUL;D.07.01.01=NUL;R=1;D.07.01.01=2;D.07.01.08=2;D.07.01.07=1;D.07.01.06=2;D.07.01.05=1;D.07.01.04=2;D.07.01.03=1;F=YES;D.07.01.02=1', '.*D\\.07\\.01\\.01=(\\d+).*', '$1'), ';')
型
但这只会返回[“2”]。
1条答案
按热度按时间rpppsulh1#
我没有任何可以运行hive的东西来测试。但是这是在一个类似hive的平台上运行的。这是非常脆弱的,如果你有不干净的值(例如D.07.01.01 =带前导或尾随空格),你肯定会想确保它正确地处理它们。希望它是值得思考的。
理由
看起来你的值是用分号分隔的,所以如果你把每个元素分解成行,你就不会受到hive的正则表达式支持的限制(处理匹配数组似乎是一个障碍)。不要把它当作福音,hive可能支持这个或处理它的规范方法,只是没有明显的文档。
然后,cast(replace(els,'D.07.01.01 =','')as integer)将尝试将每个不是'D.07.01.01='的字符转换为整数。对于不是D.07.01.01=的任何字符,这将为null。
然后max()得到最大的整数,空值当然会被忽略。
字符串