Hive进阶函数:SPACE() 一行炸裂指定行

数据一行如何转多行

假如有一张表,字段有两个,分别是name 和 number,代表含义为名字 和 名字出现的次数,现在需要把一行数据转为number行

举例:

输入:

复制代码
        tom|3

        jery|4

输出:

复制代码
      tom

      tom

      tom

      jery

      jery

      jery

      jery
思路分析:

把一行数据炸成对应的number行,类似于列传行,列传行常用的函数为explode,但是要传入一个数组,函数会根据数组把列变为行,所以现在如果有一个数组,里面分别有number元素就可以实现上述的例子

引入函数

space函数:space函数需要传入一个数值n,则会生成n个数组

sql 复制代码
输入:
    space(3)
输出
    '   '  -- 三个空格

那么生成number个空格,再按照空格切割

sql 复制代码
输入:
    split(space(3), ' ')
输出:
    '"","","",""'

注意 :因为切割时候一个空格会切割为左右两个空串,所以在生成空格时,仅需要number-1个即可

实现:

在理清思路和了解方法后,就可以实现了,按照上面的例子

sql 复制代码
select 
    name
from tbl
lateral view exploed(split(space(number-1), ' ') tmp as num

全部代码

sql 复制代码
with base as (
  select 'tom' as name, 3 as number
  union all 
  select 'jery' as name, 4 as number 
)

select 
  name
from base 
lateral view explode(split(space(number - 1), ' ')) tmp as num 

结果

sql 复制代码
name
tom
tom
tom
jery
jery
jery
jery
相关推荐
段一凡-华北理工大学4 小时前
工业领域的Hadoop架构学习~系列文章04:YARN资源调度架构
人工智能·hadoop·学习·架构·系统架构·高炉炼铁·高炉炼铁智能化
卷毛迷你猪5 小时前
快速实验篇(A2-2)数据清洗规则修正与多语言实现验证
hadoop·分布式
段一凡-华北理工大学5 小时前
工业领域的Hadoop架构学习~系列文章05:Kafka消息队列 - 工业数据流传输
人工智能·hadoop·学习·架构·kafka·工业智能体·高炉炼铁智能化
qiuyepiaoling1 天前
数仓设计基础
数据仓库
兔子宇航员03011 天前
HIVE SQL 中 NULL 值在 JOIN 和 GROUP BY 中的致命陷阱与解决方案
hive·hadoop·sql
段一凡-华北理工大学1 天前
工业领域的Hadoop架构学习~系列文章02:HDFS架构深度剖析
大数据·人工智能·hadoop·学习·架构·高炉炼铁
Irene19911 天前
Oracle(字符集分为服务端和客户端) 和 Hive(依赖 MySQL(或 PostgreSQL)存储元数据)字符集编码格式查询,中文乱码处理
hive·sql·oracle
段一凡-华北理工大学1 天前
工业领域的Hadoop架构学习~系列文章03:MapReduce编程模型深度解读
大数据·人工智能·hadoop·学习·架构·高炉炼铁·高炉智能化
兔子宇航员03011 天前
HiveSQL 中 NULL 与空字符串的区别与注意事项
数据库·数据仓库·sql
无关86881 天前
StarRocks 存算分离 + Spark + Hive Metastore + MinIO 数据湖搭建全流程
大数据·hive·spark