apache配置单元-我们如何将数组列值与联接中的其他列进行比较

zpqajqem  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(258)

我是新来的。任何人都可以帮助解决以下问题。
表1:

Column1 Column2

1   1,2,10
2   11,12,13
3   1,2,14
4   20,1,10
5   11,12,13,14

表2:

Column1 Column2
1   Purchase
2   Product View
10  Cart Open
11  Checkout
12  Cart Add
13  Cart Remove
14  Cart View
20  Campaign View

输出:在加入这些表1、表2之后,输出应该如下所示

Column1 Column2 DESC
1   1,2,10   Purchase, Product View, Cart Open
2   11,12,13    Checkout, Cart Add, Cart Remove
3   1,2,14  Purchase, Product View
4   20,1,10 Campaign View, Purchase, Cart Open
5   11,12,13,14 Checkout, Cart Add, Cart Remove, Cart View

问题1:
我们如何比较 table1 column2.1, colum2.2, column2.10 with table2 column1 values(1,2,10,11,12,13,14,20) 创造新的 columntable1 ?

xe55xuns

xe55xuns1#

您需要使用以下查询来获得所需的结果:

SELECT table1.column1 as Column1,
       table1.column2 as Column2,
       collect_set(table2.column2) as DESC
FROM table2,
     table1
WHERE (table1.column2 RLIKE CONCAT('^' , table2.column1, ','))
  OR (table1.column2 RLIKE CONCAT(',' , table2.column1 , '$'))
  OR (table1.column2 RLIKE CONCAT(',' , table2.column1, ','))
GROUP BY table1.column2,
         table1.column1
 ORDER BY table1.column1

有关collect\u set()的详细信息,请参阅配置单元文档。
collect\u set(col)返回一组消除了重复元素的对象。
rlike(regex match)用于匹配table2.column1到table1.column2文本中的模式。两列之间的单个rlike将不起作用,因为“12”将与值“1”、“2”和“12”匹配。
concat用于3个正则表达式条件:
开头的数字后面只有逗号。
中间的数字前后都有逗号。
后面的数字前面只有逗号。
不需要连接,只需使用现有的配置单元函数就可以进行连接。

相关问题