Hive 查询以获取字符串中给定键的值
Posted
技术标签:
【中文标题】Hive 查询以获取字符串中给定键的值【英文标题】:Hive query to get the value for a given key in String 【发布时间】:2021-06-22 11:32:23 【问题描述】:我正在使用 regexp_extract 从字符串中获取子字符串
我的字符串是“:abd: 576892034 :erg: 94856023MXCI :oute: A RF WERS YUT :oowpo: 649217349GBT GB”
如何使用 regexp_extract 函数得到这个。
如果我将密钥传递为 abd,我需要值为 576892034 任何其他功能也可以。
【问题讨论】:
【参考方案1】:select
regexp_extract(
':adb: 576892034 :erg: 94856023MXCI :oute: A RF WERS YUT :oowpo: 649217349GBT GB',
':oute: ((?:.(?!:))+)',
1
)
手册:cloudera docs
正则表达式示例:regex101
【讨论】:
谢谢。你能告诉我它会做什么(只是我想理解这个的意思)......([^ ]+)(
和 )
标记一个组。在这种情况下,它是第一个(也是唯一的)组,这就是为什么 regexp_extract
的第三个参数中的1
(使用组以便您可以指定要提取的匹配模式的哪一部分) 。 [^ ]
表示“任何不是空格的字符”。 +
表示“至少出现一次,但与找到的一样多”。如果您仍然不清楚,SO 是错误的地方,您需要阅读正则表达式教程。
感谢您的解释。
它工作正常,但对于这个键 :oute: 我需要这个值--> A RF WERS YUT
那么你需要匹配除了冒号之外的任何字符... .
= 任何东西 (?!:)
= 后面没有冒号。 => ((.(?!:))+)
我已经更新了答案,还有 regex101 演示。以上是关于Hive 查询以获取字符串中给定键的值的主要内容,如果未能解决你的问题,请参考以下文章
使用字符串分区键与整数分区键的 Hive/Impala 性能