草庐IT

hive sql

全部标签

HiveSql一天一个小技巧:如何巧用分布函数percent_rank()求去掉最大最小值的平均薪水问题

0问题描述参考链接(3条消息)HiveSql面试题12--如何分析去掉最大最小值的平均薪水(字节跳动)_莫叫石榴姐的博客-CSDN博客文中已经给出了三种解法,这里我们借助于此题,来研究如何用percent_rank()函数求解,简化解题思路。1percent_rank()函数使用percent_rank()函数为分布函数,用于返回某个排序数值在数据集中的百分比排位,其值分布在0-1之间【0,1】,此函数用于计算数值在数据集内的相对位置。计算公式:当前行rn-1/组内行数-1其中减去1表示排位时候不包括他本身,表示他前面有多少人比他值低或高,在实际中有一定分析意义。使用场景:用于关心排在我前面的

HiveSQL一天一个小技巧:如何准确求近30天指标?

1 需求现在test表有三个字段用户:user_id日期:dt订单金额price,计算出一个消费者历史上“首次”在近30天周期内累计消费金额达到1W的日期2 分析  (1)数据准备 create table test as  select'a'asuser_id,7000asprice,'2022-07-01'asdtunionallselect'a'asuser_id,4000asprice,'2022-08-22'asdtunionallselect'a'asuser_id,8000asprice,'2022-08-23'asdt(2) 分析目标字段:消费者,日期条件:首次”在近30天周期

HiveSQL题——collect_set()/collect_list()聚合函数

一、collect_set()/collect_list()介绍    collect_set()函数与collect_list()函数属于高级聚合函数(行转列),将分组中的某列转换成一个数组返回,常与concat_ws()函数连用实现字段拼接效果。collect_list:收集并形成list集合,结果不去重collect_set:收集并形成set集合,结果去重二、collect_set()/collect_list()有序性0问题描述 有一张用户关注表table20,需求:根据用户user_id分组,按照粉丝关注的时间升序排序,输出粉丝id数组和粉丝关注的时间数组,并保障两个数组的数据能一一

HiveSQL——共同使用ip的用户检测问题【自关联问题】

注:参考文章:SQL之共同使用ip用户检测问题【自关联问题】-HQL面试题48【拼多多面试题】_hivesql自关联-CSDN博客文章浏览阅读810次。0问题描述createtablelog(uidchar(10),ipchar(15),timetimestamp);insertintologvaluesinsertintologvalues('a','124','2019-08-0712:0:0'),('a','124','2019-08-0713:0:0'),('b','124','2019-08-0812:0:0'),('c','124','2019-0._hivesql自关联https

HiveSQL题——用户连续登陆

目录一、连续登陆1.1连续登陆3天以上的用户0问题描述1数据准备2数据分析3小结1.2 每个用户历史至今连续登录的最大天数0问题描述1数据准备2数据分析3小结1.3 每个用户连续登录的最大天数(间断也算)0问题描述1数据准备2数据分析3小结一、连续登陆1.1连续登陆3天以上的用户0问题描述 查询连续登陆3天以上的用户(字节面试题)1数据准备createtableifnotexiststable1(idintcomment'用户id',`date`stringcomment'用户登录时间');insertoverwritetabletable1values(1,'2019-01-0119:28:

HiveSQL常用函数

1.字符串函数1.1split()函数用于切割字符串格式:split('参数1','参数2'),这里的参数1为数据,参数2为切割方式细节:参数二可以用正则表达式举例selectsplit('abcd','c');--结果为["ab","d"]selectsplit('asd11mcd22','11');--结果为["asd","mcd22"]selectsplit('asd11mc22dd','\\d+');--结果为["asd","mc","dd"]1.2concat()函数用于拼接字符串格式:concat('数据1','数据2'......)细节:该函数拼接没有拼接符,直接拼接在一起举例s

hiveSql解析DolphinScheduler调度系统7位crontab表达式

背景先说下我们数仓大致的数据链路。各个业务系统的数据库->hive->doris->报表/邮件/系统hive里ods层几乎所有的数据都依赖于从业务库拉取,但是偶尔也难以避免的会遇到拉取失败或者集群(主要是业务库)宕机的情况,导致ods层数据大批量的拉取失败,从而影响到dwd层、dws层、ads层等数以千计的hive表,进而影响到数据。每当遇到宕机的情况我们的解决方案是——重新拉取数据后把失败的工作流从后往前一个个重跑,一上午甚至大半天的时间就这么过去了,手累,心也累。最主要的问题在于,各个DS工作流之前的顺序是不能搞错的,否则还需要重跑。所以单纯按照工作流失败的顺序来执行,不仅麻烦且容易出错。

HiveSql中的分区分桶详解

分区(partiton)    静态分区    动态分区静态分区        如果有一张表,需求是要其中一类的数据例如(星座),但是需要全盘扫描,如何精准的获取到我们要的数据?    其实只需要采用分区表的思路来管理就可以解决,只需把各个星座放入到不同的文件夹当中即可.--1.创建分区表,指定分区字段.createtableconsteall(idintcomment'ID',namestringcomment'名字',constellationstringcomment'星座')comment'星座表'partitionedby(rolestringcomment'充当分区字段')--核心

HiveSQL基础命令02

目录一、分区表1.新建分区表2.向分区表插入数据1.静态分区2.动态分区3.创建多级分区二、分桶表1.新建原表2.建立分桶表并按照sid排序3.向分桶表插入数据4.分桶原理5.分桶排序三、复杂类型1.array2.struct3.map一、分区表避免全表扫描,减少扫描次数,提高查询效率.createtablet_all_hero_part(字段1类型comment'字段描述信息',字段2类型comment'字段描述信息',……)comment'表描述信息'partitionedby(分区字段类型comment'分区字段描述信息')rowformatdelimitedfieldsterminat

HiveSQL中的分区与分桶

 1.分区 1.1为什么要分区? 举例: 如果我们有一个一年级的学生表,这个年级有10个班,那需要查看一班的学生信息,又或者是二班等等,我们的SQL语句为 select*fromstudentwhereclass='一班'; 这种方式可以查询出一班的学生,但我们的查询语句底层会转mr任务,这样会进行一个全表的查询,查询效率比较低. 那有什么办法可以避免全表查询呢? 如果我们能把学生表信息按照每个班级分开,分成多个文件夹,那在查询的时候就只需要检索每一个文件夹,这样就能大大提高我们查询效率了 例如我们第一个文件夹t_class=1班,这个文件夹里的数据都是一班的数据(注:这里的t_class是我