赞
踩
hive安装:https://www.yiibai.com/hive/hive_installation.html
hive:hive基于hadoop的一个数据仓库工具,可以将结构化的数据映射为一张数据库表
hive调用cli,driver开始对词性分析,语法分析,编译,优化以及查询计划的生成,生成的计划存储在hdfs中,并在随后的mapreduce调用
hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区**
Hive与传统数据库的异同
Hive是数仓工具,使用类似SQL的HQL来处理海量数据(写入和查询),速度有延迟,不适合处理小批量数据
除了基本数据类型还支持复杂数据类型 ARRAY MAP STRUCT
ollect_set/collect_list:分组之后将分组内容聚合成数组
lateral view explode:explode函数 拆开复杂数据结构
CONCAT/CONCAT_WS: 字符串拼接
map的使用:str_to_map(), map_keys(wm) ,map_values(wm
ODS层(原始数据层)
原始数据层,存放原始数据,直接加载原始日志、数据,数据保持原貌不做处理。
DWD层(明细数据层)
ODS层数据进行清洗(去除空值,脏数据,超过极限范围的数据
DWS层(服务数据层)
以DWD层为基础,进行轻度汇总,一般聚集到以用户当日,设备当日,商家当日,商品当日等等的粒度。
ADS层(数据应用层)
为各种统计报表提供数据
拉链表:数据会发生变化,但是大部分是不变的。
生效日期<=某个日期 且 生效结束日期>=某个日期,能够得到某个时间点的数据全量切片
拉链表意义:当日全部数据和数据库中每天变化的数据拼接在一起,形成一个新的临时拉链表,用这个临时的表覆盖旧的拉链表
Hive 通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的 Driver, 结合元数据(MetaStore),将这些指令翻译成 MapReduce,提交到 Hadoop 中执行,最后,将 执行返回的结果输出到用户交互接口。
row format delimited fields terminated by ',' -- 列分隔符 collection items terminated by '_' --MAP STRUCT 和 ARRAY 的分隔符(数据分割 符号) map keys terminated by ':' -- MAP 中的 key 与 value 的分隔符 lines terminated by '\n'; -- 行分隔符
1)CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出 异常;用户可以用 IF NOT EXISTS 选项来忽略这个异常。 (2)EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际 数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路 径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的 时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。 (3)COMMENT:为表和列添加注释。 (4)PARTITIONED BY 创建分区表 (5)CLUSTERED BY 创建分桶表 (6)SORTED BY 不常用 (7)ROW FORMAT
alter table student2 set tblproperties('EXTERNAL'='TRUE');
分区表就是分目录
创建表语法 partitioned by (month string)
增加或者删除分区 alter table 表名 add(drop) partition(month='1234')
展示分区 show partitions 表
查看分区结构 desc formatted 表
分区表与数据产生关联的三种方式
上传数据后修复
修复命令 msck repair table 表
上传数据后添加分区
alter table 表 add partition(month='')
创建文件夹后加载数据到分区
重命名表
alter table_name reanme to new_table_name
增加修改删除表分区
增加列
alter table 表 add columns('字段','类型')
alter table 表 change column 就字段 新字段 类型
alter table 表 replace columns()字段全部替换
删除表 drop table 表
加载数据并覆盖已有数据 overwrite
load data local data inpath '路径' overwrite into table_name
通过查询加载数据
基本插入数据
insert (overwrite)into table 表 partition(month='') select * from 表 where month=''
多模式插入数据
from student insert into table student partition(month='201708') select id,name wherer month insert into table student
创建表加载数据
create table if not exists studet(id int,name string) row format delimited fields terminated by '\t' location ''
import 数据制定导入
import table 表 partiiton() from '路径'
数据导出
insert导出
insert overwrite local directory '' select * from student
hadoop 导到本地
dfs -get '远程目录' ' 本地目录'
hive 命令导出
bin/hive -e 'select * fro default.student;' 文件目录
export 导出到hdfs上
export table defult.student to 'hdfs文件目录'
清除表中数据
truncate table student 只能删除管理表 不能删除外部表
like 和rlike
%代表任意字符 _代表任意一个字符
rlike可以通过正则表达式指定匹配规则
排序
order by 代表全局排序
sort by 每个reducer内部进行排序
1.设置reduce个数 set mapreduce.job.reduces=3;
分区排序
distribute by 和 order by 一般一起使用
分区字段和排序字段相同时使用cluster by
分桶表数据存储
分区针对的是存储路径 分桶针对的是数据文件
解决分桶数据问题
set hive.enforce.bucketing=true;
set mapreduce.job.reduces=-1
分桶抽样查询
select * from stu tablesample(bucket 2 of 4 on id)
空字段赋值
NVL(字段,replace_with)
时间类
date_format 格式化时间
date_add 时间和天数相加
date_sub 时间和天数相减
date_diff 两个是时间相减
case when then
行转列
concat_ws(separator,str1,str2)
列传行
explode 将复杂的数组和map结构分成多行
lateral view 对拆分后的数据进行聚合
示例 select * from 表 lateral view explode()
窗口函数 : 和分组聚合函数类似,但是窗口函数是每一行都产生一个结果
over() 制定分析函数的数据窗口的大小,这个数据的窗口大小随着行的变化而变化
rank
rank() 排序相同时会重复,总数不会变 dense_rank
row_number 一般和窗口函数一块用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。