hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。
其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
1:关系型数据库“写时模式” vs hive 为“读时模式”
2:hive的 HQL 语法类似 mysql的sql语法
3:关系型数据库支持insert/delete/update/select 、建索引等操作,hive没有update/delete等操作,支持select、追加数据、覆盖数据操作
4:关系数据库查询速度快, hive 查询慢(底层将HQL转换为mapreduce程序执行)
与hbase集成
查询hbase中数据 需要调用 hbase的java api去获取库中存放的值,当与hive集成时,可编写HQL语句查询
1:目前查询hbase数据复杂,除非编写java 程序
2:查询mapreduce生成的文件中某些特定信息复杂,需要编写程序访问hdfs或再次编写mapreduce程序去查询特定信息
3:对外接口系统中,存在对外提供全量站点商品信息需求。
目前是将hbase的商品表中所有数据通过mapreduce程序上传到hdfs上
1)提供其他mapreduce的基础数据
2)提供hive 商品表的外部数据
3)每天生成一份数据
1:Hive 建表:内部(托管)表、外部表
Create [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
<!--[endif]-->
当使用EXTERNAL 关键字时,为外部表
1:内部表与外部表的区别
drop table 时,内部表会把表结构及数据文件同时删除掉,外部表只删除表结构
CREATE TABLE t_sys_conf_param(
param_key string,
param_value String)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,';
Drop table t_sys_conf_param;
2:分区
Hive 的分区可参照mysql中表分区概念理解
在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念
例如:hive中按日期进行分区yyyyMMdd
ALTER TABLE p_site_product_hive DROP IF EXISTS PARTITION (dt='${hivevar:datetime}');
ALTER TABLE p_site_product_hive ADD partition(dt='${hivevar:datetime}') location '/user/spider/data/spider_stat/productText/${hivevar:datetime}';
四、Hive查询操作介绍
hive.fetch.task.conversion=more 表示简单的 sql语句执行可不转换为mapreduce程序
set hive.fetch.task.conversion=minimal
[内连接例子] Select a.product_id,b.std_product_id from p_site_product a join t_match_result b on (a.product_id = b.product_id)
五、hive 与 hbase表关联
1:建立hbase对应外部表
CREATE EXTERNAL TABLE t_sys_conf_param_hive(
param_key string, param_value String)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "noverison:param_value")
TBLPROPERTIES("hbase.table.name" = "ns_spider:t_sys_conf_param");
2:设置hive 输出文件是否压缩参数
drop table t_sys_conf_param;
set hive.exec.compress.output=false;
3:建立内部表
CREATE TABLE t_sys_conf_param(
param_key string, param_value String)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
4:将外部表中数据导入 内部表
INSERT OVERWRITE TABLE t_sys_conf_param SELECT * FROM t_sys_conf_param_hive; (覆盖原有数据)
INSERT INTO TABLE t_sys_conf_param SELECT * FROM t_sys_conf_param_hive; (追加数据)
5:查看 hdfs文件中内容
hadoop fs -ls /user/spider/hive/warehouse/spider.db/