sql - 使用 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|
+----+-----------------+------+
解决方案
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