hive 中少量数据验证函数的方法-stack

可以使用 stack 将少量数据直接写在sql中,然后用于验证是否正确

1、每个省累计销量前1名的城市 t1(pro_name,city_name,sale_num,sale_date)

源数据:

'河北','石家庄','1','2022-01-01'

,'河北','石家庄','2','2022-01-02'

,'河北','石家庄','3','2022-01-03'

,'河北','张家口','2','2022-01-02'

,'河北','张家口','3','2022-01-03'

,'河北','张家口','2','2022-01-02'

,'陕西','西安','0','2022-01-02'

,'陕西','西安','1','2022-01-03'

,'陕西','西安','2','2022-01-02'

,'陕西','延安','0','2022-01-02'

,'陕西','延安','1','2022-01-03'

,'陕西','延安','0','2022-01-02'

结果:

city_name sum_sale

张家口 7

西安 3

答:

sql 复制代码
with temp_data as (
    select stack(12,
    '河北','石家庄','1','2022-01-01'
    ,'河北','石家庄','2','2022-01-02'
    ,'河北','石家庄','3','2022-01-03'
    ,'河北','张家口','2','2022-01-02'
    ,'河北','张家口','3','2022-01-03'
    ,'河北','张家口','2','2022-01-02'
    ,'陕西','西安','0','2022-01-02'
    ,'陕西','西安','1','2022-01-03'
    ,'陕西','西安','2','2022-01-02'
    ,'陕西','延安','0','2022-01-02'
    ,'陕西','延安','1','2022-01-03'
    ,'陕西','延安','0','2022-01-02'
    ) as (pro_name,city_name,sale_num,sale_date)
)
select 
* 
from (
select 
 t.pro_name,
 t.city_name,
 t.sale_cnt,
 row_number() over(partition by pro_name order by sale_cnt desc) as rnk
from (
select 
 pro_name,
 city_name,
 sale_num,
 sum(sale_num) as sale_cnt
from temp_data
group by pro_name,city_name
) t 
) t1
where t1.rnk = 1
;

lag: 将数据按照从小到大的顺序,将首次出现的,数据字段往后置一行,并且第一条数据使用Null填充

lead:将数据按照从小到大的顺序,将首次出现的数据往后置一行,并且第一条数据使用Null进行填充

2、求股票的波峰和波谷

波峰:当天的股票价格大于前一天和后一天

波谷:当天的股票价格小于前一天和后一天

数据准备: stock表有3个字段: stock_name(股票名称)、stock_price(股票价格)、stats_date(日期)

源数据:

'A','20210621','13'

'A','20210622','11'

'A','20210623','17'

'A','20210624','12'

'A','20210625','14'

'B','20210621','16'

'B','20210622','12'

'B','20210623','12'

'B','20210624','17'

'B','20210625','13'

结果:

stock_name stats_date stock_price price_type

A 20210621 13 其他

A 20210622 11 波谷

A 20210623 17 波峰

A 20210624 12 波谷

A 20210625 14 其他

B 20210621 16 其他

B 20210622 12 其他

B 20210623 12 其他

B 20210624 17 波峰

B 20210625 13 其他

答:

with temp_data as (

select stack(10,

'A','20210621','13'

,'A','20210622','11'

,'A','20210623','17'

,'A','20210624','12'

,'A','20210625','14'

,'B','20210621','16'

,'B','20210622','12'

,'B','20210623','12'

,'B','20210624','17'

,'B','20210625','13'

) as (stock_name,stock_date,stock_price)

)

select

t.stock_name,

t.stock_date,

t.stock_price,

case when t.stock_price < t.lag_price and t.stock_price < t.lead_price then '波谷'

when t.stock_price > t.lag_price and t.stock_price > t.lead_price then '波峰'

else '其他' end as price_type

from (

select

stock_name,

stock_date,

stock_price,

lag(stock_price,1) over(partition by stock_name order by stock_date ) as lag_price,

lead(stock_price,1) over(partition by stock_name order by stock_date ) as lead_price

from temp_data

) t

相关推荐
myself2 小时前
Hadoop中的MapReduce学习 - Mapper和shuffle阶段
hadoop
IT研究室2 小时前
大数据毕业设计选题推荐-基于大数据的北京市医保药品数据分析系统-Spark-Hadoop-Bigdata
大数据·hadoop·spark·毕业设计·源码·数据可视化
一枚小小程序员哈6 小时前
大数据、hadoop、爬虫、spark项目开发设计之基于数据挖掘的交通流量分析研究
大数据·hadoop·爬虫
计算机编程小咖21 小时前
《基于大数据的农产品交易数据分析与可视化系统》选题不当,毕业答辩可能直接挂科
java·大数据·hadoop·python·数据挖掘·数据分析·spark
小四的快乐生活2 天前
Hive 存储管理测试用例设计指南
hive·hadoop·测试用例
没有梦想的咸鱼185-1037-16632 天前
SWMM排水管网水力、水质建模及在海绵与水环境中的应用
数据仓库·人工智能·数据挖掘·数据分析
三劫散仙2 天前
mac m1上使用Kerberos访问远程linux hadoop集群的正确姿势
linux·hadoop·macos
源图客2 天前
Apache Ozone 2.0.0集群部署
hadoop·ozone
计算机毕设残哥2 天前
大数据毕业设计推荐:基于Hadoop+Spark的手机信息分析系统完整方案
大数据·hadoop·课程设计
PawSQL2 天前
十年磨一剑!Apache Hive 性能优化演进全史(2013 - )
大数据·hive·性能优化