如何解决有没有一种方法可以将一列的多个值装入换行到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 举报,一经查实,本站将立刻删除。