
hive
数仓大山哥
路漫漫其修远兮,吾将上下而求索。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hive解析json数组 array json
在hive的内置函数中,提供了两个函数用来解析json,分别是get_json_object和json_tuple以下出现的hive函数不懂的请到 hive2.0中常用的内置函数大全 这篇博客去查看了解首先来查看下get_json_object函数的详细信息> desc function extended get_json_object;OKtab_nameget_json_object(json_txt, path) - Extract a json object from pa.原创 2020-12-06 11:18:02 · 3755 阅读 · 1 评论 -
Hive优化-大表join大表优化
5、大表join大表优化 如果Hive优化实战2中mapjoin中小表dim_seller很大呢?比如超过了1GB大小?这种就是大表join大表的问题。首先引入一个具体的问题场景,然后基于此介绍各自优化方案。 5.1、问题场景 问题场景如下: A表为一个汇总表,汇总的是卖家买家最近N天交易汇总信息,即对于每个卖家最近N天,其每个买家共成交了多少单,总金额是多少,假设N取90天,汇总值仅取成交单数。 A表的字段有:buyer_id、selle原创 2020-08-10 15:13:33 · 10450 阅读 · 2 评论 -
【hive】cube和rollup/grouping sets函数
cube数据立方体(Data Cube),是多维模型的一个形象的说法.(关于多维模型这里不讲述,在数据仓库设计过程中还挺重要的,有兴趣自行查阅) 立方体其本身只有三维,但多维模型不仅限于三维模型,可以组合更多的维度 为什么叫数据立方体? 一方面是出于更方便地解释和描述,同时也是给思维成像和想象的空间; 另一方面是为了与传统关系型数据库的二维表区别开来 下图为数据立方体的形象图其实并不用把cube理解得很高大上,只要理解为分别按照不同维度进行聚合. hive中也有cube函数,可以实现原创 2020-08-09 17:41:45 · 1765 阅读 · 1 评论 -
Hive中的排序及优化 ORDER BY, SORT BY, DISTRIBUTE BY, CLUSTER BY
Hive 提供了多重排序语句,我们这里对这几种排序方法做一解析,并进行测试编排如下: 试验场景 Hive 中的 ORDER BY 与其不足 Hive 中的 SORT BY,DISTRIBUTE BY Hive 中的CLUSTER BY 与其不足 完成相同功能的Job 执行时长对比实验场景:我们创建了一个按天分区的分区表,将数据按天分区。CREATE EXTERNAL TABLE `clickcube_mid`(`logtyp...原创 2020-08-09 16:35:30 · 2916 阅读 · 0 评论 -
SQL 先进先出的库龄计算
库存信息:现有一表记录产品进出库product_id(产品代码) inoutdate(出入库日期) qty(数量)001 20200701 10001 20200703 -8001 20200704 -1001 20200705 ...原创 2020-08-05 22:01:33 · 5433 阅读 · 2 评论 -
SQL 求某天各个直播间最大在线人数
如下需求:一张表有如下字段:1)直播间: live_id2)用户:userid3)时间戳:date_stamp4)登陆类型:entry_type (登入和登出)求直播间在某一天同一时间点的最大在线用户数?逻辑说明:将直播间每登陆一个记为1,每登出一个记为-1,如此将会登陆和登出出现抵消,然后再根据时间进行排序求和。WITH live_tab as (select 1 live_id,'A' userid,to_date('20200801 10:00:00','yyyy原创 2020-08-05 20:15:27 · 4448 阅读 · 0 评论 -
深度剖析Hive GroupBy,Distinct 与 Join 原理
Hive 中的 GroupBy, Distinct 和 JoinGroupBy 几种 Mode 原理 相关参数 Distinct Single Distinct Multi Distinct Join Common Join Map Join——Hive MapJoin 优化历程、FaceBook Join优化 Skew Join——Skewed Join Optimization Bucket Join 本文将介绍 Hive GroupBy,Distin原创 2020-07-30 10:26:58 · 1529 阅读 · 0 评论 -
Hive性能调优之Group By
默认情况下,map阶段同一key数据分发给同一reduce,如果单一key过大就很容易造成数据倾斜。(100条数据分组后一组90条,一组10条,这就会数据倾斜)这样的话,我们就可以预先在map端进行一些聚合操作,减轻reduce端的压力。常用参数:--是否在 Map 端进行聚合,默认为 Truehive.map.aggr = true--在 Map 端进行聚合操作的条目数目hive.groupby.mapaggr.checkinterval = 100000--有数据倾斜的时候进行负载原创 2020-07-29 10:54:19 · 1245 阅读 · 0 评论 -
Hive Group By的实现原理
group by多字段select rank, isonline, count(*) from city group by rank, isonline;将GroupBy的字段组合为map的输出key值,利用MapReduce的排序,在reduce阶段保存LastKey区分不同的key。MapReduce的过程如下(当然这里只是说明Reduce端的非Hash聚合过程)group by单字段group by 单字段和多字段时的不同在于key上,以如下例子为例(出处太多):SELECT ui原创 2020-07-29 10:52:11 · 2657 阅读 · 0 评论 -
HIVE小文件合并(Map输入端、Map/Reduce输出端合并)
背景Hive query将运算好的数据写回hdfs(比如insert into语句),有时候会产生大量的小文件,如果不采用CombineHiveInputFormat就对这些小文件进行操作的话会产生大量的map task,耗费大量集群资源,而且小文件过多会对namenode造成很大压力。所以Hive在正常job执行完之后,会起一个conditional task,来判断是否需要合并小文件,如果满足要求就会另外启动一个map-only job 或者mapred job来完成合并参数解释hi.原创 2020-07-25 19:42:37 · 3143 阅读 · 0 评论 -
HIVE SQL 将父子/树形结构转换成层级结构
如下需求:将左边父子结构转换成右边层级结构(转换到三个层级即可)。难点解析:父子层级表难点主要在层级深度,父子结构解析需要自连接及id=parent_id逐步进行处理,第一次连接可以获取到两个层级,当第二次自连接即可获取到第三个层级with area_info as (select 1 as id, '北京市' as name, 0 as parent_id union all select 2 as id, '山东省' as name, 0 as parent_id uni原创 2020-07-20 21:31:16 · 5579 阅读 · 1 评论 -
解决Hive创建文件数过多的问题
一. Hive的创建文件数的限制Hive对文件创建的总数是有限制的,这个限制取决于参数:hive.exec.max.created.files,默认值是10000。如果现在你的表有60个分区,然后你总共有2000个map,在运行的时候,每一个mapper都会创建60个文件,对应着每一个分区,所以60*2000> 120000,就会报错:exceeds 100000.Killing the job解决办法:最简单的解决办法就是调大hive.exec.max.created.files参数原创 2020-07-19 16:23:02 · 972 阅读 · 0 评论 -
Hive分桶 详解
语法格式CREATE [EXTERNAL] TABLE <table_name>(<col_name> <data_type> [, <col_name> <data_type> ...])][PARTITIONED BY ...]CLUSTERED BY (<col_name>)[SORTED BY (<col_name> [ASC|DESC] [, <col_name> [ASC|DESC]..原创 2020-07-18 18:52:07 · 3403 阅读 · 1 评论 -
在Hive中通过Java和Python实现UDF
原文链接:http://whlminds.com/2015/10/07/hive-udf-java-python/#Python%E5%AE%9E%E7%8E%B0UDF当业务数据量过大,不能在关系型数据库中统计时,可以通过 Sqoop 导入到 HDFS 上进行统计,类似日志数据一样。导入到 HDFS 上数据,每一条记录通过\t或Ctrl+A等分割每一个字断,通过\n分割每一条记录。然后,通过建立 Hive 表指向 HDFS 对应的路径数据,对 HDFS 上的数据添加 Schema 定义,可...原创 2020-07-18 17:32:09 · 584 阅读 · 0 评论 -
Hive UDF Python
python udf存在的问题:在数据清洗过程中,如果使用的是TransForm而不是UDF的话,因为Python是直接向系统申请资源的,而不是像ResourceManager申请资源,故会导致启动的Python脚本对内存和CPU的使用不可控,尤其是当启动多个Map时,因为一个map将启动一个Python因此,当同时运行的map有几十个时(测试集群较小),同时将尝试启动相同个数的python(资源够用的话仍然会启动几十个),且此时Map占用的内存是不会释放掉的他在一直等待P...原创 2020-07-18 15:44:25 · 505 阅读 · 0 评论 -
Hive数据倾斜的原因及主要解决方法
数据倾斜产生的原因数据倾斜的原因很大部分是join倾斜和聚合倾斜两大类Hive倾斜之group by聚合倾斜原因: 分组的维度过少,每个维度的值过多,导致处理某值的reduce耗时很久; 对一些类型统计的时候某种类型的数据量特别多,其他的数据类型特别少。当按照类型进行group by的时候,会将相同的group by字段的reduce任务需要的数据拉取到同一个节点进行聚合,而当其中每一组的数据量过大时,会出现其他组的计算已经完成而这个reduce还没有计算完成,其他的节点一直等待这个节点的原创 2020-07-13 22:35:44 · 1790 阅读 · 0 评论 -
hive使用动态分区插入数据详解
往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。因为hive是批处理系统,所以hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。1.创建一个单一字段分区表hive> create table dpartition(id int ,name string ) partitioned by(ct string );2.往表里装载数据,并且动态建立分区...原创 2020-07-11 18:59:01 · 3439 阅读 · 0 评论 -
HIVE窗口函数---窗口大小(累加等)
selectname,orderdate,cost,sum(cost) over() as sample1,--所有行相加sum(cost) over(partition by name) as sample2,--按name分组,组内数据相加sum(cost) over(partition by name order by orderdate) as sample3,--按name分组,组内数据累加sum(cost) over(partition by name order by or..原创 2020-07-11 18:27:53 · 1064 阅读 · 0 评论 -
hive中控制map和reduce数量的简单实现方法
0、先说结论: 由于mapreduce中没有办法直接控制map数量,所以只能曲线救国,通过设置每个map中处理的数据量进行设置;reduce是可以直接设置的。控制map和reduce的参数set mapred.max.split.size=256000000; -- 决定每个map处理的最大的文件大小,单位为Bset mapred.min.split.size.per.node=1; -- 节点中可以处理的最小的文件大小set mapred.min.spli...原创 2020-07-11 17:17:05 · 1800 阅读 · 2 评论 -
Hive存储格式对比
Apache Hive支持Apache Hadoop中使用的几种熟悉的文件格式,如TextFile,RCFile,SequenceFile,AVRO,ORC和Parquet格式。ClouderaImpala也支持这些文件格式。在建表时使用STORED AS (TextFile|RCFile|SequenceFile|AVRO|ORC|Parquet)来指定存储格式。TextFile每一行都是一条记录,每行都以换行符(\ n)结尾。数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip、Bzip2使..原创 2020-07-10 22:12:03 · 1213 阅读 · 0 评论 -
Hive之配置使用snappy压缩
https://zhuanlan.zhihu.com/p/103740807https://blog.youkuaiyun.com/xsdxs/article/details/53152599为什么要压缩 在Hive中对中间数据或最终数据做压缩,是提高数据吞吐量和性能的一种手段。对数据做压缩,可以大量减少磁盘的存储空间,比如基于文本的数据文件,可以将文件压缩40%或更多。同时压缩后的文件在磁盘间传输和I/O也会大大减少;当然压缩和解压缩也会带来额外的CPU开销,但是却可以节省更多的I/O和使用更..原创 2020-07-10 19:53:41 · 7143 阅读 · 3 评论 -
HiveSQL解析原理:包括SQL转化为MapReduce过程及MapReduce如何实现基本SQL操作
本帖最后由 fc013 于 2016-12-3 19:42 编辑 问题导读: 1.什么是Hive? 2.MapReduce框架实现SQL基本操作的原理是什么? 3.Hive怎样实现SQL的词法和语法解析? Hive是基于Hadoop的一个数据仓库系统,在各大公司都有广泛的应用。美团数据仓库也是基于Hive搭建,每天执行近万次的Hive ETL计算流程,负责每天数百GB的数据...转载 2020-07-10 10:49:21 · 5259 阅读 · 0 评论 -
MapReduce Shuffle 和 Spark Shuffle 结业篇【转载】
原文链接:https://mp.weixin.qq.com/s?__biz=MzUxOTU5Mjk2OA==&mid=2247485991&idx=1&sn=79c9370801739813b4a624ae6fa55d6c&chksm=f9f60740ce818e56a18f8782d21d376d027928e434f065ac2c251df09d2d4283710679364639&scene=21#wechat_redirectShuffle简介S.转载 2020-07-08 22:12:58 · 202 阅读 · 0 评论 -
为什么Spark比MapReduce快?
通常大家只是说Spark是基于内存计算的,速度比MapReduce要快。或者说内存中迭代计算。其实我们要抓住问题的本质。总结有以下几点:1、Spark vs MapReduce ≠ 内存 vs 磁盘其实Spark和MapReduce的计算都发生在内存中,区别在于:MapReduce通常需要将计算的中间结果写入磁盘,然后还要读取磁盘,从而导致了频繁的磁盘IO。 Spark则不需要将计算的中间结果写入磁盘,这得益于Spark的RDD(弹性分布式数据集,很强大)和DAG(有向无环图),其中DAG记录原创 2020-07-08 22:11:00 · 1682 阅读 · 0 评论 -
Hive列转行 (Lateral View + explode)详解
1. 大页 hugepage 设置相对较小? 单页大小2MB,当前共13328*2 MB ,一定要设置大于SGA值(多一两个GB);2. PGA 64GB SGA 128GB,机器总内存384GB 建议PGA+SGA设置在总内存80%; SGA调整为128GB;3. 调度任务 时间或者任务型拆分 ?4. 建议数据库及计算节点软件 打上最新补丁;5. OSWATCH 和告警日志等详细信息 再给O同学详细看下;beginpdw_etl_pkg.load_r_hc_group_bubg_map;..原创 2020-07-05 22:47:09 · 1180 阅读 · 0 评论 -
Hive 建表详解
注:hive其他语法在hive官网有说明,建议初学者,去官网学习一手的资料, 官网:https://cwiki.apache.org/confluence/display/Hive/Home#Home-UserDocumentation官网说明Hive建表方式共有三种:直接建表法查询建表法like建表法首先看官网介绍 CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Not.原创 2020-06-25 19:16:43 · 1297 阅读 · 0 评论 -
分析函数用法及窗口子句 range/rows差别,及利用分析函数窗口求今日值、昨日值、上周同日值、近7天均值、30天均值 案例
分析函数的语法结构一般是:分析函数名(参数) OVER (PARTITION BY子句 ORDER BY子句 ROWS/RANGE子句)。即由以下三部分组成:分析函数名:如sum、max、min、count、avg等聚集函数以及lead、lag行比较函数等;over: 关键字,表示前面的函数是分析函数,不是普通的集合函数;分析子句:over关键字后面挂号内的内容;分析子句又由下面三部分组成:partition by :分组子句,表示分析函数的计算范围,不同的组互不相干;ORDER BY: 排原创 2020-06-24 14:12:43 · 1263 阅读 · 0 评论 -
Hive行列转换使用
Hive典型应用场景之行列转换在使用Hive处理数据时,经常遇到行列转换的场景,本文将对Hive的行列转换操作做详细的说明。行转列1)多行转多列假设数据表row2col:col1 col2 col3a c 1a d 2a e 3 b c 4b d 5b e 6现在要将其转化为:col1 c d ea .原创 2020-06-17 11:36:40 · 588 阅读 · 0 评论 -
hive中order by、distribute by、sort by和cluster by的区别和联系
order byorder by 会对数据进行全局排序,和oracle和mysql等数据库中的order by 效果一样,它只在一个reduce中进行所以数据量特别大的时候效率非常低。而且当设置 :set hive.mapred.mode=strict的时候不指定limit,执行select会报错,如下:LIMIT must also be specified。 sort bysort by 是单独在各自的reduce中进行排序,所以并不能保证全局有序,一般和distribute by .原创 2020-06-14 15:11:38 · 1734 阅读 · 0 评论 -
hive 查找函数并查看函数使用方法
1. 查看month 相关的函数hive (felix)> show functions like '*date*';OKtab_namecurrent_datedate_adddate_formatdate_subdatediffto_dateTime taken: 0.017 seconds, Fetched: 6 row(s)2.查看 add_months 函数的用法hive (felix)> desc function datediff;OKtab.原创 2020-06-13 16:25:11 · 1124 阅读 · 0 评论 -
hive_取两次记录的时间差lead/lag/first_value/last_value函数使用 及用户在各个页面停留时间计算示例
这几个函数不支持WINDOW子句1) LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值-- 第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL)2)LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值-- 第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)3)FIRST_V...原创 2020-06-13 13:12:50 · 2296 阅读 · 0 评论 -
Hive笔记之collect_list/collect_set/concat_ws/concat 列转行函数详解
Hive笔记之collect_list/collect_set/concat_ws/concat函数(列转行)create table t_visit_video ( username string, video_name string) partitioned by (day string)row format delimited fields terminated by ',';vi /home/hadoop/t_visit_video.txt 张三,大唐双龙传李四.原创 2020-06-13 11:44:57 · 4029 阅读 · 0 评论 -
【hive 日期函数 大全】Hive常用日期函数整理 史上最全
【hive 日期函数】Hive常用日期函数整理注意:1) hive 没有 to_char函数 2) HIVE 日期函数只识别 年-月-日 不能识别 年-月 ,所以处理月份的时候需要特殊处理1)hive 字符创拼接:CONCAT(string A, string B…)SELECT CONCAT('2019','05','11');2) 字符截取select substr(add_months(from_unixtime((unix_timestamp('2015-09','yyyy-M.原创 2020-06-12 22:31:25 · 8834 阅读 · 0 评论 -
hive/Oracle版本 SQL 用户连续登录天数计算,及最大最小登录时间
CREATE TABLE tm_login_log( user_id BIGINT, login_date date)ROW FORMAT delimited fields terminated by ',' stored as textfile;-- 这里的数据是最简化的情况,每个用户每天只有一条登录信息,vi /home/hadoop/login_log.txt1001,2017-01-011001,2017-01-021001,2017-01-041001,2017.原创 2020-06-11 22:11:56 · 932 阅读 · 0 评论