hive实现多行转成1行

--场景描述:将查询结果记录每行内容的列先按逗号(,)分割,然后再将多行内容用&符号存为一行内容

例如:

id name age

8 liu 19

9 zhang 20

10 li 25


要求转化为:

8,liu,19&9,zhang,20&10,li,25


--实现脚本

SELECT concat_ws('&', collect_set(concat(line))) as line
  from (SELECT concat_ws(',', id, name, age) as line --注意替换对应的采集字段
          from (SELECT id, name, age --注意替换对应的采集字段
                       row_number() over(partition by rk order by id) rn --注意替换排序字段
                  from (
                        --业务数据采集脚本替换位置
                        --begin--
                        SELECT '1' rk, --固定写法:借用字段,拿来分组使用
                                id,
                                name,
                                --特别注意:若该字段可能为空,必须做类似如下的空值处理,否则数据将有缺失
                                NVL(age, '')
                          from test_tbl
                        --end--
                        ) t1) t2
         where t2.rn > 5000 --以防数据显示不全,适当的分段提取
        ) t3;



你可能感兴趣的:(hive)