JSONS上hive中的拆分函数

Posted

技术标签:

【中文标题】JSONS上hive中的拆分函数【英文标题】:Split Function in hive on JSONS 【发布时间】:2017-01-15 18:08:36 【问题描述】:

我在 hive 中处理 JSON 数组。我知道它也可以用 JSON serde 处理,但我想用 get_json_object 或 json_tuple 和正则表达式来处理。所以我关注链接http://mechanics.flite.com/blog/2014/04/16/using-explode-and-lateral-view-in-hive/

它给出了这样的 Json 文件 "key1":"0","key2":"11.800","info":"[\"id\":\"1234\",\"v\":\"3\",\"id\":\"5678\",\"v\":\"3\"]","key3":"3" 为什么它需要在 id 和其他所有值前面有斜线??观察如下所示

JSON With REGEX

当我们在从上述结果中得到的正则表达式上添加拆分时,我们得到以下内容 ["\"id\":\"1234\",\"v\":\"3\"","\"id\":\"5678\",\"v\":\"3\""]

如果我删除源 Json 文件中的斜杠,ebrything 将变为 null。摆脱这种情况的可能方法是什么。

【问题讨论】:

它正在转义键“info”的 value 内的双引号。为什么不单引号,我不知道。你想从那个字符串中得到什么? 读取 hive 中的数据有一些方法。我只想要字符串形式的爆炸键值对,因为这些只对我有用。 【参考方案1】:

您看到的对象是有效的 JSON,在这种情况下,键 info 的值是一个字符串(看起来更像 JSON,令人困惑)不是对象,数组,或数字,但一个字符串。由于这个字符串中有一些双引号,所以它们被转义了。

显示这个:

JSON.parse(JSON.stringify("key1":"0","key2":"11.800","info":"[\"id\":\"1234\",\"v\":\"3\",\"id\":\"5678\",\"v\":\"3\"]","key3":"3"));

结果:

【讨论】:

以上是关于JSONS上hive中的拆分函数的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery SQL 中的拆分函数

如何使用横向视图将分隔字符串拆分为 Hive 中的多行

合并 hive 中的列

【数仓】Hive数仓的explode()炸裂函数详解

Hadoop/Hive - 将单行拆分为多行

Hive 有字符串拆分功能吗?