Hive 配置单元,按数组中的项连接2个表

Hive 配置单元,按数组中的项连接2个表,hive,apache-spark-sql,hiveql,Hive,Apache Spark Sql,Hiveql,我需要在数组中按列将两个表左外联接 表一模式: 结构id-字符串 ips-字符串数组 表二模型: ip字符串 主机名-字符串 我想要的结果是以下格式: id、ip、主机名(如果存在) 需要匹配第一个表中数组中的所有ip,这些ip在第二个表中具有相应的ip 我不确定如何开始,欢迎任何想法或参考。您可以使用第二个表上的“分解”选项,然后按如下方式执行连接 假设您有一个带有字符串名数组的表_1,而表2有一个字符串名数组 创建表1(id字符串,ips数组); 创建表2(ip字符串,主机名int)

我需要在数组中按列将两个表左外联接

表一模式:

  • 结构id-字符串
  • ips-字符串数组
表二模型:

  • ip字符串
  • 主机名-字符串
我想要的结果是以下格式:

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

需要匹配第一个表中数组中的所有ip,这些ip在第二个表中具有相应的ip


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

您可以使用第二个表上的“分解”选项,然后按如下方式执行连接

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

创建表1(id字符串,ips数组); 创建表2(ip字符串,主机名int)

然后,可以使用分解udf在表_1上创建一个侧视图

从表1横向视图分解(ips)ep中选择id、ip作为ip

这将为数组中的每个值将单行分解为多行。请阅读更多帮助

最后的连接查询将是这样的

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);

人们需要带有一些示例数据的表格模型来深入研究您的问题。表一:结构id-string,ips-array of string。表二:ip-string,hostname-string。结果是:id、ips、主机名(如果存在)我对你的问题做了一些编辑。如果得到批准,我希望它能鼓励人们给你一个答案,因为它现在更简洁,更容易阅读。