hive是一个sql工具;
它能接收用户输入的sql语句,然后把它翻译成mapreduce程序对HDFS上的数据进行查询、运算,并返回结果,或将结果存入HDFS;
核心点:
HIVE利用HDFS来存储数据文件;
利用MAPREDUCE来做数据分析运算;
利用SQL来为用户提供查询接口;
问题1:装在哪?随便一台能够跟HADOOP集群联网的linux机器;
简单安装(使用derby作为hive的元数据库)
步骤:
上述安装,hive是使用内置的derby来记录元数据;非常不靠谱;
可以为hive安装一个mysql来作为它的元数据存储库;
标准安装(使用mysql作为hive的元数据库)
做法:
hive-site.xml:
|
修改完配置后,在hive的lib目录中放置一份mysql的jdbc驱动jar包
启动hive:
bin/hive
方式1: bin/hive 交互式查询
方式2: 启动hive的网络服务,然后通过一个客户端beeline去连接服务进行查询;
启动服务: bin/hiveserver2
启动客户端去连接hive服务: bin/beeline -u jdbc:hive2://cts03:10000 -n root
方式3:shell脚本方式查询
#!/bin/bash HIVE_HOME=/root/apps/hive-1.2.2 $HIVE_HOME/bin/hive -e 'insert into table t_avg as select skuid,avg(amount) from t_2 group by skuid' $HIVE_HOME/bin/hive -e 'create table t_result as select skuid,sum(amount) from t_2 group by skuid' |
补充: bin/hive -f /root/etl.sql (把sql语句写到一个专门的文件里)
create database db1;
内部表:
create table t1(id int,name string,age int)
row format delimited fields terminated by ‘,’;
外部表:
create external table t2(id int,name string,age int)
row format delimited fields terminated by ‘:’
location ‘/xx/yy/’;
注意:内部表被drop时,表目录会被删除,表的元数据也会被删除
外部表被drop时,表的元数据会被删除;但是表目录还在!
本质上:你想办法把数据文件放入表目录即可! hadoop fs -put ......
当然,hive提示符中,有对应的导入数据的命令:
如果文件在hive的本地磁盘: LOAD DATA LOCAL INPATH ‘/root/t1.dat’ INTO TABLE t1;
如果文件在HDFS上: LOAD DATA INPATH ‘/t2.dat’ INTO TABLE t1;
注意:hive不会对用户所导入的数据做任何的检查和约束;
修改表名:alter table t1 rename to t_1;
修改字段名、字段类型
修改分区!
4.1分区表
分区表的实质:就是在表目录下还可以建子目录,以便于在查询的时候可以指定具体的子目录进行查询,提高查询效率;
内部表分区建表语法:
CREATE TABLE t_2(id int,skuid string,price float,amount int) partitioned by (day string,city string) row format delimited fields terminated by ','; |
导入数据到指定分区(子目录):
LOAD DATA LOCAL INPATH '/root/t2.1' into TABLE t_2 PARTITION(day='2018-04-15',city='beijing'); |
或者,将一个已存在的文件夹作为表的一个分区:
ALTER TABLE t_2_ex ADD PARTITION(day=’2018-04-16’) LOCATION ‘/2018-04-16’;
sql运算模型一:逐行运算模型(逐行表达式,逐行过滤)
sql运算模型二:分组运算模型(分组表达式,分组过滤)
sql的join联表机制:join的实质是将多个表的数据连成一个表,作为查询的输入数据集!
笛卡尔积连接
内连接
左外连接
右外连接
全外连接
左半连接