hive
不想起的昵称
努力努力再努力
展开
-
性能比较:in和exists
NOT EXISTS。原创 2024-03-01 13:51:05 · 713 阅读 · 0 评论 -
在没有调度器的情况下,怎么保证实时数仓任务有序执行
背景:上次我们写到没有调度器的情况下,怎么执行数仓任务,对于每日数仓任务,一天执行一次,上下游依赖问题解决了,是没有问题的。但是对于实时或者近实时数仓任务,当集群资源紧张、数据量日益变大的时候,我们定的执行频率就无法稳定的执行了。这时候我们就需要通过规则来区分当前任务和下一次任务。原创 2021-12-24 14:09:00 · 1550 阅读 · 0 评论 -
hive经典面试题3--游戏业务中一次赢、先赢后输、一直输(有无下一关)如何统计
背景:有些小游戏公司,对于新上线的关卡小游戏,会对每个关卡的用户,通关情况进行统计分布,调整关卡的难易程度、任务奖励等一次赢: 经过本关没有输的记录,只有赢的记录,如果赢了一次,这一关是无法再重新玩的先赢后输: 经过本关,输的记录在赢的记录前面,最终是赢的一直输: 经过本关没有赢的记录,只有输的记录对于这种一次赢、先赢后输、一直输,在数仓里面只是一个标签。怎么打这种标签:gamestatus='7’为赢的状态,gamestatus='8’为赢的状态,一次赢:拿每个用户每个关卡赢的记录去关原创 2021-12-03 18:18:32 · 502 阅读 · 0 评论 -
监控hive db下面的表是不是每天都在更新
背景:公司有很多打点数据,有时候并不知道哪些表停止更新了,这时候如果我们的脚本每天还在更新数据的话,就很浪费资源。我们是不是可以监控一下某个库下面表的数据量或者最新更新时间。如果没量或者更新时间还是很久之前的话,那我们关于这个表的更新脚本就可以停了,节省集群资源。1.首先将某个库下面的表全部load出来${hive} -e "use ${hive_db};show tables;" > ${local_dir}/tables.csvtables_name=`awk '{print $1}'.原创 2021-11-30 18:18:47 · 2157 阅读 · 2 评论 -
在没有调度器的情况下,怎么用shell模拟oozie调度器,满足数仓任务之间的前后依赖
根据oozie调度器的原理,我们用shell进行模仿一下。依赖、超时、报警原创 2021-11-25 14:08:42 · 1078 阅读 · 0 评论 -
Spark-sql Adaptive Execution动态调整分区数量,调整输出文件数
背景:在数仓任务中,经常要解决小文件的问题。有时间为了解决小文件问题,我们把spark.sql.shuffle.partitions这个参数调整的很小,但是随着时间的推移,数据量越来越大,当初设置的参数就不合适了,那有没有一个可以自我伸缩的参数呢?原创 2021-10-29 16:51:14 · 2265 阅读 · 0 评论 -
hive秒数如何转化为时分秒
很多报表里面都会有人均使用时长这个概念,来统计用户使用app的深度。通常我们人均时长就是拿总使用时长除以总使用人数,除完的结果是秒。这种秒的结果在页面上显示就没有可视性了。那我们就会把秒格式化为:12782s-->03:33:02我们来看看这种结果怎么处理,其实这种处理和1个数字有几个100,几个10,几个1是一样的取小时数据,这个时候我们要取整,并且做判断是一位数还是两位数,如果是一位数我们得在前面补一下“0”,并在后面拼接一个“:”floor(12782/3600)...原创 2021-09-17 11:40:18 · 1983 阅读 · 4 评论 -
hive时间戳格式化HH和hh的区别
周末偶遇一坑,在此记录一下原创 2021-09-16 17:47:12 · 1446 阅读 · 0 评论 -
hive最全的常用字符串函数(建议收藏)
1.字符串长度计算函数:length语法:length(string A),返回值:int例子:spark-sql> select length('abc');3Time taken: 0.095 seconds, Fetched 1 row(s)2.字符串反转函数:reverse语法:reverse(string A)返回值: string说明:返回字符串A的反转结果例子:spark-sql> select reverse('abc');cbaTime taken原创 2021-09-01 14:40:54 · 1317 阅读 · 0 评论 -
如何用python编写hive udf函数
相比于java编写udf,python编写udf就显得简单的多。站在数据处理的角度来说,python也更合适。那python如何编写udf函数呢?使用方法:(1)将编写的python代码上传到服务器(2)添加python文件(3)使用函数:TRANSFORM (data) USING “python udf_test.py” as (name,address)对比java编写udf函数来说,少了打包、创建临时函数的过程实例1:编写python代码:#!/usr/bin/python# co原创 2021-08-31 17:00:44 · 2385 阅读 · 0 评论 -
如何用java编写hive udf函数之hive科学计数法如何转化为数值
1.什么是HIVE UDF函数?hive udf即用户自定义函数(User Defined Function,简称UDF)。当hive系统函数不能满足我们需求的时候,就需要我们通过编码的方式,实现通过hive可以查询的特定功能的函数。2.HIVE UDF函数如何实现?只要满足两个要点继承UDF类实现evaluate方法3.案例(将hive科学计数法转化为数值)定义一个ScientificNotationTransitionUDF类继承UDF类并实现evaluate方法:package c原创 2021-08-31 15:10:04 · 600 阅读 · 0 评论 -
掌握这些sql编码习惯,会避免很多异常数据(经验之谈,建议收藏)
我们在hive sql编码的时候,经常遇到统计的结果和原始数据不一致的情况。有时候百思不得其解。如果掌握了以下编码习惯,我们在实际生产中会避免很多不必要的麻烦。1.排空处理例如:uid is not null and uid not in (’’,’ ',‘null’,‘NULL’)select t1.uid, t2.name, t2.address, t1.commodity_name, t1.price, t1.dtfrom (select uid, com原创 2021-08-30 14:01:55 · 233 阅读 · 0 评论 -
hive经典面试题1--根据主播上播、下播时间戳求播出时长
现有如下数据,主播id、房间号、播出的批次号,每个批次号进出房间的时间戳、分区时间:accidroom_idbatch_iddatelinedt5eb705796a8971881mFJmd2231629047963024162904796559208-185eb705796a8971881mFJmd2231629047963024162904797533608-188c15215f733b8e7f1m90uT2641629273804000162原创 2021-08-26 15:54:49 · 546 阅读 · 0 评论 -
读hive编程指南随笔
hive cli(1.1.0版本)(1)hive客户端可以使用hadoop相关命令,去掉hdfs,例如:dfs -ls /;(2)set hive.cli.print.header=true; 打印头部信息(3)set hive.cli.print.current.db=true; hive cli 显示当前所在数据库(4)删除数据库先得删除库下面的表,加cascade关键字可以让hive自行删除库下面的表例如:drop database if exists test_dp cascade;(5原创 2021-08-18 15:58:40 · 122 阅读 · 0 评论 -
hive分析函数lead()和lag()的应用
在不知道这两个函数之前,我们可以通过普通的方法,也能满足对应的需求。但是性能很差,代码量大。本文对lead()函数的应用和普通方法都做了详细的分析。原创 2021-08-13 11:57:24 · 7214 阅读 · 2 评论 -
hive grouping sets、with cube和with rollup的区别(详细分析,建议收藏)
对于互联网公司报表需求中,有很多多维度的组合,大的汇总维度、小的明细维度,精细化的下钻。这样的背景下,我们很多的指标都要进行多维度的聚合。grouping sets: 多维度组合,组合维度自定义with cube: 多维度组合,程序自由组合,组合为各个维度的笛卡尔积with rollup: with cube的子集,以左侧维度为主,即不允许左侧为NULL,右侧为非NULL的情况出现我们来几个案例:with cube:spark-sql> with test1 as >原创 2021-08-12 15:14:58 · 1412 阅读 · 2 评论 -
你还在用group by吗?高手都在用grouping sets
对于刚接触hive sql小白来说,在不知道grouping sets的情况下,group by成了我们最常用的聚合函数。但是当你接触到grouping sets的时候,你就会觉得,怎么会有这么好用的函数呢,简直是神器啊!原创 2021-08-09 14:23:54 · 513 阅读 · 0 评论 -
成为数仓高手的秘密通道--7个调优小技巧(持续更新)
好的调优技巧,在处理数据的时候,可以事半功倍原创 2021-08-06 11:19:53 · 339 阅读 · 0 评论 -
hive coalesce、nvl、ifnull的区别
coalesce语法:coalesce (expr_1, expr_2, …,expr_n),遇到非NULL值返回,如果没有非NULL值出现返回NULLnvl语法:NVL(expr_1, expr_2),如果expr_1为NULL,则返回expr_2,否则返回expr_1ifnull语法:ifnull(expr_1, expr_2),如果expr_1为NULL,则返回expr_2,否则返回expr_1注:非NULL值为NULL,如果是'',' ','null','NULL'这些值一样返回它本身原创 2021-08-04 16:20:03 · 2669 阅读 · 0 评论 -
hive like在join中的应用二(进阶)
问题:现在有每个用户每场比赛上场的卡牌组合,现在需要求出一张卡牌出场的次数、两张卡牌出场的次数、三张卡牌出场的次数…八张卡牌出场的次数如下为一个用户3场比赛的出场卡牌组合:神圣领域|摇头菇|淤泥|独轮车骑手|发条撕裂者|石棒士兵|丛林勇士|布鲁兄弟复活术|冰川风暴|神佑护盾|基地无敌|摇头菇|骑手哈雷|豪猪射手|冰霜族长:贾德维克落雷术|摇头菇|布鲁兄弟|椰果抛射器16型|骑手哈雷|琥珀酋长|豌豆射手|冰霜族长:贾德维克例如一张卡牌出场的次数:神圣领域出场1次,摇头菇出场3次,骑手哈雷出场2次原创 2021-08-04 15:56:38 · 333 阅读 · 0 评论 -
hive like在join中的应用一(基础)
我们先看看生产上的两张表:1.用户cpu信息表:create table test.test_user asselect '10001' as uid,'AMD A8-5600K APU with Radeon(tm) HD Graphics _AMD64 Family 21 Model 16 Stepping 1_AuthenticAMD' as cpuunion allselect '10002' as uid,'Intel(R) Core(TM) i3-7100U CPU @ 2.40G原创 2021-08-04 11:58:45 · 706 阅读 · 0 评论 -
hive case when与if的用法(嵌套、混合使用)
case when语法:case when 条件表达式 then 条件成立,结果1 else 条件不成立,结果2 end单个条件:case when … then…end结构:如果不写else,那么除了符合when条件之外的数据,其他数据默认为NULL案例:spark-sql> select > user_id, > name, > case when address='shanghai' then '上海原创 2021-08-03 18:23:22 · 6860 阅读 · 0 评论 -
hive cli参数介绍(-e/-f/-S)
hive cli参数详细介绍,带案例原创 2021-08-03 17:38:13 · 1091 阅读 · 0 评论 -
hive join中出现的数据暴增(数据重复)
我们常常因为数据重复问题造成困扰,本文详细介绍了数据重复造成的原因和解决方案原创 2021-08-03 11:56:02 · 1969 阅读 · 2 评论 -
hive执行计划分析(join详解)
我们都知道执行的hive sql是需要编译成MapReduce任务去执行的,那是如何编译的呢,可以分为六个阶段:Antlr定义SQL的语法规则,完成SQL词法、语法解析,将SQL转化为抽象语法树AST Tree遍历AST Tree,抽象出查询的基本组成单元QueryBlock遍历QueryBlock,翻译为执行操作树OperatorTree逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量遍历OperatorTree,翻译为M原创 2021-07-29 16:02:36 · 1051 阅读 · 0 评论 -
hive一个数据源产生多个数据集(一个隐藏的调优方法)
这个调优方法也是从hive编程指南上发现到的,很惊喜,竟然也可以这样写。仔细一样,多个查询从同一个数据源出,为什么要写两个from,为什么不能从同一个数据源出呢?基于这样的疑问,我们来看看本文的详细描述。原创 2021-07-29 13:42:38 · 270 阅读 · 0 评论 -
hive with构建临时表的用法
语法:--新建临时表test1、test2with table1 as (select ...),table2 as (select ...)--试用test1、test2select *from table1 union allselect *from table12可以依次建很多的临时表。优点:对于数据查询、测试,不需要新建临时表,增加磁盘空间缺点:对于报表开发,数据没有落地,不能重复利用案例:spark-sql> with test1 as (原创 2021-07-29 10:29:17 · 2095 阅读 · 0 评论 -
hive系统函数collect_list和collect_set的应用
collect_list:收集数据,返回是一个集合,集合中元素不去重collect_set:收集数据,返回是一个集合,集合中元素去重结合concat_ws函数返回列转行的结果案例1 collect_list:spark-sql> with test1 as ( > select '张三丰' as user_name,'向往的生活' as video_name,'2021-07-28' as dateline > union all .原创 2021-07-28 18:35:14 · 1252 阅读 · 0 评论 -
hive过滤条件on和过滤条件where的区别
过滤条件on:指的是join后面on的具体内容,例如: on t1.age>=20过滤条件where:指的是where条件后面的内容,例如:where t1.age>=20我们来看具体结果,到底有什么不同?案例1:过滤条件onspark-sql> with test1 as ( > select 1 as user_id,'xiaoming' as name > union all > select 2 .原创 2021-07-28 15:17:13 · 2052 阅读 · 0 评论 -
hive的五种去重方式
1.distinct问题:每个app下只保留一个用户案例:spark-sql> with test1 as > (select 122 as userid,100024 as apptypeid > union all > select 123 as userid,100024 as apptypeid > union all > select 123 as userid,1原创 2021-07-28 11:42:45 · 10831 阅读 · 0 评论 -
hive分析函数sum() over()的应用
问题:求每个app下,一天内截止到当前时间点的累计访问量分析:sum(pv) over(distribute by apptypeid sort by dateline asc)根据app分组,时间点正序,得的就是截止到当前时间点的累加访问量,即累计访问量案例:spark-sql> with test1 as > (select 100024 as apptypeid,'00:00' as dateline,10 as pv > union原创 2021-07-27 17:34:10 · 1578 阅读 · 0 评论 -
hive分析函数row_number()的应用
row_number() over(partition by apptypeid order by pv desc)partition by:以什么分区(分组)order by:分区(分组)完以什么排序,是spark-sql> with test1 as > (select 100024 as apptypeid,10 as pv > union all > select 100024 as apptypeid,20 as原创 2021-07-27 15:15:49 · 601 阅读 · 0 评论 -
hive分析函数row_number()、rank()、dense_rank() 的不同之处
我们先看几组结果,再来分析row_number()、rank()、dense_rank() 的不同之处spark-sql> with test1 as > (select 100024 as apptypeid,10 as pv > union all > select 100024 as apptypeid,20 as pv > union all > select 1000.原创 2021-07-22 15:14:48 · 382 阅读 · 0 评论 -
hive最全的常用时间函组合(建议收藏)
本周任意一天hive> select date_sub(next_day('2021-07-20','MO'),7);OK2021-07-19Time taken: 0.048 seconds, Fetched: 1 row(s)hive> select date_sub(next_day('2021-07-20','MO'),1);OK2021-07-25Time taken: 16.706 seconds, Fetched: 1 row(s)注:1.本周周一到周日,原创 2021-07-20 17:11:25 · 1044 阅读 · 0 评论 -
hive最全的常用时间函数(非常全,建议收藏)
在实际生产中,经常由于某个特殊需求涉及到时间函数的转换,例如求上周六到本周日的pv、uv,本月第一天和本月最后一天的访问量的时候。不知如何下手,或者想尽一切办法写出来的代码,却很复杂。本文详细介绍了很多常用的时间函数,基本包括了所有的可能用到的函数原创 2021-07-19 14:30:43 · 9129 阅读 · 0 评论 -
hive如何创建视图
视图:1、视图是一个逻辑表,本身不存储数据。数据来源于它依赖的物理表2、视图只是简化复杂的查询,相当于一个sql数据集,对于一个大表来说,简化查询sql,并不能提高查询效率。反而增加资源开销,建议频繁查询的数据落地1.视图如何创建hive> create view if not exists test.test_view as > select > apptypeid, > accid, > dt > f.原创 2021-06-11 18:01:21 · 10506 阅读 · 2 评论 -
hive orc存储格式不同压缩格式的比较
1.建表语句无压缩格式 NONECREATE EXTERNAL TABLE `test.test_orc_not_compress`( `apptypeid` string, `uid` string, `srcqid` string, `os` string, `ver` string, `vers` string, `isnewuser` int, `pv` bigint)PARTITIONED BY ( `dt` string)stored原创 2021-06-10 16:41:07 · 1712 阅读 · 0 评论 -
hive四种常见的join
1.左连接 left joinspark-sql> with test1 as ( > select 1 as user_id,'xiaoming' as name > union all > select 2 as user_id,'xiaolan' as name > union all > select 3 as user_id,'xiaoxin' as name原创 2021-06-10 11:46:25 · 2093 阅读 · 0 评论 -
hive误删数据怎么找回
以内部表为例,外部表删除数据,只是删除元数据信息新建表并插入数据:hive> CREATE TABLE IF NOT EXISTS `test.test8`( > `user_id` int, > `name` string, > `address` string);OKTime taken: 0.049 secondshive> insert into table test.test8 > select 1 as原创 2021-06-09 18:16:31 · 929 阅读 · 2 评论 -
hive加载数据的几种方式
1.从文件中加载数据建表语句:hive> CREATE TABLE IF NOT EXISTS `test.test7`( > `user_id` int, > `name` string, > `address` string) > row format delimited > fields terminated by ',';OKTime taken: 0.055 seconds注意:建表的分隔符必须原创 2021-06-09 14:26:46 · 2031 阅读 · 1 评论