本文用来记录自己在使用Hive Sql方面的一些经验。
创建表
|
|
查询数据并将数据写入到表中
|
|
该表从db.event_summary中查询数据然后吸入到user.user_action表中。需要注意db.event_summay中的event_num_map字段是一个map,map的key是action,value是action的数量。这里使用了一个函数LATERAL VIEW EXPLODE,用来map展开。
一些常用函数
ROW_NUMBER() OVER()函数
ROW_NUMBER() OVER()函数用来为每条记录返回一个行号,可以用来对记录进行排序并返回该序号,需要从1开始排序。
OVER()是一个聚合函数,可以对记录进行分组和排序。ROW_NUMBER()不能单独使用,必须搭配OVER()才能使用,否则会报错。
配合partition by/order by
按照某个字段排序后返回行号
按照aaaaab分组后,并根据aaaaaab进行倒序排列。
SQL中的类型转换
需要使用cast()函数进行类型转换。
cast(str_column as int)
一些经验的总结
一个表中分时段记录内容的统一查询
需求
遇到的情况是这样的,有一个表A,表A中有24个字段(event_0_map … event_24_map)用来记录对应小时内每个用户各自发生的一些事情的数量。表结构如下:
现在有一个需求:需要统计每个小时发生事件最多的前100个事件
分析
因为是每个小时执行的任务,而且每个小时的数据是存放在不同的字段里面,而字段名在SQL中是不可以拼接的,如:event_24_map,无法来拼接,因此有两种方案。
方案一
生成24个任务,每个任务的SQL都一样,只是查询的字段不一样
方案二(推荐)
将所有的字段同时解析,生成一个大表,再对大表进行过滤查询
表的删除和恢复
在使用Hive的表的过程中,难免会有对表进行删除的情况,其实把表删除后,数据文件还是存在的,那么如何将数据按照新表的结构恢复一下呢?可以如下操作,但是需要注意的是,对于新增的字段,值是NULL。
|
|