Hive,按数组中的项目连接 2 个表

Posted

技术标签:

【中文标题】Hive,按数组中的项目连接 2 个表【英文标题】:Hive, join 2 tables by item in array 【发布时间】:2017-10-10 15:18:31 【问题描述】:

我需要在一个数组中按列离开外部连接 2 个表。

表一模型:

结构ID - 字符串 ips - 字符串数组

表二型号:

ip - 字符串 主机名 - 字符串

我想要的结果是这样的:

id、ip、主机名(如果存在)

需要匹配第一个表中具有第二个表中相应 ip 的数组中的所有 IP。

我不确定如何开始,欢迎任何想法或参考。

【问题讨论】:

需要一些示例数据的表格模型,以便人们深入了解您的问题。 表一:结构id - 字符串,ips - 字符串数组。表二:ip - 字符串,主机名 - 字符串。结果是:id、ips、主机名(如果存在) 我对你的问题做了一些修改。如果它被批准了,我希望它会鼓励人们给你一个答案,因为它现在更简洁,更容易阅读。 【参考方案1】:

您可以在第二个表上使用explode 选项,然后执行如下连接。

假设您有一个带有字符串名称数组的 table_1,而表 2 有名称

CREATE TABLE table_1(id string,ips array ); CREATE TABLE table_2(ip string, hostname int);

然后您可以使用爆炸 udf 在 table_1 上创建横向视图。

select id, ip from table_1 LATERAL VIEW explode(ips) ep AS ip;

这会将数组中的每个值的单行分解为多行。请阅读Lateral view documentation 以获得更多帮助。

最终的连接查询将是这样的。

SELECT t1.id,t1.ip, t2.hostname
FROM 
(select id,ip  from table_1 LATERAL VIEW explode(ips) ep AS ip) AS t1 
LEFT JOIN table_2 AS t2 
ON (t2.ip=t1.ip);

【讨论】:

以上是关于Hive,按数组中的项目连接 2 个表的主要内容,如果未能解决你的问题,请参考以下文章

在 2 个表中按所有字段搜索左连接 - 性能问题?

按 ID 删除 JSON [] 数组元素

如何在 hive 中进行字符串连接

hive应用:将一行变成多行

Hive 在条件之间加入

Firestore:按文档数组中的项目查询