赞
踩
数据仓库的数据规模大,数据更稳定
TEXTFILE,文本文件
SEQUENCEFILE,二进制序列化过的文本存储格式
RCFILE,面向列的数据存储格式
ORCFILE,对RCFILE的优化格式
数据库
表:有外部表和内部表,内部表由hive管理,外部表不由hive管理
分区:用于提高查询效率
分桶
整数:TINYING,SMALLINT,INT,BIGINT
小数:F.LOAT,DOUBLE,DECIMAL;
文本:STRING,CHAR,VARCHAR
布尔:BOOLEAN
二进制:BINARY
时间:DATE,TIMESTAMP,INTERVAL(DATE:日期.TIMESETAMP:纳秒级别的时间戳,INTERVAL:时间间隔)
ARRAY:同类型变量
MAP:键值对
STRUCT:一组有名字的任意基本类型字段
UNIONTYPE:类型JAVA泛型,任一时刻只有一种类型生效
分区的目的:提高查询性能
分桶的目的:提高分布式查询的效率
分区:PARTITIONED BY
分桶:CLUSTERED BY
DBS:存储Hive中所有数据库的基本信息
DATABASE_PARAMS:该表存储数据库的相关参数
TBLS:存储Hive表、视图、索引表的基本信息
TABLE_PARAMS:该表存储表/视图的属性信息
内关联([inner] join):只返回关联上的结果
左关联(left [outer] join):以左表为主
右关联(right [outer] join):以右表为主
全关联(full [outer] join):以两个表的记录为基准,返回两个表的记录去重之和,关联不上的字段为NULL
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
窗口函数指定了函数工作的数据窗口大小(当前行的上下多少行),这个数据窗口大小可能会随着行的变化而变化
窗口函数最重要的关键字是 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行值
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。