微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有一种方法可以将一列的多个值装入换行到sql中的一行

如何解决有没有一种方法可以将一列的多个值装入换行到sql中的一行

这就是我的数据的样子

emp_id,skills
1234,python|java|sql|R|javascript
5639,C|HTML|PHP|perl

这是需要将数据加载到表中的方式

emp_id  skills
        
       python
1234    java
        sql
        R
        perl

        C
5639    HTML
        PHP

实际上我已替换| \ n,但不会在下一行加载,而是通过添加空格来加载。 而且我将使用python etl将数据加载到表中,因此即使后处理也可以添加。 有什么建议吗?

解决方法

这是关系数据库的行为,不能只对每个组显示private Mono<Map<String,Object>> getValues(List<ResolvedData> resolvedData,HttpRequest httpRequest) { return Flux.fromIterable(resolvedData).flatMap(data -> { Resolver resolver = data.getResolver(); return resolver.resolve(httpRequest).map(resolvedValue -> Tuples.of(data.getName(),resolvedValue)); }).collectMap(Tuple2::getT1,Tuple2::getT2); } ,而对每行显示所有元素。改变这种显示数据的方式是前端的特权和责任,而不是数据库的特权和责任。在Python中也是如此。

如上所述,Impala具有emp_id字符串函数,该函数返回字符串的第n个令牌,该字符串由您作为参数传递的分隔符分隔。

因此,将一系列连续的整数交叉连接,然后应用SPLIT_PART()即可满足您的需求。

实际上,根据我的看法(从来没有),这是每当有人向您抛出格式不满意的文件以加载到数据库中时,您应该执行的操作。始终使用以下技术对逗号/条/分号/或“分隔”的“值”列表进行垂直处理,并垂直存储数据。

SPLIT_PART(skills,'|',i)

有两个用逗号分隔的栏,看起来可能像这样:

WITH
-- your input
input( emp_id,skills) AS (
          SELECT 1234,'python|java|sql|R|javascript'
UNION ALL SELECT 5639,'C|HTML|php|perl'
),-- a big enough series of integers ..
i(i) AS (
          SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
)
SELECT
  emp_id,SPLIT_PART(skills,i) AS skill
FROM input
CROSS JOIN i
WHERE SPLIT_PART(skills,i) <> ''
ORDER BY 
  emp_id,i
;
-- out  emp_id |   skill    
-- out --------+------------
-- out    1234 | python
-- out    1234 | java
-- out    1234 | sql
-- out    1234 | R
-- out    1234 | javascript
-- out    5639 | C
-- out    5639 | HTML
-- out    5639 | php
-- out    5639 | perl

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。