![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Hive
文章平均质量分 57
梦里Coding
bigData
展开
-
hive数据倾斜场景以及方案
链接:https://blog.csdn.net/cys975900334/article/details/116802465。原创 2023-05-03 17:04:10 · 73 阅读 · 0 评论 -
sql:求波峰波谷
其中,lag函数,求改行所在的前n行的值,这里求得是price字段前一行的price。同理,lead函数,求该行所在的后一行。我们常见的股票会出现上下浮动,在浮动的过程中。现在要求的是数据中的波峰和波谷。波峰的值比两边所在的值要大,波谷所在的值比两边都要小。原创 2023-04-26 17:18:06 · 455 阅读 · 0 评论 -
数仓业务上判断一个表的唯一主键是哪几个字段
平时业务量比较大,一张HIVE表里面的字段也比较多,如何判断所select 的这几个字段是这张表的唯一主键,也就是,选取这几个主键,可以唯一确定只有一行数据可以通过,select A,B,C from table group by A,B,C HAVING COUNT(1)>=2通过所选取的字段查看查询出来的数据有几条,如果只有一条,那么可以判断是唯一主键。...原创 2022-04-26 10:47:07 · 3410 阅读 · 0 评论 -
HIVE表拉链表全量表和增量表三种表获取历史至今的数据
HIVE拉链表,一般会有dp和dt两个可以卡,拉链表每天存储的是每天新增及变化的数据,如果要获得历史至今的最新数据,卡dp=active每日全量表,每天一份最新的完整数据,卡历史至今的一份全量数据,直接抽select MAX(dt) from table每日增量表,每天保存的是一份新增的数据,要卡历史至今的数据,用dt<MAX(dt)...原创 2022-04-24 22:55:19 · 2477 阅读 · 0 评论 -
HiveSQL调优 概括总结
Hive SQL调优使用分区裁剪、列裁剪少用count(distinct)多对多的关联合理使用MapJoin合理使用Union ALL并行执行job使用本地MR避免数据倾斜控制Map数和Reduce数Hive sql 的调优在我们日常的工作生活中经常用到,因此,这里做一下细致的总结和归纳。使用分区裁剪、列裁剪在select中,只拿需要的列,如果有,尽量使用分区过滤,少使用select *另外在分区裁剪中,当使用外关联时,副表的过滤条件如果使用where就会导致先全表关联在过滤,应该改用on,或者之原创 2021-10-31 16:56:22 · 334 阅读 · 0 评论 -
SQL:连续登陆问题
在写sql语句的人经常会遇到这么一种情况:求连续登陆的这一批用户。遇到这样的问题,可能会比较棘手,现在跟着我动手写一遍,看下如何求连续登陆的问题。需求是:求出连续登陆3天的这一批用户思路: 首先通过窗口函数row number,根据user_id字段进行分区,按照login_date进行排序,窗口函数这一列起个别名为rk。接着通过sub函数将login_date减去rk,得到一个新的日期。接着对user_id和新日期进行groupby。得到的结果通过having 去筛选个数为3的id即可。数据准备在原创 2021-10-31 16:22:56 · 1714 阅读 · 0 评论 -
电商离线数仓项目-表的分类
表的分类实体表维度表事务型事实表周期型事实表实体表实体表,一般是指一个现实存在的业务对象,比如用户,商品,商家,销售员等等。用户表:用户id姓名生日性别邮箱用户等级创建时间1张三2011-11-11男zs@163.com22018-11-112李四2011-11-11女ls@163.com32018-11-11维度表维度表,一般是指对应一些业务状态,代码的解释表。也可以称之为码表。比如地区表,订单状态,支付方式,审批状态,商品分类原创 2021-10-31 11:21:14 · 282 阅读 · 0 评论 -
电商离线数仓项目-数据同步策略
数据同步策略同步策略实体表同步策略维度表同步策略事务型事实表同步策略周期型事实表同步策略同步策略数据同步策略的类型包括:全量表,增量表,新增及变化表,拉链表。全量表: 存储完整的数据,有多少数据导入多少的数据。增量表: 存储新增加的数据。新增及变化表: 存储新增加的数据和变化的数据。拉链表: 对新增及变化表做定期合并。(按月一次或者按半年一次)实体表同步策略实体表:比如用户,商品,商家,销售员等实体表数据量比较小:通常可以做每日全量,就是每天存一份完整数据。即每日全量。维度表同步策略维原创 2021-10-31 10:56:54 · 419 阅读 · 0 评论 -
电商离线数仓项目-通过Sqoop将Mysql中的数据导入到HDFS当中
1)分析表的同步策略一共有8张业务表, Mysql数据库中的表:1 order_info 订单表 新增及变化2 order_detail 订单详情 增量3 sku_info 商品表 全量4 user_info 用户表 全量5 base_category1 商品一级分类表 全量6 base_category2 商品二级分类表 全量7 base_category3 商品三级分类表 全量8 payment_info 支付流水表 增量原创 2021-10-31 10:24:37 · 387 阅读 · 0 评论 -
电商离线数仓-业务数仓DWD层所做的工作
DWD层的主要作用是:1.向表中插入数据的时候进行判空过滤(id is not null)2.维度退化,原本ODS层的商品表和商品分类表(商品一级分类表,商品二级分类表,商品三级分类表)是分开的,在进行查询时候,需要做多个join操作,现在将商品分类表的字段统一添加到商品表这一张表中,减少了中间的join操作。...原创 2021-10-26 10:50:36 · 500 阅读 · 0 评论 -
电商离线数仓-拉链表(面试常问)
拉链表详解拉链表概念拉链表更新数据拉链表形成过程如何使用拉链表拉链表概念拉链表,记录每条信息的生命周期为单位,一旦记录的生命周结束,就重新开始一条新的记录,并把当前日期放入生效开始日期。举个例子来快速理解一下拉链表:一条订单,从2021-01-01这天处于下单状态,2021-01-02处于待支付状态,2021-12-31处于已支付状态,那么正常的从头到尾记录的话,这个表里面单单这一条记录一年就有365条。拉链表做的就是简化表的数量,只记录变化的条数,那么总的就变成了3条,下单,待支付,已完成。当然,拉原创 2021-10-24 21:10:56 · 1477 阅读 · 1 评论 -
电商离线数仓-业务数仓指标(GMV主题/转化率主题)
GMV和转化率GMV主题GMV的概念GMV表的创建GMV表里导入数据转化率转化率概念转化率表的创建转化率表里导入数据ADS层用户行为漏斗分析GMV主题GMV的概念什么是GMV?所谓的GMV指的是电商平台在一段时间内的成交总额。它是电商领域比较重要的一个指标。它实际上指的是拍下订单金额,包含付款和未付款的部分。GMV表的创建创建GVM表,这个表里面主要是涉及到当日的GMV,因此包含的字段是当日的日期,订单的个数,当日的GMV订单的总金额,当日支付的金额。drop table if exists a原创 2021-10-24 16:50:52 · 2397 阅读 · 0 评论 -
电商离线数仓项目-用户每日行为宽表(重点!!)
为什么要建立宽表?需求目标,把每个用户单日的行为聚合起来组成一张多列宽表,以便之后关联用户维度信息后进行不同角度的统计分析。以用户为主体,今天下了多少次单,下单的总金额是多少,支付了多少次,支付的金额又是多少,以及评论的次数。下单的次数和下单的金额是在order订单表里面,支付的次数和支付的金额是在支付表里面, 评论次数在评论表里面。...原创 2021-10-24 15:54:24 · 1066 阅读 · 0 评论 -
Hive-合理设置 Map 及 Reduce 数
合理设置Map个数通常情况下,作业会通过 input 的目录产生一个或者多个 map 任务。 主要的决定因素有:input 的文件总个数,input 的文件大小,集群设置的文件块大小。是不是 map 数越多越好?答案是否定的。如果一个任务有很多小文件(远远小于块大小 128m),则每个小文件也会被当做一个块,用一个 map 任务来完成,而一个 map 任务启动和初始化的时间远远大 于逻辑处理的时间,就会造成很大的资源浪费。而且,同时可执行的 map 数是受限的。是不是保证每个 map 处理接近 12原创 2021-10-20 16:32:36 · 679 阅读 · 0 评论 -
Hive-优化调优[(Count(Distinct)去重统计]
Count(Distinct) 去重统计Count(Distinct)只会开启一个reduce.如果数据量大的话,这个Job很难完成。数据量小的时候无所谓,数据量大的情况下,由于 COUNT DISTINCT 操作需要用一个 Reduce Task 来完成,这一个 Reduce 需要处理的数据量太大,就会导致整个 Job 很难完成, 一般 COUNT DISTINCT 使用先 GROUP BY 再 COUNT 的方式替换,但是需要注意 group by 造成 的数据倾斜问题.(1)案例实操1)创建原创 2021-10-20 15:38:52 · 3535 阅读 · 0 评论 -
Hive-Group by的优化(解决数据倾斜的问题)
Group by默认情况下,Map 阶段同一 Key 数据分发给一个 reduce,当一个 key 数据过大时就倾斜。为了解决group by数据倾斜的情况,可以采用Map端数据聚合的操作。1)开启 Map 端聚合参数设置(1)是否在 Map 端进行聚合,默认为 Trueset hive.map.aggr = true (2)在 Map 端进行聚合操作的条目数目set hive.groupby.mapaggr.checkinterval = 100000 (3)有数据倾斜的时候进行负原创 2021-10-20 15:22:19 · 1823 阅读 · 0 评论 -
Hive-企业级调优(表的优化)
表的优化小表大表Join(MapJOIN)案例实操大表 Join 大表空 KEY 过滤空 key 转换小表大表Join(MapJOIN)将 key 相对分散,并且数据量小的表放在 join 的左边,可以使用 map join 让小的维度表先进内存。在 map端完成 join。实际测试发现:新版的 hive 已经对小表 JOIN 大表和大表 JOIN 小表进行了优化。小表放在左边和右边已经没有区别。案例实操1)需求介绍测试大表 JOIN 小表和小表 JOIN 大表的效率2)开启 MapJoin原创 2021-10-20 14:47:59 · 335 阅读 · 0 评论 -
Hive-企业级调优-(本地模式/JVM重用/严格模式/并行模式)
企业级调优详细讲解执行计划(Explain)二级目录三级目录执行计划(Explain)二级目录三级目录原创 2021-10-20 10:38:11 · 353 阅读 · 0 评论 -
Hive-压缩和存储以及格式(重点!复习总结看这一篇就够了)
MR支持的压缩编码压缩格式算法文件扩展名是否可切分DEFLATEDEFLATE.deflate否GzipDEFLATE.gz否bzip2bzip2.ba2是LZOLZO.lzo是SnappySnappy.snappu否重点是lzo和snappy,这俩之间的最主要区别是否可切片。在生产环境中用的更多是Snappy...原创 2021-10-19 21:05:49 · 686 阅读 · 0 评论 -
Hive-编写UDTF函数一进多出(详细教程~~~)
创建项目的话,和之前写UDF函数的流程是一样的,如果不懂的,看这篇文章:在类中再创建一个MyUDTF类,继承UDTF函数,实现接口:package com.atguigu.udf;import org.apache.hadoop.hive.ql.metadata.HiveException;import org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;public class MyUDTF extends GenericUDTF {原创 2021-10-19 14:58:16 · 661 阅读 · 0 评论 -
Hive-编写UDF函数(详细教程~~~)
编写UDF函数(1)创建项目:(2)导入依赖:Hive 自带了一些函数,比如:max/min 等,但是数量有限,自己可以通过自定义 UDF 来 方便的扩展。2)当 Hive 提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义 函数(UDF:user-defined function)。3)根据用户自定义函数类别分为以下三种:(1)UDF(User-Defined-Function) 一进一出(2)UDAF(User-Defined Aggregation Function)原创 2021-10-19 11:38:46 · 10508 阅读 · 0 评论 -
HIVE-字符串相关函数的使用
字符串相关函数UPPER:转大写LOWER:转小写Length:长度TRIM:前后去除空格lpad,rpad:regexp_replace:使用正则表达式匹配目标字符串,匹配成功后替换SIZE:返回集合中的元素个数MAP_KEYS:返回map当中的keyMAP_VALUES:返回map当中的VALUESARRAY_CONTAINS:判断array中是否包含某个元素SORT_ARRAY:按照字段顺序排序UPPER:转大写hive (default)> select upper('low');OK原创 2021-10-18 16:11:03 · 342 阅读 · 0 评论 -
HIVE-其他函数(具体使用)
HIVE当中的日期功能函数UXIX_TIMESTAMP:返回当前时间戳FROM_UNIXTIME:根据时间戳返回时间CURRENT_DATE:返回当前的时间TO_DATE:返回给定参数中的日期YEAR:获取年MONTH:获取月DAY:获取日期HOUR:获取小时MINUTE:获取分组SECOND:获取秒DAYOFMONTH:一个月中的第几天MONTHS_BETWEEN:两个日期间的月份MONTHS_ADD:日期加减DATEDIFF:日期相减,求相差的天数DATE_ADD:日期加天数DATE_SUB:日期减天数原创 2021-10-18 14:31:16 · 162 阅读 · 0 评论 -
Hive-窗口函数/开窗函数(重点理解~~~)
OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化。CURRENT ROW:当前行n PRECEDING:往前 n 行数据 n FOLLOWING:往后 n 行数据 UNBOUNDED:起点,CURRENT ROW:当前行n PRECEDING:往前 n 行数据 n FOLLOWING:往后 n 行数据 UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点,UNBOUNDED FOLLOWING 表示到后面的终点 LAG(col,原创 2021-10-17 22:07:30 · 1586 阅读 · 2 评论 -
HIVE-函数的使用(nvl/case when then else end/concat/concat_ws/explode)
系统内置函数1)查看系统自带的函数desc functions;2)显示自带的函数的用法:显示的是nvl函数的意思desc function nvl;3)详细显示自带的函数的用法显示的是nvl函数的意思,同时举出例子desc function extended nvl;常用内置函数空字段赋值1)函数说明NVL:给值为 NULL 的数据赋值,它的格式是 NVL( value,default_value)。它的功能是如果 value 为 NULL,则 NVL 函数返回 default原创 2021-10-16 20:30:15 · 662 阅读 · 0 评论 -
Hive-集合数据类型
除了使用础的数据类型string等,Hive中的列支持使用struct, map, array集合数据类型。三种集合1)STRUCT和C语言中的struct或者"对象"类似,都可以通过"点"符号访问元素内容。 struct{‘John’, ‘Doe’}2)MAPMAP是一组键-值对元素集合,使用key可以访问元素。 map(‘fisrt’, ‘John’, ‘last’, ‘Doe’)3)ARRAY 数组是一组具有相同数据类型和名称的变量的集合。 Array(‘John’, ‘Doe’)补充原创 2021-10-14 16:58:33 · 970 阅读 · 0 评论 -
Hive中的排序:order by/sort by/cluster by
Hive中关于排序的几种方法,有必要深入理解其原理。Order by 全局排序1)Order By:全局排序,只有一个 Reducer,即使我们在设置set reduceer的数量为多个,但是在执行了order by语句之后,当前此次的运算还是只有1个reducer,因为order by要做的是全局分区。ORDER BY 子句在 SELECT 语句的结尾。order by 语句的运行效率较低,公司一般是不让用的,加上limit 可以用。使用 ORDER BY 子句排序 :ASC(ascend)原创 2021-10-13 21:17:59 · 3094 阅读 · 1 评论 -
数据仓库理论-范式理论
范式理论范式概念函数依赖三范式区分第一范式第二范式第三范式范式概念关系型数据库在设计的时候,遵照一定的规范要求,目的就是在于降低数据的冗余性,目前业界范式有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF)。范式的标准定义是:符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度。通俗地讲,范式可以理解为一张数据表的表结构,所符合的某种设计标准的级别。使用范式的根本目的是:1)减少数据冗余,尽量让每原创 2021-10-07 15:14:57 · 330 阅读 · 0 评论 -
电商离线数仓项目-用户行为数仓(活跃/新增/留存主题)
电商离线数仓项目,分四层搭建,基本框架搭建好了之后,编写具体的需求.这些需求主要是在DWS层和ADS层两层进行搭建。用户活跃主题目标就是统计日活/周活和月活的每个设备明细。思路:首先要明确活跃的定义,在这里用户当日活跃记录为用户使用该设备登录过APP,那么也就是说启动表中只要有mid(设备唯一标识)字段,则记为1次的活跃。所以不管一台设备一天切换了多少个用户登录APP,都是只看设备的唯一标识这个字段mid,记录成一次活跃。所以可以写成如下:通过从启动事件日志表里面对mid_id字段进行groupby原创 2021-10-05 20:24:51 · 1517 阅读 · 2 评论 -
Hive外部表和内部表的区别(面试题)
外部表(External)和内部表(Managed)的区别主要是在于,创建一个表的时候有两部分数据,一部分是data存储在HDFS上,另一部分是Meta元数据,存储在Mysql上.当我们drop删除掉内部表的时候,data和元数据都会被删除.而我们删除外部表的时候,只会删除meta部分的数据....原创 2021-09-30 11:12:00 · 194 阅读 · 0 评论 -
电商离线数仓项目-数仓分层哪几层?/数仓为什么要分层?
电商离线数仓数仓分成哪几层?数仓为什么要分层?数仓分成哪几层?1、ODS层(原始数据层):存放原始数据,直接加载原始日志、数据,数据保持原貌不做处理。2、DWD层(明细数据层)结构和粒度与ODS层保持一致,对ODS层数据进行清洗(去除空值,脏数据,超过极限范围的数据),也有公司叫DWI。3、DWS层(服务数据层)以DWD为基础,进行轻度汇总。一般聚集到以用户当日,设备当日,商家当日,商品当日等等的粒度。4、 ADS层(数据应用层)数据应用层,也有公司或书把这层命名为APP层、DAL层等。面原创 2021-09-30 09:41:37 · 2368 阅读 · 0 评论 -
电商离线数仓项目-DWD层ETL数据清洗,最大亮点之自定义UDF函数
要对获取到的日志数据进行处理,去空,转义,清洗等等.这时候我就需要我们来对初始的原始数据进行清洗.日志服务器获取到的数据是往往json对象,因此要对json对象进行解析,通过自定义UDF/UDTF函数来对其进行清洗:(1)新建一个maven工程,在新建的maven工程中,创建好包.(com.atguigu.udf),然后再对pom.xml中导入如下的所需依赖: <repositories> <repository> <id>原创 2021-06-26 15:31:41 · 1919 阅读 · 1 评论 -
Failure to transfer org.pentaho:pentaho-aggdesigner-algorithm:pom:5.1.5-jhyd
maven导入依赖包的时候报错:Failure to find org.pentaho:pentaho-aggdesigner-algorithm:pom:5.1.5-jhyde in http://maven.aliyun.com意思是我们maven配置的阿里云仓库没有这个依赖.从网上看了多篇帖子,在maven的仓库添加miroor源,添加spring-io依赖等,均没有解决这个问题.最后在pom.xml添加下面的依赖才解决了问题:<repositories> <re原创 2021-06-23 15:05:32 · 1312 阅读 · 4 评论 -
Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object
原本之前的虚拟机还是好好的,Hive能够正常使用.这两天HIVE在执行select查询语句的时候,突然遇到了这个报错.Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object从字面上翻译是配置文件错误,但是也没有说明到底是哪个配置文件错误.想改也无从下手.于是乎,到/opt/module/hive/conf/logs/hive.log下去查找报错的原因:java.io原创 2021-06-19 15:36:00 · 3010 阅读 · 2 评论 -
Hive向表中导入数据报错:Invalid postscript
报错如下:FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. ORC split generation failed with exception: org.apache.orc.FileFormatException: Malformed ORC file file:/opt/module/datas/video/1.txt. Invalid postscript.报错的原原创 2021-05-09 17:40:25 · 2736 阅读 · 0 评论 -
运行MapReduce遇到:Container killed on request. Exit code is 143报错
最后执行失败,多半原因是因为内存分配不足导致的,对Mapreduce和yarn进行调整参数.在yarn-site.xml文件中添加如下的内容:<property> <name>yarn.nodemanager.resource.memory-mb</name> <value>22528</value> <discription>每个节点可用内存,单位MB</discription></p.原创 2021-05-09 13:20:32 · 1211 阅读 · 1 评论 -
Hive启动时遇到java.lang.NoClassDefFoundError: org/apache/tez/dag/api/SessionNotRunning报错
Hive启动的时候报错如下图所示:因为这个Bug搞了三小时,在这里记录以下,避免下次踩坑。在Hive启动的时候去配置启动引擎为tez,之后启动hive遇到错误:java.lang.NoClassDefFoundError: org/apache/tez/dag/api/SessionNotRunning显示会话服务无法开启。解决方法:将tez和tez/lib下的jar包都复制到hive/lib目录下。编辑hadoop-env.sh:vim $HADOOP_HOME/etc/hadoop/ha原创 2021-05-08 16:29:43 · 3123 阅读 · 2 评论 -
Hive数据导入/插入数据(重点)
向表中导入数据(load)实操案例:(1)创建一张表:create table student(id string, name string) row format delimited fields terminated by '\t';(2)加载本地文件到Hive,如果是从linux本地加载的文件,要添加local关键字。load data local inpath '/opt/module/datas/student.txt' into table default.student;(原创 2021-05-07 19:31:06 · 20813 阅读 · 0 评论 -
Hive分区表(重点)
1.分区表:实际上就是对应一个HDFS文件系统个上的独立的文件夹,该文件夹下是该分区所有的数据文件.Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集.在查询的时候时,根据where条件找到分目录下获取数据,避免做了全局扫描,提高了查询的效率.2.基本操作演示(1)创建分区表的语法create table dept_partition(deptno int, dname string, loc string)partitioned by (no string)row原创 2021-05-07 18:37:50 · 306 阅读 · 0 评论 -
Hive动态分区
1.创建表create table dept_no_par(dname string,loc string)partitioned by (deptno int)row format delimited fields terminated by '\t';开启非严格模式(到了3hive.0可以不用开):set hive.exec.dynamic.partition.mode=nonstrict;执行mapreduce://根据deptno来自动分区,deptno放在select多个参数的最原创 2021-05-06 13:26:18 · 54 阅读 · 0 评论