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 性能

使用正则表达式提取部分字符串的 Hive 查询

在 Hive 或 Pyspark 中查询以获取每个星期日和星期六的日期

如何获取查询字符串的值?

如何在给定元素后反序列化 XML 并获取特定键的值

在 NSDictionary 中检测 Null 值