Hive实现为每行扩展00-23小时列的方法问询
当然可以用Hive实现这个需求!
这是一个典型的**行扩展(一行转多行)**场景,我们可以借助Hive的LATERAL VIEW配合序列生成的方法轻松完成,下面给你两种适配不同Hive版本的方案:
方案1:适合Hive 2.0及以上版本(推荐)
Hive 2.0新增了sequence()函数,可以直接生成连续的整数序列,代码简洁高效:
SELECT t.id, t.date, -- 把小时数格式化为两位字符串(比如1转为01) lpad(cast(hour_num AS string), 2, '0') AS hour FROM your_table t -- 替换成你的实际表名 LATERAL VIEW -- 生成0到23的整数序列,再拆分成每行 explode(sequence(0, 23)) tmp AS hour_num;
方案2:适合Hive 2.0以下版本
如果你的Hive版本较低,没有sequence()函数,可以通过字符串拼接+拆分的方式生成小时序列:
SELECT t.id, t.date, lpad(cast(hour_num AS string), 2, '0') AS hour FROM your_table t -- 替换成你的实际表名 LATERAL VIEW -- 生成包含0-23的字符串数组,再拆分成每行 explode(split(repeat('0,', 23) || '23', ',')) tmp AS hour_num;
效果说明
不管用哪种方案,原表中每一行(包括重复的行,比如示例里ID=123的两条01-01-2017数据)都会被扩展成24行,分别对应00到23的小时值,完全符合你想要的输出格式。
内容的提问来源于stack exchange,提问作者user4279562
相关产品推荐
相关产品推荐

