首页 > 解决方案 > 组合两个/四个表

问题描述

我正在开发一个 Spark 程序,该程序本质上是在尝试组合以下两个表:

表格1


+---+---+---+  
| a | b | c |  
+---+---+---+  
| 1 | 2 | 6 |  
| 4 | 5 | 6 |  
+---+---+---+

表2:


+---------+-----+--------+  
|Attribute|Value|Validity|  
+---------+-----+--------+  
|    A    |  1  |  false |  
|    A    |  4  |  false |  
|    B    |  2  |  false |  
|    B    |  5  |  false |  
|    C    |  6  |  true  |  
+---------+-----+--------+  

我想查找每个(属性,值)对是否有效。基本上,包含我需要的所有信息的结果表可能如下所示:

+-+-+-+---------+---------+---------+  
|A|B|C|ValidityA|ValidityB|ValidityC|  
+-+-+-+---------+---------+---------+  
|1|2|6|  false  |  false  |  true   |  
|4|5|6|  false  |  false  |  true   |  
+-+-+-+---------+---------+---------+  

例如,在对表进行一些预处理之后,可以通过三重连接来实现上表。但是三重连接对我来说似乎非常低效,因为我正在使用大数据。此外,我将不得不使用一个循环来单独执行每个连接,这也是我不想要的。

有谁知道用单个查询归档上述结果的方法(额外的预处理和对表的简单更改没问题)?

我无法让格式正常工作,对此感到抱歉。

亲切的问候
-巴里

标签: sqlapache-sparkapache-spark-sqlbigdatardd

解决方案


您可以join为每个属性创建一次表格:

select t1.*,
       a.validity as validityA,
       b.validity as validityB,
       c.validity as validityC
from table1 t1 left join
     table2 a
     on t1.a = a.value and a.attribute = 'A' left join
     table2 b
     on t1.b = b.value and b.attribute = 'B' left join
     table2 c
     on t1.b = c.value and c.attribute = 'C';

注意:NULL当 中没有匹配项时,这将返回有效性列值table2


推荐阅读