hive是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,提供简单的sql查询功能,可以将sql语句转换为mapreduce任务进行运行
Metastore(hive 元数据)
hive将元数据存储在数据库中,比如mysql,derby,hive中的元数据包括表的名称,表的列和分区及其属性,表的数据所在的目录
hive将数据存储在hdfs,大部分的查询,计算由mapreduce来完成
hive数据仓库与数据库的异同
1)由于hive采用了sql的查询语言hql,因此很容易将hive理解为数据库,其实从结构上来看,hive和数据库除了拥有类似的查询语言,再无类似之处
2)数据存储的位置
3)数据格式
4)数据更新,hive读多写少 ,hive中不支持对数据的改写和添加,所有的额数据都是在加载的时候中确定好的
不支持使用update修改数据
hdfs一次写入多次读写
5)执行 .hive通过mapreduce来实现,而数据库通常有自己的执行引擎
6)执行延迟,由于没有索引,需要扫描整个表,因此延迟较高,另外一个导致延迟高的因素是mapreduce框架
7)可扩展性
8)数据规模
hive几种基本表类型:内部表,外部表,分区表,桶表
创建表
外部表创建表的时候,不会移动数据到数据仓库目录中(/user/hive/warehouse),只会记录表数据存放的路径
内部表会把数据复制或剪切到表的目录下
删除表
外部表在删除表的时候只会删除表的元数据信息,不会删除表数据
内部表删除时会将元数据信息和表数据同时删除
几种导出数据的方式
1 insert overwrite ...导出到本地目录 insert overwrite lcoal directory '/home/...' select * from..
2 insert overwrite ...导出到hdfs目录 insert overwrite directory '/home/...' select * from..
3 hive -e 'Hql query' >> test bin/hive -e 'select * from db01.student' >> test.txt
4)sqoop
三种分组的区别
row_number 不管col2字段的值是否相等,行号一致递增,比如:有两条记录的值相等,但一个是第一,一个是第二
rank 上下两条记录的col2相等时,记录的行号是一样的,但下一个col2值得行号递增N(N是重复次数),比如:两条并列第一,下一个是第三,没有第二
dense_rank 上下两条记录的col2相等时,下一个col2值得行号递增1,比如:有两条并列第一,下一个是第二