inceptor 中列转行的实现方式

  其他常见问题
内容纲要

概要描述


本章主要简单介绍在 inceptor 中如何实现列转行,以供需要时参考。

详细说明


问题:

假如表 test_concat 有如下数据:

id          code
1             A
2             B
3             C
1             B
2             C
3             A
1             C
2             A
3             B

想要实现如下所示结果

id         code_map
1           A-B-C
2           A-B-C
3           A-B-C


实现:

-- 构造测试数据
CREATE TABLE IF NOT EXISTS test_concat(id INT, code STRING)
CLUSTERED BY (id) INTO 3 BUCKETS 
STORED AS ORC_TRANSACTION;

BATCHINSERT INTO test_concat BATCHVALUES (
VALUES (1,'A'), VALUES (2,'B'), VALUES (3,'C'),
VALUES (1,'B'), VALUES (2,'C'), VALUES (3,'A'),
VALUES (1,'C'), VALUES (2,'A'), VALUES (3,'B'));

file

  1. 通过 GROUP_CONCAT 实现

    SELECT id, GROUP_CONCAT(code,'-') code_map FROM test_concat GROUP BY id ORDER BY id;

    file

  2. 通过 CONCAT_WS 实现
    假设 id 对应的 code 列数据有重复的,如下图
    file

    • 列转行时不去重 – COLLECT_LIST

      SELECT id, CONCAT_WS('-', COLLECT_LIST(code)) code_map FROM test_concat GROUP BY id ORDER BY id;

      file

    • 列转行时去重 – COLLECT_SET

      SELECT id, CONCAT_WS('-', COLLECT_SET(code)) code_map FROM test_concat GROUP BY id ORDER BY id;

      file

    • 列转行时去重并排序 – SORT_ARRAY

      SELECT id, CONCAT_WS('-', SORT_ARRAY(COLLECT_SET(code))) code_map FROM test_concat GROUP BY id ORDER BY id;

      file

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。