![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Hive
文章平均质量分 61
以实战总结为主,
Lens5935
这个作者很懒,什么都没留下…
展开
-
Hive调优之MapReduce详解
MapReduce会经历作业输入(Input)、业务处理接口Map、Map到Reduce之间数据传输的环节Shuffle、业务处理接口Reduce和作业输出(Output)五大环节。这5个环节还可以进一步分解成如下图:在Hive调优的过程中,我们不希望产生太多 的Map,而把计算任务的等待时间都耗费在Map的启动上;或者不希望生成太多的Map对某个文件进行操作,以免引起资源的争用。因此需要对Map进行控制(在Hive配置“set mapred.map.tasks=task数量”无法控制Map...原创 2022-05-28 17:49:00 · 3673 阅读 · 1 评论 -
常用Hive命令速查(全)
--hive模糊搜索表:show tables like '*name*';--查看表结构信息:desc table_name; desc formatted table_name;--查看分区信息:show partitions table_name;--加载本地文件:load data local inpath '/xxx/test.txt' overwrite into table dm.table_name;--从查询语句给table插入数据:insert overwri.原创 2022-05-01 11:54:05 · 1867 阅读 · 0 评论 -
Hive的多种JOIN优化
案例一:select a.id,a.number,b.number,c.numberfrom table_tmp a join table_tmp b on a.id = b.id join table_tmp c on a.id = c.idwhere a.business = 'A'and b.business = 'B'and c.business = 'C'如上例中,Hive会对每对join连接对象启动一个MaoReduce任务。首先启动一个MapReduce job对表a和原创 2022-03-20 19:45:46 · 2126 阅读 · 0 评论 -
Hive分区表增加字段新增字段为NULL解决方案
背景:数仓开发过程中,经常会有需求变更,添加字段的情况很难免,添加完了字段需要重新写数据,重新将这个字段的数据overwrite进去,但是会出现一个问题,就是加载的数据为NULL。新分区正常,无论是内部表还是外部表均有该问题。原因:使用alter table语句更新表结构时,由于默认更新现有表结构,对原有分区无改动,导致原有分区改变数据时,新字段为NULL测试过程:创建测试表:CREATE TABLE DEFAULT. COMPANYLEVEL_TEST(IDSTRING,PAR.原创 2021-11-13 14:24:47 · 2516 阅读 · 0 评论 -
SparkSQL overwrite插入Hive表数据重复问题
问题描述使用Spark SQL将DataFrame调用其API overwrite写入Hive,如果存在多个任务同时往一张hive表overwrite,那么会导致只有其中一个任务成功,另外其他的任务都失败的问题,并且写入的结果存在同一张表有重复的行链接:https://www.jianshu.com/p/26467e77fa16(7条消息) SparkSQL并发写入orc、parquet表的异常问题排查_u013332124的专栏-CSDN博客...原创 2021-11-07 20:25:23 · 4492 阅读 · 0 评论 -
Hive提取身份证号中年龄和性别
身份证的组成和结构:18位的居民身份证号:1.号码的结构公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。2.地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。3.出生日期码表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。4.顺序码表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序原创 2021-08-03 16:58:30 · 1524 阅读 · 0 评论 -
Hive数据屏蔽函数mask使用大全
Hive在2.1.0版本后,支持数据屏蔽函数(Data Masking Functions),可以用于数据的快速脱敏掩码处理。比如mask函数,默认会将查询回的数据,大写字母转换为X,小写字母转换为x,数字转换为n。当然也可以添加参数自定义转换的字母mask(string str[, string upper[, string lower[, string number]]]) ,upper定义大写字母转换,lower定义小写字母转换,number定义数字转换函数调用:mask("a原创 2021-07-23 11:15:37 · 2311 阅读 · 1 评论 -
有效解决hive小文件过多问题
小文件产生原因hive 中的小文件肯定是向 hive 表中导入数据时产生,所以先看下向 hive 中导入数据的几种方式 直接向表中插入数据 insertintotableAvalues(1,'zhangsan',88),(2,'lisi',61);这种方式每次插入时都会产生一个文件,多次插入少量数据就会出现多个小文件,但是这种方式生产环境很少使用,可以说基本没有使用的 通过load方式加载数据 loaddatalocalinpath'/export/sco...转载 2021-06-24 12:00:02 · 944 阅读 · 0 评论 -
IDEA maven开发hive的udf详细过程(附图片详解)
1.创建maven项目file->new->project原创 2021-06-18 15:24:55 · 3403 阅读 · 4 评论 -
Hive数据类型转换
Hive 支持关系型数据中大多数基本数据类型允许的隐式转换 void boolean tinyint smallint int bigint float double decimal string varchar timestamp date binary void to TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE T原创 2021-06-16 16:17:56 · 588 阅读 · 0 评论 -
Hive空字符串‘‘与NULL值对比
Hive里null值和空字符串是两个不同的东西。NULL值【null】,较为常见,就是所谓的空值,字段没有值。空字符串【' '】,j原创 2021-06-10 16:11:55 · 1955 阅读 · 0 评论 -
Hive中复合数据类型Array Map相关操作
需求背景:求:如何判断字段B中包含23(其中字段A的数据类型为String,字段B的数据类型为Array)FieldA FieldB 1 [52,12,23,11,25,11] 2 [28,41,25,254,36] 3 [60,78,48,481,236,56] 4 [239,108524,14] 5 [52,36,96,42,33] 思路梳理:1.第一感觉可能会考虑到模糊匹配likeinstr等等。但 239 236这样的...原创 2021-05-14 17:02:12 · 1995 阅读 · 0 评论 -
Hive 中的压缩格式对比
TextFile默认格式,存储方式为行存储,数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,压缩后的文件不支持split,Hive不会对数据进行切分,从而无法对数据进行并行操作。并且在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,因此反序列化开销会比SequenceFile高几十倍。SequenceFileSequenceFile是Hadoop API提供的一种二进制文件支持,存储方式为行存储,其具有使用方便转载 2021-04-10 17:39:46 · 1058 阅读 · 0 评论 -
Hive中字段间模糊匹配的解决办法(3种方式实现)
需求:产品侧想看下每天用户点击的video中有多少title命中了tag,显而易见,这里需要字段间的模糊匹配。测试过程:select 'abcd' like '%bc%'结果:Truelocate(string substr, string str[, int pos])函数内第一个参数是子串,第二个是我们的整个字符串,具体的解释如下:查找字符串str中的pos位置后字符串substr第一次出现的位置,若为找到,则返回0。select locate('a','abc.原创 2021-04-09 09:52:53 · 6964 阅读 · 1 评论 -
Hive实现App版本号比较(详解)
APP版本号的原则规范:版本号是唯一的 且是一串数字APP版本号的组成:软件版本号有四部分组成:<主版本号.><子版本号>.<阶段版本号>.<日期版本号加希腊字母版本号>希腊字母版本号共有5种:base、alpha、beta、RC、Release,例如:2.1.0.181209_Release。希腊字母版号:Alpha版:也叫α版(开发环境),此版本主要是以实现软件功能为主,通常只在软件开发者内部交流; Beta版:此版本相对于...原创 2021-02-22 17:39:11 · 1433 阅读 · 3 评论 -
Hive中pmod实现DayOfWeek功能
pmod(inta,intb)pmod(doublea,doubleb)返回a除b的余数的绝对值Sql实现如下:select case when pmod(datediff(current_date,'2018-01-01'),7) = 0 then concat(current_date,'(周一)') when pmod(datediff(current_date,'2018-01-01'),7) = 1 then concat(current_date...原创 2021-02-01 11:23:05 · 736 阅读 · 0 评论 -
Hive pmod用法相关问题及源码解析
问题描述:pmod(inta,intb) pmod(doublea,doubleb) 返回a除b的余数的绝对值selectpmod(-9,4)结果:3但是这个结果为何是3 ??难道不是1吗 ??源码刨析:1.引入pom.xml依赖<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec --><dependency> <groupId>...原创 2021-02-01 11:22:18 · 865 阅读 · 0 评论 -
【SQL】查询已经连续7天登陆的用户
整体思路:用户登录日期去重-->row_number()函数分组排序获得排序编号-->日期减去编号——根据每个用户count(值)判断连续登陆天数具体实现:用户每天登陆次数可能不止一次,所以需要将日期去重。 用row_number()函数将用户分组,按照去重后的日期排序后计数得到登录次数。 然后用日期减去计数得到结果(如果每次减去的结果相同,则表明用户一直处于连续登陆登录状态)。 最后按照用户和结果分组,得到相同值出现的次数,此时得到的值大于等于7的就是连续7天登陆的用户了。实原创 2021-01-05 16:36:01 · 4405 阅读 · 2 评论 -
Hive实现随机抽样(附详解)
select * from tab order by rand()limit 1000select *from ( select e.*, cast(rand() * 100000 as int) as idx from e ) t order by t.idx limit 1000表e为一个普通的表,里面存有数据,我们要从表e中随机抽出1000条数据作为数据样本。2,ran...原创 2021-01-05 15:44:36 · 9016 阅读 · 1 评论 -
Hive中常用函数 wm_concat & concat_ws & collect_set & sort_array总结
concat_ws & collect_set:应用1:user each_id user_id1 id1 user_id1 id2 user_id2 id1 user_id2 id2 user_id2 id3 user_id3 id1 user ids user_id1 id1,id2 user_id2 id1,id2,id3 user_id3 id1 select dt,原创 2021-01-05 12:10:50 · 6246 阅读 · 0 评论 -
Hive SQL 语法大全 整理(建议收藏)
链接https://mp.weixin.qq.com/s/dYL_JqbC7DXgP0lc9pSQiA一、DDL 操作注:SCHEMA/DATABASE 是相同的概念,只是叫法不同而已--创建数据库/SCHEMA,表,视图,函数,索引CREATEDATABASE/SCHEMA,TABLE,VIEW,FUNCTION,INDEX--删除数据库/SCHEMA,表,视图,索引DROPDATABASE/SCHEMA,TABLE,VIEW,INDEX--清空表TRUNCATE...转载 2020-12-02 11:59:54 · 4841 阅读 · 0 评论 -
Hive中的explode使用全解(附图片详解)
数据表:表名:default.class_info,分别是班级,姓名,成绩 3列单列Explode:需求:将student这一列中数据由一行变为多行(使用split和explode,并结合lateral view函数实现)select class,student_namefrom default.class_info lateral view explode(split(student,',')) t as student_name结果如下:...原创 2020-11-26 12:19:09 · 14983 阅读 · 0 评论 -
数据仓库之拉链表详解
转自:https://mp.weixin.qq.com/s/ixksVZNE-g1m6jr-LEF67w什么是拉链表记录历史数据,记录一个事物从开始一直到当前状态的所有变化的信息。存储的是用户的最基本信息以及每条记录的生命周期。拉链表的使用场景数据仓库的数据模型设计过程中,经常会遇到如下这几种表的设计:比如有一张用户表,数据量很大,50多个字段,大约10亿条记录,即使使用ORC压缩,单张表的存储也会超过100G,在hdfs中要是三副本存储那就会更大 表中的部分字段会被更新.转载 2020-11-23 16:55:04 · 17482 阅读 · 5 评论 -
Hive实现构造自增id列
需求 :需要为新建的表新增自增id,如2方式出现id为空情况。原因:order by 1 最终只有一个数据,应该order by原有数据的某个字段,如时间戳等解决办法:ok ,问题解决原创 2020-10-12 17:17:26 · 5111 阅读 · 0 评论 -
HiveSQL 实现10分钟时间粒度
需求: 就是时间段为10分钟粒度.有用户点击行为日志的时间戳.对用户点击量进行统计实现思路:因为数据有时间戳,可以通过from_unixtime()来获取具体的时间 有了具体的时间,就可以用minute()函数获取对应数据所在的分钟.minute()函数获取分钟为字符串 想法 00 - 10应该分到一组, 10- 20 应该分到第二组,依次类推. 用minute 整除 10的话, 00 - 10整除 10都为 0, 10- 20 整除 10都为1,依次类推 这样就可以把每1...原创 2020-09-23 16:06:18 · 2867 阅读 · 0 评论 -
字符串函数wm_concat、collect_set实现列转行
id | name1 | a1 | b2 | c2 | d若想要得到以下结果,将相同id的name合并成同一行,并用逗号分开:1 | a,b2 | c,d方法1:利用函数 wm_concatselect id,wm_concat(',',name) as nn from tmp_test group by id;格式string wm_concat(string separator, string str)说明...原创 2020-09-18 17:45:51 · 478 阅读 · 0 评论 -
数据维度相关知识--kylin
kylin理论基础:空间换时间,使用预计算(相比实时计算),对业务所需的维度组合和度量进行预聚合,提前把可能是查询都预先计算好,当查询到达时直接访问预计算聚合结果,反馈用户查询结果,省去对大数据的扫描和运算,而不是再去计算。kylin实现原理:kylin从数据仓库中最常用的Hive中读取源数据,使用MapReduce/spark作为cube构建的引擎,并把预计算的结果保存再Hbase中,对外暴露Rest API/JDBC/ODBC等查询接口。kylin的预聚合思想实现数据多维度下钻,将维度.原创 2020-09-14 16:16:56 · 326 阅读 · 0 评论 -
HiveSQL解析json数组
我们可以通过以下办法解析json数组 :先通过正则表达式将数组中的 , 用 ; 代替:select regexp_replace('[{"website":"www.baidu.com","name":"百度"},{"website":"www.taobao.com","name":"淘宝"}]', '\\}\\,\\{','\\}\\;\\{');结果:[{"website":"www.baidu.com","name":"百度"};{"website":"www.tao...原创 2020-09-07 19:16:15 · 3608 阅读 · 2 评论 -
Flume sink 到hive中踩坑记录
flume收集日志数据 sink到hive中踩坑记录问题1:解决办法:把hive目录下的hcatalog/share/hcatalog中所有jar拷贝到 flume安装目录下的lib目录下问题2:问题3:Hive启动时报错解决办法:复制/hive/lib下jline-2.XXjar 到hadoop/share/hadoop/yarn/lib...原创 2020-04-18 12:04:57 · 569 阅读 · 3 评论 -
数据仓库必须get的名词解释
OLAP与OLTP OLAP(Online Analytical Process),联机分析处理,以多维度的方式分 析数据,而且能够弹性地提供上卷(Roll-up)、下钻(Drill-down)和透视分 析(Pivot)等操作,它是呈现集成性决策信息的方法,多用于决策支持系 统、商务智能或数据仓库。其主要的功能在于方便大规模数据分析及统 计计算,可对决策提供参考和支持。更多情况下OLAP与多...原创 2020-04-13 13:52:36 · 274 阅读 · 0 评论 -
Hive面试题之order by,sort by,distribute by,cluster by的区别
一、order by: order by会对输入做全局排序,因此只有一个Reducer(多个Reducer无法保证全局有序),然而只有一个Reducer,会导致当输入规模较大时,消耗较长的计算时间。关于order by的详细介绍请参考这篇文章:Hive Order by操作。 DESC是descend 降序,asc是ascend 升序 二:sort by: sort by不是全局...原创 2020-04-17 21:54:48 · 427 阅读 · 0 评论 -
hive原理及执行任务流程优化
Hive架构 Hive主要有QL,MetaStore和Serde三大核心组件构成。 QL:是编译器也是Hive中最核心的部分。 Driver模块的工作是将HQL语句转化为MapReduce调用. 包括主要的三个阶段: 编译:Compile,生成执行计划 优化:Optimize,优化执行计划(当前的Hive实现是在执行前做一次唯一的优化...原创 2020-04-17 21:51:19 · 609 阅读 · 0 评论 -
Hive数据倾斜解决要点
数据倾斜的外在表现是执行时间超长。 一般发生在group by或者join操作上,表现为一个或几个reduce一直没办法做完,原因是key分布不均,某个或某几个key的数据特别大。这种情况下,另外有一个解释:数据倾斜。 Group by : 若group by聚合时,有count(distinct)或sum(distinct),有时会出现数据倾斜的现象。 处理办法有两种: ...原创 2020-04-17 21:48:43 · 105 阅读 · 0 评论 -
Hive常用字符串函数(工作中总结整理)
【"Hive内置聚合函数"】https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-Built-inAggregateFunctions(UDAF)substr substr(string A, int start), 返回字符串A从start位置到结尾的字符串 ...原创 2020-04-13 18:24:18 · 616 阅读 · 0 评论