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 个表的主要内容,如果未能解决你的问题,请参考以下文章