文章目录
- HIVE介绍
- Hive的基本操作(在操作之前需要先启动hdfs(存储源数据)和mysql数据库(存储表结构))
- 八、数据库操作
- 九、表操作
-
- 创建表(可以吧JSON数据导进表的)
- 显示表格信息
- 内部表 MANAGED_TABLE
- 外部表 EXTERNAL_TABLE
- 分区表 当数据量比较大的时候可以缩小查找范围,从而提高查询效率
- 十、数据导入
- 十一、导出数据
- 十二、分桶表
- 十三、hive函数
HIVE介绍
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。本质:
将HQL转化成MapReduce程序
Hive在Hadoop生态中的位置如下图所示:
hive和hadoop的关系:
1)Hive处理的数据存储在HDFS
2)Hive分析数据底层的实现是MapReduce
3)执行程序运行在Yarn上
Hive的基本操作(在操作之前需要先启动hdfs(存储源数据)和mysql数据库(存储表结构))
一、错误
seman 表示是一个无法解决的错误
parse 表示是一个解析异常,修改完hql语句之后就能解决错误
剩下其他错误需要通过查看日志来确定是什么错 cat /tmp/root/hive.log
二、进入hive操作界面的两种方式
2.1、直接输 hive 就可以进入
2.2、beeline连接(连接hive的三种方式:cli,webGUI,beeline(JDBC/ODBC))界面比较美观
一、启动后台
hive --service hiveserver2
netstat -ntlp | grep 10000 查看hiveserver2(端口号是10000) 是否启动
二、进入客户端
2.1、 beeline -u jdbc:hive2://localhost:10000 -n root hive2之后才有这个beeline启动
!quit 退出客户端
2.2、beeline -u jdbc:hive2://localhost:10000 -n root 启动的时候会报两个错
一、错误
二、解决方法
首先,要在hadoop的core-site.xml中添加如下配置:
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
修改之后需要在重新期待hadoop集群(start-all.sh)
三、往表中添加数据的方式
3.1 hive> insert into table stu values(1,“xss”);
3.2、创建一个表然后再用load将数据加载进表对应的hdfs目录
hive> create table stu(id int,name string)row format delimited fields terminated by ",";
1、row format:对数据行格式的声明,其声明的目的是为了让hive知道以什么方式处理行数据,以便让hive能够以正确的方式来处理文件中的行,并与表中的行对应起来。
2、delimited:指定哪些是分隔符,这些分隔符用于将文本拆分成字段。
3、fields terminated by ‘\t’:告诉hive,每个字段之间的分隔符是‘\t’,这必须与文件中字段的分隔符一致。如果不一致,虽然可以成功地将数据加载到hdfs上,但是通过select查询得到的字段值是不正确的,如为null。也就是说,hive在查询时会使用’\t’切分每一行,来获得字段的值。
加载/root/data/student.txt 文件到student数据库表中。
hive> load data local inpath ‘/root/data/student.txt‘ overwrite into table student;
1、load data:加载外部数据到HDFS上。
2、local:指加载的是本地文件系统中的数据,即所在Linux中的数据文件。如果没有这个参数,则是加载hdfs上的文件。
3、inpath:文件所在的路径。如果没有使用local,则该参数的值应为hdfs的文件路径,即hdfs://192.168.100.40:9000/…
4、overwrite:意思是加载数据并覆盖原有文件中的内容。如果不使用该关键字,则在原来的文件中追加新的数据。
5、into table:指定要关联的hive。如果表关联错了,一般情况下不会报告异常,但后期的查询等操作的结果是非预期的。
3.3、根据查询结果创建表(查询的结果会添加到新创建的表中,这种方式不能创建外部表) create as select
create table if not exists student3
as select id, name from student;
3.4、创建表时通过Location指定加载数据路径,然后把txt文档传到设定的路径下
1)创建表,并指定在hdfs上的位置
hive (default)> create table if not exists student5(
id int, name string
)
row format delimited fields terminated by ‘\t’
location ‘/user/hive/warehouse/student5’;
2)上传数据到hdfs上
hive (default)> dfs -put /root/data/student.txt /user/hive/warehouse/student5;
3)查询数据
hive (default)> select * from student5;
3.5、根据 student 创建相同结构的表 student4
create table if not exists student4 like student;
3.6、通过查询结果添加进表 insert select
insert into table stutwo select id,name from stu;
四、在hive中操作haoop
dfs -mkdir /s; 在hadoop上创建一个目录
dfs -rm -r /s; 在hadoop上删除一个目录
dfs -put /root/data/s.txt /s; 将s.txt 上传到hadoop的s目录下
dfs -ls /; 查看haoop上的目录
dfs -chmod 777 /user; 将haoop上的权限修改为777
五、在hive中查看linux上的文件 在linux命令之前加感叹号
!cat /root/s.txt
六、在不进入hive的情况下在linux界面操作hive
(1)“-e”不进入hive的交互窗口执行sql语句
[root@master hive]$ bin/hive -e “select id from student;”
(2)“-f”执行脚本中sql语句
(1)在/root/data目录下创建hivef.sql文件
[root@master ~]$ touch hivef.sql
文件中写入正确的sq