本节我们主要来学习一些hive的命令操作,同时探究一下Hive,HDFS,MySQL之间的联系,从而更好的理解其内部原理。
常用的基础命令
代码语言:javascript复制#此处的命令都是指在hive命令行下执行的命令,所有的命令别忘记以分号结尾。
hive> show databases;#查看当前数据库列表
hive> create databases dbname;#创建一个名称为dbname的数据库
hive> use databasename;#将当前的数据库切换为databasename
hive> show tables;#查看当前数据库中有哪些表
hive> desc tbname;#查看表结构,包括字段类型,注释等
Hive的数据类型
hive基本数据类型
hive集合数据类型
注:图片来自《hive编程指南》
这里先简单了解一下Hive的数据类型,本节我们暂时不会用到太多很复杂的类型。
建表
假设我们现在建立一张student
表,它有两个字段,id(int)
和name(string)
。
hive> create database learn;#创建数据库learn
hive> use learn;#切换到learn数据库
hive> create table student(id int, name string);#创建表student
hive> show create table student;#查看建表语句
创建表,查看建表语句
我们通过show create table student;
命令查看student
表建立时一些详细信息。关注一下LOCATION
的值为:hdfs://localhost:8020/user/hive/warehouse/learn.db/student
,猜测这是一个HDFS的文件路径,我们通过浏览器验证一下:
在浏览器中查看student表的location
可以看到,我们建立的student
表是HDFS上的一个目录(文件夹),目录的位置就是LOCATION
对的值。
将本地文件加载到Hive表
本地文件:当前目录下的student.txt
,字段之间用空格分割,
1 zhangsan
2 lisi
3 wangwu
代码语言:javascript复制hive> load data local inpath 'student.txt' into table student;
加载本地数据
加载成功之后,我们先来看一下HDFS中student目录,如下图所示,可以看到该目录下出现了一个student文件。
查看HDFS中student目录
然后用hive命令查询一下student表。
代码语言:javascript复制hive> select * from student;
OK
NULL NULL
NULL NULL
NULL NULL
Time taken: 0.139 seconds, Fetched: 3 row(s)
可以看到结果虽然是有三行,但全部否是null。如果执行select count(*) from student;
也能输出结果为3。
查询student表的行数
出现这种情况是,我们建表时没有指定数据列之间的分隔符,hive默认的字段分隔符是