自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程老师的博客

多动笔

  • 博客(49)
  • 问答 (1)
  • 收藏
  • 关注

原创 性能比较:in和exists

NOT EXISTS。

2024-03-01 13:51:05 660

原创 hive经典面试题7--数据缺失如何通过现有数据填补

背景:在公司很多业务中,都会涉及数据处理。其中一项数据处理,就是补缺数据。例如:公司正在投放某个项目,在不同的平台不同的时间投放的成本不一样。由于某些原因,造成打点的成本数据缺失。这时我们就需要通过一定的策略将数据补上。1.需求:通过两种策略补数据,补完的数据取平均值,作为要填补的投放成本补数据策略1:同一个平台取最近一次投放的有效成本(上一次投放的有效成本)(有效成本:成本不为空)补数据策略2:取同一个平台紧接着一次投放的有效成本(下一次投放的有效成本)结果数据如下:2.数据准备-

2022-02-28 16:09:44 2434

原创 hive如何创建json表

背景:在业务中,对于json数据一般通过`get_json_object`或者`json_tuple`来解析json数据。对于有json和常规数据混合这种,用这两个函数比较常见。但是对于全是文本的这种json数据,我们可以通过创建json表与json表进行映射去查询或者统计数据。

2022-01-06 16:01:31 1832

原创 hive经典面试题6--对数去重([A,B],[B,A])算一对,改怎么处理

背景:在很多业务中,都涉及到对数去重。例如:A和B建联,记了一条数据[A,B],B又和A建联,又记了一条数据[B,A]。这两条记录,只是记录的顺序不一致,人还是A、B两个人,在业务中,这只算一对。...

2022-01-06 14:10:13 1295

原创 在没有调度器的情况下,怎么保证实时数仓任务有序执行

背景:上次我们写到没有调度器的情况下,怎么执行数仓任务,对于每日数仓任务,一天执行一次,上下游依赖问题解决了,是没有问题的。但是对于实时或者近实时数仓任务,当集群资源紧张、数据量日益变大的时候,我们定的执行频率就无法稳定的执行了。这时候我们就需要通过规则来区分当前任务和下一次任务。

2021-12-24 14:09:00 1520

原创 hive经典面试题5--近实时数据处理方案

背景:Flink在各大社区、技术类博客活跃的背景下,其实很多小公司并不会花很多时间去尝试实时处理数据,反而更加倾向于近实时处理数据。你可能会说,这个公司真传统。如果站在数据稳定、数据质量高、迭代快、上手容易的角度来说,近实时也是很好的解决方案。近实时:利用spark-sql内存计算,10分钟、30分钟、60分钟的频率去更新数据。为什么最小的频率是10分钟,因为打点日志的更新频率是10分钟,flume每10分钟上传前10分钟数据文件到hdfs(每个公司业务不同,日志更新频率也不同)

2021-12-21 11:15:04 2510

原创 hive经典面试题4--如何用分时数据计算分时累计数据?如何在分时累计数据为空的时候去补全数据?

背景:在互联网公司经常用每10分钟为维度去统计某一个指标,这种统计我们称为分时数据。例如10分钟内某个渠道的安装数据,通过这个数据可以实时查看这个渠道质量好坏,如果这个渠道质量不行,那么就停止投放,避免不必要的损失。有时候会用每10分钟累计一次(我们称为分时累计数据),通过折线图去看这个数据的走势。那么问题来了,如何用分时数据计算分时累计数据呢?有如下分时数据(将时间戳格式化成HH:mm),怎么去统计每10分的累计数据呢?说到累计,我们很容易就想到了sum() over()这个函数app

2021-12-09 18:13:17 1984

原创 hive经典面试题3--游戏业务中一次赢、先赢后输、一直输(有无下一关)如何统计

背景:有些小游戏公司,对于新上线的关卡小游戏,会对每个关卡的用户,通关情况进行统计分布,调整关卡的难易程度、任务奖励等一次赢: 经过本关没有输的记录,只有赢的记录,如果赢了一次,这一关是无法再重新玩的先赢后输: 经过本关,输的记录在赢的记录前面,最终是赢的一直输: 经过本关没有赢的记录,只有输的记录对于这种一次赢、先赢后输、一直输,在数仓里面只是一个标签。怎么打这种标签:gamestatus='7’为赢的状态,gamestatus='8’为赢的状态,一次赢:拿每个用户每个关卡赢的记录去关

2021-12-03 18:18:32 484

原创 监控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 2144 2

原创 hive经典面试题2--次日留存、3日、7日留存怎么计算

背景:互联网公司,分析app上线后的效果,通常会通过很多指标来分析,其中一个指标就是留存率,留存率中最重要的就是次日留存,如果次日留存很高,说明这个app很成功,用户粘性高。留存是怎么定义的呢?一个用户第一天来了,第二天又来了,说明这个用户留存了。次日留存率就是100%第一天来了100个用户,第二天这100用户中只有50个用户过来了,第三天这100个用户中只有30个用户过来了;那么次日留存率就是50/100100=50%,3日留存率就是30/100100=30%我们来看看通过代码怎么计算留存率:

2021-11-25 18:30:41 11497

原创 在没有调度器的情况下,怎么用shell模拟oozie调度器,满足数仓任务之间的前后依赖

根据oozie调度器的原理,我们用shell进行模仿一下。依赖、超时、报警

2021-11-25 14:08:42 1052

原创 Spark-sql Adaptive Execution动态调整分区数量,调整输出文件数

背景:在数仓任务中,经常要解决小文件的问题。有时间为了解决小文件问题,我们把spark.sql.shuffle.partitions这个参数调整的很小,但是随着时间的推移,数据量越来越大,当初设置的参数就不合适了,那有没有一个可以自我伸缩的参数呢?

2021-10-29 16:51:14 2223

原创 hive秒数如何转化为时分秒

很多报表里面都会有人均使用时长这个概念,来统计用户使用app的深度。通常我们人均时长就是拿总使用时长除以总使用人数,除完的结果是秒。这种秒的结果在页面上显示就没有可视性了。那我们就会把秒格式化为:12782s-->03:33:02我们来看看这种结果怎么处理,其实这种处理和1个数字有几个100,几个10,几个1是一样的取小时数据,这个时候我们要取整,并且做判断是一位数还是两位数,如果是一位数我们得在前面补一下“0”,并在后面拼接一个“:”floor(12782/3600)...

2021-09-17 11:40:18 1917 2

原创 hive时间戳格式化HH和hh的区别

周末偶遇一坑,在此记录一下

2021-09-16 17:47:12 1406

原创 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 1262

原创 如何用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 2351

原创 如何用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 594

原创 掌握这些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 215

原创 hive经典面试题1--根据主播上播、下播时间戳求播出时长

现有如下数据,主播id、房间号、播出的批次号,每个批次号进出房间的时间戳、分区时间:accidroom_idbatch_iddatelinedt5eb705796a8971881mFJmd2231629047963024162904796559208-185eb705796a8971881mFJmd2231629047963024162904797533608-188c15215f733b8e7f1m90uT2641629273804000162

2021-08-26 15:54:49 535

原创 读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 109

原创 hive分析函数lead()和lag()的应用

在不知道这两个函数之前,我们可以通过普通的方法,也能满足对应的需求。但是性能很差,代码量大。本文对lead()函数的应用和普通方法都做了详细的分析。

2021-08-13 11:57:24 7167 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 &gt

2021-08-12 15:14:58 1370 2

原创 你还在用group by吗?高手都在用grouping sets

对于刚接触hive sql小白来说,在不知道grouping sets的情况下,group by成了我们最常用的聚合函数。但是当你接触到grouping sets的时候,你就会觉得,怎么会有这么好用的函数呢,简直是神器啊!

2021-08-09 14:23:54 510

原创 成为数仓高手的秘密通道--7个调优小技巧(持续更新)

好的调优技巧,在处理数据的时候,可以事半功倍

2021-08-06 11:19:53 331

原创 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 2546

原创 hive like在join中的应用二(进阶)

问题:现在有每个用户每场比赛上场的卡牌组合,现在需要求出一张卡牌出场的次数、两张卡牌出场的次数、三张卡牌出场的次数…八张卡牌出场的次数如下为一个用户3场比赛的出场卡牌组合:神圣领域|摇头菇|淤泥|独轮车骑手|发条撕裂者|石棒士兵|丛林勇士|布鲁兄弟复活术|冰川风暴|神佑护盾|基地无敌|摇头菇|骑手哈雷|豪猪射手|冰霜族长:贾德维克落雷术|摇头菇|布鲁兄弟|椰果抛射器16型|骑手哈雷|琥珀酋长|豌豆射手|冰霜族长:贾德维克例如一张卡牌出场的次数:神圣领域出场1次,摇头菇出场3次,骑手哈雷出场2次

2021-08-04 15:56:38 321

原创 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 690

原创 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 6688

原创 hive cli参数介绍(-e/-f/-S)

hive cli参数详细介绍,带案例

2021-08-03 17:38:13 1072

原创 ClickHouse副本表和分布式表

1.在集群的每个机器上面建立本地表1)方式一:在集群每台机器上运行代码CREATE TABLE st_center.st_pc_office_all_user_retention_v1( `apptypeid` String, `qid` String, `os` String, `ver` String, `type` String, `user_type` String, `install_day` UInt64, `dau` UIn

2021-08-03 15:10:42 1155

原创 hive join中出现的数据暴增(数据重复)

我们常常因为数据重复问题造成困扰,本文详细介绍了数据重复造成的原因和解决方案

2021-08-03 11:56:02 1924 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 1040

原创 hive一个数据源产生多个数据集(一个隐藏的调优方法)

这个调优方法也是从hive编程指南上发现到的,很惊喜,竟然也可以这样写。仔细一样,多个查询从同一个数据源出,为什么要写两个from,为什么不能从同一个数据源出呢?基于这样的疑问,我们来看看本文的详细描述。

2021-07-29 13:42:38 253

原创 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 2060

原创 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 1228

原创 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 2028

原创 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 10747

原创 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 1528

原创 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 585

原创 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 363

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除