【问题标题】:Count the number of occurences of a key in a json object - IMPALA/HIVE计算 json 对象中键的出现次数 - IMPALA/HIVE
【发布时间】:2021-07-08 14:38:26
【问题描述】:

我的 Impala 表中有一个列,它是一个 map。我已将该列提取为 2 个不同列中的键和值对,如下所示。 value 列是一个 json 对象。我必须找出特定 id 的值列中的特定键是否多次出现。

id   |  key    |   value

1    | brm_res  | {'abc':'3rr','vbg':''r45','abc':'5rr'}

2    | brm_res  | {'abc':'3rr','vbg':''r45','bgh':'5rr'}

3    | brm_res  | {'abc':'3rr','vbg':''r45','tyu':'5rr'}

4    | brm_res  | {'abc':'3rr','vbg':''r45','yuo':'5rr'}

如上例所示,对于特定的 id(id=1) 和 key(brm_res),value 列中有 (abc) key 的 2 个条目。如何找到这个。

请指导。提前致谢。

【问题讨论】:

    标签: sql json hive impala


    【解决方案1】:

    可以计算初始字符串的字符长度,去掉所有出现的key,计算长度差,除以key的长度,就是出现的次数。像这样的东西(未测试):

    (char_length(value)-char_length(replace(value, "\'abc\':", ''))) div char_length("\'abc\':");
    

    【讨论】:

    • 这可能有效,我们也可以使用length()。但是 OP 想知道某个键列出现了多少次,abc 只是一个例子,它可以是任何东西。
    • @KoushikRoy 是的,这个表达式返回某个键列出现了多少次,可以用别的东西代替abc
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多