Hive是基于 Hadoop 的一个【数据仓库工具】,可以将结构化的数据文件映射为一张hive数据库表,并提供简单的 sql 查询功能,可以将 hql 语句转换为 MapReduce 任务进行运行。
Hive是一款数据仓库工具
【数据仓库】英文名称为 Data Warehouse,可简写为 DW 或 DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制.
数据仓库是用来做查询分析的数据库,基本不用来做插入,修改,删除操作。
使用HQL语句转化为MapReduce任务,从而得到想要的数据
用户接口
元数据存储在metastore中,一般以mysql等数据库为载体
Hive的数据存储在HDFS中
计算由MapReduce完成
Hive的查询语言,与SQL(结构化查询语言)类似
数据库增删改查语句
表的增删改查语句
四种导入/插入语句
LOAD DATA [LOCAL] INPATH ‘filepath’ [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 …)]
INSERT OVERWRITE TABLE person2 [PARTITION(dt=‘2008-06-08’, country)] SELECT id,name, age From ppt;
FROM person t1 INSERT OVERWRITE TABLE person1 [PARTITION(dt=‘2008-06-08’, country)] SELECT t1.id, t1.name, t1.age ;
同SQL的INSERT语句,不常用
查询数据并保存
备份数据
EXPORT TABLE db_1128.emp TO ‘/user/hadoop/hive/datas/export/emp’ ;
还原数据
IMPORT FROM ‘/user/hadoop/hive/datas/export/emp’ ;
构建在数据存储和执行引擎之间,对两者实现解耦。
Hive通过ROW FORMAT DELIMITED以及SERDE进行内容的读写。
Hive创建表时,可以依据表的其中一个或多个字段将表分为不同的分区。不同的分区存储在HDFS不同的目录中,可以通过分区字段对表进行检索。
必须在表定义时创建partition !
在创建 删除多分区等操作时一定要注意分区的先后顺序,他们是父子节点的关系。分区字段不要和表字段相同
步骤:
参数
hive.exec.dynamic.partition = true
hive.exec.dynamic.partition.mode = nostrict
hive.exec.max.dynamic.partitions.pernode由实际需求决定
hive.exec.max.dynamic.partitions 同样由实际需求决定
分桶是把一列的信息以取哈希值的方式,将不同的数据放入不同文件存储
适用场景
数据抽样
MapJoin
开启分桶
实例
Lateral View用于和UDTF函数(explode、split)结合来使用
主要解决在select使用UDTF做查询过程中,查询只能包含单个UDTF,不能包含其他字段、以及多个UDTF的问题
LATERAL VIEW udtf(expression) tableAlias AS columnAlias (’,’ columnAlias)
1、把hive-hbase-handler-1.2.1.jar cp到hbase/lib 下
同时把hbase中的所有的jar,cp到hive/lib
2、在hive的配置文件增加属性:
<property>
<name>hbase.zookeeper.quorumname>
<value>node01,node02,node03value>
property>
3、在hive中创建临时表
CREATE EXTERNAL TABLE tmp_order
(key string, id string, user_id string)
STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
WITH SERDEPROPERTIES (“hbase.columns.mapping” = “:key,order:order_id,order:user_id”)
TBLPROPERTIES (“hbase.table.name” = “t_order”);
CREATE TABLE hbasetbl(key int, name string, age string)
STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
WITH SERDEPROPERTIES (“hbase.columns.mapping” = “:key,cf1:name,cf1:age”)
TBLPROPERTIES (“hbase.table.name” = “xyz”, “hbase.mapred.output.outputtable” = “xyz”);