2017-10-10 59 views
0

我需要在数组中逐列左外连接2个表。配置单元,在数组中连接2个表格

表一个模型:

  • 结构ID - 串
  • IPS - 串

表2模型的阵列: - 串

  • 主机名

    • IP - 字符串

    我希望的结果是在格式:

    号,IP,主机名(如果存在)

    所有的在第一表的阵列,其具有相应的IP在所述第二表中的IP需要匹配。

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

  • +0

    需要一些示例数据的表格模型供人们深入探讨您的问题。 – DanteTheSmith

    +0

    表一:结构id - 字符串,ips - 字符串数组。表二:ip - 字符串,主机名 - 字符串。结果是:id,ips,hostname(如果存在) – user8753324

    +0

    我对你的问题做了一些编辑。如果它被批准,我希望它会鼓励人们给你一个答案,因为它现在更简洁,更易于阅读。 – DanteTheSmith

    回答

    0

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

    比方说你有一个TABLE_1与字符串名称的数组和表2是有名字

    CREATE TABLE TABLE_1(ID字符串,IPS阵列); 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); 
    
    +0

    上述解决方案是否解决了您的问题? –

    相关问题