当前位置:   article > 正文

数据仓库技术及应用

数据仓库技术及应用

1.Hive入门

主要内容:

数据仓库的与传统数据库不同:

数据仓库的数据规模大,数据更稳定

Hive真实数据存储格式:

TEXTFILE,文本文件

SEQUENCEFILE,二进制序列化过的文本存储格式

RCFILE,面向列的数据存储格式

ORCFILE,对RCFILE的优化格式

Hive数据单元:

数据库

表:有外部表和内部表,内部表由hive管理,外部表不由hive管理

分区:用于提高查询效率

分桶

Hive基本数据类型:

整数:TINYING,SMALLINT,INT,BIGINT

小数:F.LOAT,DOUBLE,DECIMAL;

文本:STRING,CHAR,VARCHAR

布尔:BOOLEAN

二进制:BINARY

时间:DATE,TIMESTAMP,INTERVAL(DATE:日期.TIMESETAMP:纳秒级别的时间戳,INTERVAL:时间间隔)

Hive复杂数据类型:

ARRAY:同类型变量

MAP:键值对

STRUCT:一组有名字的任意基本类型字段

UNIONTYPE:类型JAVA泛型,任一时刻只有一种类型生效

Hive分区和分桶:

分区的目的:提高查询性能

分桶的目的:提高分布式查询的效率

分区:PARTITIONED BY

分桶:CLUSTERED BY

Hive元数据:

DBS:存储Hive中所有数据库的基本信息

DATABASE_PARAMS:该表存储数据库的相关参数

TBLS:存储Hive表、视图、索引表的基本信息

TABLE_PARAMS:该表存储表/视图的属性信息

Hive数据连接

内关联([inner] join):只返回关联上的结果

左关联(left [outer] join):以左表为主

右关联(right [outer] join):以右表为主

全关联(full [outer] join):以两个表的记录为基准,返回两个表的记录去重之和,关联不上的字段为NULL

Hive数据排序

order by(全局排序)
order by会对输入做全局排序,因此只有一个Reducer(多个Reducer无法保证全局有序),然而只有一个reducer,会导致当输入规模较大时,消耗较长的计算时间
降序:desc
升序:asc 不需要指定,默认是升序

sort by(分区内排序)
不是全局排序,其在数据进入reducer前完成排序,也就是说它会在数据进入reduce之前为每个reducer都产生一个排序后的文件。因此,如果用sort by进行排序,并且设置mapreduce.job.reduces>1,则sort by只保证每个reducer的输出有序,不保证全局有序。

distribute by(数据分发)
distribute by是控制在map端如何拆分数据给reduce端的。类似于MapReduce中分区partationer对数据进行分区
hive会根据distribute by后面列,将数据分发给对应的reducer,默认是采用hash算法+取余数的方式。

cluster by
cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC
当分区字段和排序字段相同cluster by可以简化distribute by+sort by 的SQL 写法,也就是说当distribute by和sort by 字段相同时,可以使用cluster by 代替distribute by和sort by

hive窗口函数

窗口函数指定了函数工作的数据窗口大小(当前行的上下多少行),这个数据窗口大小可能会随着行的变化而变化

窗口函数最重要的关键字是 partition by 和 order by。
具体语法:over (partition by xxx order by xxx)

row_number() over():对相等的值不进行区分
rank() over():相等的值排名相同,序号从1到n不连续
dense_rank() over():对相等的值排名相同,序号从1到n连续
ntile(n) over():可以看作是把有序的数据集合平均分配到指定的数据n的桶中,将桶号分配给每一行,排序对应的数据为桶号
paercent_rank():排名计算公式:(current rank - 1)/(total number of rows -1),说明:分组内当前行的rank值-1/分组内总行数-1
cume_dist:如按升序排列,则统计;小于等于当前值的行数/总行数(number of rows ≤ current row)/(total number of rows),如果是降序比例,则统计:大于等于当前值的行数/总行数
lead(value_expr[,offset[default]]):用于统计窗口内往下第n行值
lag(value_expr[,offset[,default]]):与lead相反,用于统计窗口内往上第n行值

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/847161
推荐阅读
相关标签
  

闽ICP备14008679号