首页 > 解决方案 > 使用 Spark 中的 SQL 引号将基于 Column 的两个文件与分隔值连接起来

问题描述

SQL/spark-sql 我有两个文件用户并查找。只需使用 SQL 查询将两者连接起来。请在这方面帮助我。角色 id 是多个角色的组合。在用户文件中角色的顺序可以与角色文件不同。
Edit1:分隔值的顺序可能与 432 用户文件的顺序不同
Edit2:在 spark sql 中解决了以下问题 select * from User_file inner join Role_file on sort_array(split(lower(Role),','))=sort_array(split (下(角色),','))

+----+-----------------+
|User|             role|
+----+-----------------+
| 123|      role1,role2|
| 324|            role1|
| 432|role2,role1,role3|
+----+-----------------+

角色文件

角色,角色ID

+-----------------+-------+
|             Role|role_id|
+-----------------+-------+
|            Role1|      1|
|            Role2|      2|
|            Role3|      3|
|      Role1,role2|      4|
|role1,role2,role3|   5   |
+-----------------+-------+

输出文件应该是

+----+-----------------+------+
|User|             role|roleid|
+----+-----------------+------+
| 123|      role1,role2|     4|
| 324|            role1|     1|
| 432|role1,role2,role3|     5|
+----+-----------------+------+

标签: sqlapache-spark-sql

解决方案


select u.userid, u.role, r.roleid from user_file u inner join role_file r on u.role = r.role

用户文件中的角色数据可以更新为具有排序顺序的角色:

使用 nuser_file 作为(选择用户 ID,来自 user_file 的值交叉应用 string_split(role,“,”)),nnuser_file 作为(选择用户 ID,string_agg(值,“,”)在组内(按值 asc 排序)作为来自 nuser_file 组的角色用户身份 )

更新 user_file set role = b.role from user_file a 内部连接 ​​nnuser_file b on a.userid = b.userid and a.role != b.role


推荐阅读