如何根据 JSON 中的字段对两个表进行 Hive JOIN?

Posted

技术标签:

【中文标题】如何根据 JSON 中的字段对两个表进行 Hive JOIN?【英文标题】:How to do a Hive JOIN on two tables based on a field inside a JSON? 【发布时间】:2019-09-20 08:05:13 【问题描述】:

所以我有两个这样创建的表:

create external table test1 (json string) stored as textfile location '/user/data/test1';
create external table test2 (json string) stored as textfile location '/user/data/test2';

两个表都有一个字符串作为内部包含 JSON 对象的列。

以下是我如何从表中典型地选择名为 name 的字段:

select get_json_object(json, '$.name') from test1 limit 1;

...使用hive的get_json_object UDF解析JSON字符串。

现在,我需要根据 JSON 对象中的 name 字段执行 test1 LEFT OUTER JOIN test2。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:
select t1.*, t2.* --select columns needed
from
    (select t1.*, get_json_object(json, '$.name') as name from test1 t1) t1 --add more filters
    left join 
    (select t2.*, get_json_object(json, '$.name') as name from test2 t2) t2 --add more filters
    on t1.name=t2.name

【讨论】:

以上是关于如何根据 JSON 中的字段对两个表进行 Hive JOIN?的主要内容,如果未能解决你的问题,请参考以下文章

Hive如何根据表中某个字段动态分区

如何根据 apache hive 中的键从 json 列表中提取 json 对象

就是一个表有2个字段 一个是发布时间 一个是更新时间,如何根据这两个字段来进行降序排序啊

Hive 解析 JSON 串的两个方向

Hive 解析 JSON 串的两个方向

【Hive】Hive Join 介绍