Hive
概念:
是由Facebook开源用于解决海量结构化日志数据统计的工具
是一个基于hadoop的数据仓库工具可以将结构化的数据映射成一张二维表提供sql语句
本质是将sql语句映射到MapReduce上 进行分布式计算
数据存储在hdfs上、底层分析用mapreduce进行分析 、执行程序在yarn上 元数据存储在第三方
hive没有索引所以在查询的时候延迟高还有因为MapReduce本身延迟就很高
优点:
用类似于sql语句进行操作上手快
不用写MapReduce 减少开发人员的消耗
适合处理大数据集不适合处理小数据集
用户可以根据自己的需求来定义函数
离线计算 不能实时计算
缺点:
迭代试算法无法表达
数据挖掘方面不擅长 由于MapReduce的处理流程的限制
数据类型:
tinyint 位整形 1byte boolean 布尔型 timestamp 时间类型
smalint 短整型 2yte float 单浮点型 binary 字节数组
int 整形 4byte double 双精度浮点数
bigint 长整型 8byte string 字符串 类型
集合数据类型:
struct 结构体 用点来访问元素 第一个可以用。first来访问
map 键值对集合 可以使用键来访问元素
array 具有相同类型和名称的变量集合
定义表:
row format delimited fields terminated by 列分隔符
collection items terminated by ' ' map、struct array 分隔符
map keys terminated by ':' map中key与value分隔符
lines terminated by '\n' 行分隔符
类型转化:
隐世类型转化: 任何整形类型都可以隐式转化为范围更广的类型
所有整形类型、float \ string类型 都可以隐式转换为double类型
tinyint samllint 、int 都可以转化为float类型
boolean 类型不能转化为任何类型
强行转换 :使用cast操作进行数据类型的转换
例如 使用cast('1' as int ) 吧字符串转换成整数 如果转化失败返回一个null值
创建库
create database [if not exists ] database_name
[comment database_comment] 对于表的注释
[location dfs_path] 数据库的存储地址
[with dbproperties property_name=property_value ] 属性的配置
创建数据库的默认地址 是 user/hive/warehouse/*.db
创建表
create [external] table [if not exists] table_name
[(col_name data_type [comment col_comment,...])]
[comment table_comment]
[partitionend by (col_name data_type [comment col_comment],....)]
[clustered by (col_name data_type...)
[sorted by (col_name [asc|desc],...)] into num_buckets buckets]
[row format orw_format]
[stored as file_format]
[location hdfs_path]
[talproperties (property_name=property_value,....)]
[as select_statement]
字段解释:
1、 create table 创建一个表 如果这个表已经有了用[if not exists ] 来抛出异常
2、[external] 创建一个外部表 在删除表的时候值删除元数据 内部表删除数据和元数据
3、comment 为表或者列来加注释
4、partitioned by 创建分区表
5、clustered by 创建分桶表
6、sorted by 不常用你 对于桶中的一个或多个列进行排序
7、row format delimited [fields terminated by ''] 字段之间分割[collection items terminated by ''] 集合之间分割 [map keys terminated by ''] map和值之间的分割 [liens terminated by '' ] 行之间分割 不写就用默认的
8、stored as 指定类型 sequencefile 二进制序列文件 textfile 文本文件 rcfile 列式存储格式文件
9、 location 指定存储位置
10、 as 后面跟查询语句 查询结果创建表
11、like 允许用户复制现有的表结构不能复制数据
各种函数使用
concat 两个字符串直接连接
concat_ws (separator,str1,..) 中间参数指定字符分开 连接
collect_set(col) 指定分割 返回集合 多行换成一行
collect_list(col) 转化成列表
nvl(field,null) 空字段赋值 如果为空返回默认是
case where 判断
split(str,regex) 函数 正则表达式切分给定的字符串
explode 转成列 炸裂函数
lateral view 侧视图
UDTF :用户定义一进多出函数
UDAF : 用户定义多进一出
UDF : 一进一出函数
order by 和sort by & distribute by
order by asc 升序 默认 desc 升序 全局排序效率慢
sort by 局部分区
MapReduce 内部排序 sort by 对于大数据集来说orderby d的效率比较低 在很多情况下不需要 全局排序
这个排序对于全局来说不是排序的
distribute by 分区排序
分区规则是根据字段的hash码与reduce的个数进行取余分到一个区的 distribute by 要求sort by后面
因为我们用的mapreduce所以在生成的时候他们只对map阶段的分区来进行排序 在总结到一起的时候不会是全局有序的他们每个分区的大小是根据hash值&一个整形最大值
1、Load data 各参数意义
load data local inpath "path" into table tab_name partition= “”;
load data 表示加载数据 local 表示从本地 inpath 表示路径 “ ”
into table 表示 写到那张表中 partition 表示分区
2、管理表与外部表的互相转换
alter table tab_name set tblproperties(external=false) 外部切换到分区
alter table tab_name set tblproperties(external=true) 管理切换到外部
3、什么是管理表
管理表把元数据和 真是数据结合在一起 如果我们吧这个表删了 真是数据也会删除 适合长期数据
4、什么是外部表
外部表把元数据和真实数据分开来 如果我们吧删除表只有元数据丢失 我们真是数据还会存在hdfs上
适合短暂时间要用到的一些日志 或者数据
5、什么是分区表
分区表就是把大数据集切分成n份 在使用的时候是按区来进行的 在hdfs上主要就是文件夹 这样查找的速度会快 并且表中的数据实际并不包含分区数据
6、分区表优势
在存储的时候可以分区存储 和计算的时候可以分区计算 并行计算让分区表速度加快 逻辑性强伴随而来的是排序的时候会按区来排序 达不到全局排序 隔离性强
开窗函数*
可以单独为聚合函数指定位置
范围限定
over() 决定窗口大小
current row 当前行数据
n preceding 向前n行
n following 向后n行
unbounded preceding 起点
unbounded fllowing 终点
order by 有序
partition by 分组
函数
lag(col,n,default_value) 前第两行数据 在有序窗口使用
lead(col,n,default_value) 向后 有序窗口
ntile(n) 将数据分为n组 需要是有序窗口
percent _ rank() 显示该条记录占窗口数据的百分比
排名函数
rank()--> 排序相同的时候重复但总数不会变
dense_rank() --》 排序的时候相同会重复 但总数汇编
row_number() --》 会根据顺序计算
日期函数
current_date --》当前日期
data_add(start_date,num- days) 返回 开始日期后n天日期
date_sub(date1,date2) 日期差
浙公网安备 33010602011771号