ToB企服应用市场:ToB评测及商务社交产业平台

标题: hive基础知识分享(二) [打印本页]

作者: 惊雷无声    时间: 2024-11-7 19:27
标题: hive基础知识分享(二)
写在前面

今天继续学习hive部分的知识。
以下是您提供的内容转成的 Markdown 格式:Hive 相关知识

hive中不同的 count 区别

  1. select clazz
  2.       ,count(distinct id) as cnt
  3.       ,count(*) as cnt
  4.       ,count(1) as cnt_1
  5.       ,count(id) as cnt_id
  6. from students
  7. group by clazz;
复制代码
Hive 关联的分类及区别


Hive 中 where 和 having 的区别

Hive 中的几种排序及对比

Hive 怎么实现多行转一行

  1. select clazz
  2.       ,collect_set(age) as age_set
  3.       ,collect_list(age) as age_list
  4. from students
  5. group by clazz;
复制代码
Hive 中有哪些常用的字符串函数

  1. select concat_ws('#','a','b','c');  -- a#b#c
  2. select concat_ws('#','a','b','c',NULL);  -- a#b#c,可以指定分隔符,并且会自动忽略NULL
  3. select concat_ws("|",cast(id as string),name,cast(age as string),gender,clazz) from students limit 10;
  4. select substring("abcdefg",1);  -- abcdefg,HQL中涉及到位置的时候是从1开始计数
  5. -- '2021/01/14' -> '2021-01-14'
  6. select concat_ws("-",substring('2021/01/14',1,4),substring('2021/01/14',6,2),substring('2021/01/14',9,2));
  7. -- 建议使用日期函数去做日期
  8. select from_unixtime(unix_timestamp('2021/01/14','yyyy/MM/dd'),'yyyy-MM-dd');
  9. select split("abcde,fgh",",");  -- ["abcde","fgh"]
  10. select split("a,b,c,d,e,f",",")[2];  -- c
  11. select explode(split("abcde,fgh",","));  -- abcde  
  12.                                         -- fgh
复制代码
  1. select get_json_object('{"name":"zhangsan","age":18,"score":[{"course_name":"math","score":100},{"course_name":"english","score":60}]}',"$.score[0].score");  -- 100
复制代码
20240920

常用的三种排名类窗口函数及区别

窗口函数怎么使用

在窗口函数后面接上 over(partition by 分组字段 order by 排序字段 desc) 作为别名 rn。
Hive 中有哪些常用的窗口函数

Hive 中有哪些 NULL 值的判断方式

  1. IF(column_name IS NULL, 'default_value', column_name)
  2. CASE
  3.     WHEN column_name IS NULL THEN 'default_value'           
  4.     ELSE column_name        
  5. END AS result
复制代码
  1. COALESCE(column_name, 'default_value')
复制代码
  1. NVL(column_name, 'default_value')
复制代码
Hive 中时间字符串和时间戳之间如何转换?
  1. select from_unixtime(1610611142, 'YYYY/MM/dd HH:mm:ss');
  2. select from_unixtime(unix_timestamp(), 'YYYY/MM/dd HH:mm:ss');
复制代码
  1. select from_unixtime(unix_timestamp('2021年01月14日','yyyy年MM月dd日'),'yyyy-MM-dd');
复制代码
一连登录问题

先求出每个用户每天的消费总额,再按时间去开窗排名,将日期去减这个排名数可以到达分组的效果,再分组求和求次数,得到一段一连时间的消费总额和一连登录消费次数,用 min 和 max 求每个一连时间段的开始时间和结束时间,用每个开始时间去减上一个的结束时间得到每个一连时间段中的间隔时间,大概直接用分组之间的日期差,因为只有一连时间段的才会在一个组里,组之间的差值结束间隔时间。
order by 对 SUM 窗口函数的影响

如果 sum 窗口函数中的字段被排序了,总和一列就会有一个累加的过程,没指定排序就是一列总和和外部 order by 一样。
窗口帧是什么?

窗口帧用于从分区中选择指定的多条记载,供窗口函数处理。Hive 提供了两种定义窗口帧的情势:ROWS 和 RANGE。两种类型都必要配置上界和下界。
只能运用在max、min、avg、count、sum、FIRST_VALUE、LAST_VALUE这几个窗口函数上。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4