
hive
文章平均质量分 55
LPL.
一寸光阴不可轻
展开
-
Hql语句底层执行过程
join语句:select原创 2021-06-09 17:24:24 · 270 阅读 · 0 评论 -
hive排序
order by:全局排序,因此只有一个reducer(多个reducer无法保证全局有序)如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输出的条数。sort by:不是全局排序,分区内有序,其在数据进入reducer前完成排序在每个reducer端做排序,也就是说保证了局部有序(每个reducer出来.原创 2021-06-04 17:59:03 · 122 阅读 · 2 评论 -
分区表和分桶表区别
分区使用的是表外字段,需要指定字段类型 分区通过关键字partitionedby(partition_name string)声明 分区划分粒度较粗 将数据按区域划分开,查询时不用扫描无关的数据,加快查询速度 ...原创 2021-06-04 17:13:00 · 1882 阅读 · 2 评论 -
hive谓词下推
关系型数据库借鉴而来,关系型数据中谓词下推到外部数据库用以减少数据传输 基本思想:尽可能早的处理表达式 属于逻辑优化,优化器将谓词过滤下推到数据源,使物理执行跳过无关数据 参数打开设置:hive.optimize.ppd=true ...原创 2021-06-04 10:39:32 · 1859 阅读 · 1 评论 -
按不同维度组合并聚合
grouping sets 在一个 group by 查询中,根据不同的维度组合进行聚合,等价于将不同维度的 group by 结果集进行 union allcube 根据 group by 的维度的所有组合进行聚合rollup 是 cube 的子集,以最左侧的维度为主,从该维度进行层级聚合。grouping setsselect order_id, departure_date, count(*) as cnt from ord_test group by order_id..原创 2021-04-07 19:08:11 · 919 阅读 · 0 评论 -
hive日期时间函数
to_date(string timestamp):日期时间转日期函数:返回值: string说明: 返回日期时间字段中的日期部分。select to_date(’2021-02-08 10:03:01′) from dual;2021-02-08current_date():当前日期select current_date() --2021-02-09current_timestamp():当前日期时间selectcurrent_timestamp() ; --2.原创 2021-02-09 11:46:29 · 345 阅读 · 0 评论 -
Lateral View explode
Lateral View explode使用过程中的问题一般使用select id,con,con_detailfrom (select 1 as id,'a,b,c' as conunion all select 2 as id,null as con union all select 3 as id,'' as con)tlateral view explode(split(con,',')) aa as con_detail结果如下,发现其中id为2的行不见了,原因是原创 2020-12-10 19:44:28 · 459 阅读 · 1 评论 -
数据倾斜及解决
数据倾斜的表现任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成。因为其处理的数据量和其他reduce差异过大导致key值分布不均。单一reduce的记录数与平均记录数差异过大,通常可能达到3倍甚至更多。最长时长远大于平均时长。数据倾斜的原因key分布不均匀 业务数据本身的特性 建表时考虑不周 某些SQL语句本身就有数据倾斜进行哪些操作时可能会出现数据倾斜group by distinct join关键词原创 2020-10-15 18:47:55 · 543 阅读 · 0 评论 -
hive之array操作
array_col[n]取array_col第n个元素,n始自0 size(array_col)计算array_col元素个数 sort_array(array_col)对array_col中元素进行升序排序,不可指定降序 array_contains(array_col,x)检索array_col中是否包含x元素,若包括则为true,否则false一个SQL让你认识array相关函数with tmp as ( select t.node,t.parent,collect_s...原创 2020-10-13 19:17:59 · 20755 阅读 · 0 评论 -
开窗——聚合函数与分析函数
开窗——聚合函数与分析函数应用场景(1)排序(2)动态分组group by(3)top n(4)累计计算(5)层次查询窗口函数first_value(col):取分组内排序后,截止到当前行,第一个值last_value(col): 取分组内排序后,截止到当前行,最后一个值lead(col,n,default) :用于统计窗口内往下第n行值。第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为null时候,取默认值,如不指定,则为null)原创 2020-10-13 18:47:47 · 676 阅读 · 0 评论 -
hive序列函数之ntile
ntile(n)over(order byxx)它把有序的数据集合【平均分配】到指定的数量(n)个桶中, 将桶号分配给每一行。如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最多相差1。例, 计算总成绩前50%用户select name,sum(grade) as grade,ntile(2)over(order by sum(grade) desc) as levelfrom (select '李一' as name,'语' as subject,80 as gr..原创 2020-10-13 17:23:59 · 1248 阅读 · 0 评论 -
hive分析函数
排序1.row_number() 直排,相同的也有序row_number() over(partition by col1 order by col2) as rowid结果:1,2,3,42.rank() 并列的,下一个数字会跳过rank() over(partition by col1 order by col2) as rowid结果:1,2,2,4,53.dense_rank() 并列的,下一个数据不会跳过dense_rank() over(partitio原创 2020-10-13 15:17:35 · 1615 阅读 · 0 评论 -
hive聚合函数
聚合函数是hive内置函数,聚合函数对一组数据进行计算,并返回单个值。常用聚合函数count计数count(*) --统计检索出的行的个数,包括NULL值的行 count(col) --返回指定列非空值个数 count(distinct col[, col_.]) --返回指定列不同的非空值的个数sum求和sum(col) --col累计加和 sum(distinct col) --不同col值累计加和max最大值max(col) --col中最大值min最小值m...原创 2020-10-13 14:59:25 · 4832 阅读 · 0 评论 -
udf、udaf、udtf等自定义方法
UDF 一进一出。继承UDF类,添加方法 evaluate()UDAF 多进一出。用户定义聚合函数,可对多行数据产生作用;等同与SQL中常用的SUM(),AVG(),也是聚合函数UDTF 一进多出。User-Defined Table-Generating Functions,用户定义表生成函数,用来解决输入一行输出多行;继承GenericUDTF类,重写initialize(返回输出行信息:列个数,类型), process, close三方法...原创 2020-10-12 17:33:56 · 214 阅读 · 0 评论 -
Hive调优
1.表设计优化(1)利用分区表优化建表的时候建立分区,能够提高查询速度,如果筛选条件里面有分区字段的话,那么Hive只需要遍历对用分区目录下的文件即可,不需要遍历全局数据,使得处理的数据量大大减少。(2)利用桶表优化指定桶的个数后,存储数据时,根据某一个字段进行哈希后,确定存储在哪个桶里,跟分区表类似也是使得筛选时不用全局遍历所有的数据,只需要遍历所在桶就可以了。2.存储压缩优化(1)选择合适的文件存储格式TextFile默认格式,如果建表时不指定默认为此格式。存储方式:行存储。O原创 2020-10-12 16:25:24 · 324 阅读 · 0 评论 -
Hive 和关系型数据库比较
数据存储位置Hive 是建立在 Hadoop 之上的,所有 Hive 的数据都是存储在 HDFS 中的。而数据库则可以将数据保存在块设备或者本地文件系统中。数据更新由于 Hive 是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive中不建议对数据的改写,所有的数据都是在加载的时候确定好的。而数据库中的数据通常是需要经常进 行修改的,因此可以使用INSERT INTO … VALUES 添加数据,使用UPDATE … SET 修改数据。执行延迟Hive 在查询数据的...原创 2020-10-12 16:04:55 · 556 阅读 · 0 评论 -
SQL转MapReduce的过程及执行顺序
SQL转化为MapReduce的过程一起来看看Hive是如何将SQL转化为MapReduce任务的,整个编译过程分为六个阶段:Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree 遍历AST Tree,抽象出查询的基本组成单元QueryBlock 遍历QueryBlock,翻译为执行操作树OperatorTree 逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量 遍历O.原创 2020-10-10 16:12:05 · 1355 阅读 · 1 评论 -
按不同维度组合并聚合方法
grouping sets,在一个 group by 查询中,根据不同的维度组合进行聚合,等价于将不同维度的 group by 结果集进行 union allcube,根据 group by 的维度的所有组合进行聚合rollup,是 cube 的子集,以最左侧的维度为主,从该维度进行层级聚合。grouping setsselect order_id, departure_date, count(*) as cntfrom order_infogroup by order_id, d原创 2020-09-29 16:27:33 · 985 阅读 · 0 评论