Bootstrap

hive load data inpath 空目录_Hive基础学习

本节我们主要来学习一些hive的命令操作,同时探究一下Hive,HDFS,MySQL之间的联系,从而更好的理解其内部原理。

常用的基础命令

#此处的命令都是指在hive命令行下执行的命令,所有的命令别忘记以分号结尾。
hive> show databases;#查看当前数据库列表
hive> create databases dbname;#创建一个名称为dbname的数据库
hive> use databasename;#将当前的数据库切换为databasename
hive> show tables;#查看当前数据库中有哪些表
hive> desc tbname;#查看表结构,包括字段类型,注释等

Hive的数据类型

ee2fb5b2ff988b88e41d404419aa0ca3.png

9eb072ea28874582950fdc67e7a415a2.png

注:图片来自《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;#查看建表语句

286961833503b0acb995dba15f75b721.png

我们通过show create table student;命令查看student表建立时一些详细信息。关注一下LOCATION的值为:hdfs://localhost:8020/user/hive/warehouse/learn.db/student,猜测这是一个HDFS的文件路径,我们通过浏览器验证一下:

a54452215b0ee9370a9ceca69645d8d7.png

可以看到,我们建立的student表是HDFS上的一个目录(文件夹),目录的位置就是LOCATION对的值。

将本地文件加载到Hive表

本地文件:当前目录下的student.txt,字段之间用空格分割,

1 zhangsan
2 lisi
3 wangwu

hive> load data local inpath 'student.txt' into table student;

e3ce95ab3bba16a27923a031a26ec174.png

加载成功之后,我们先来看一下HDFS中student目录,如下图所示,可以看到该目录下出现了一个student文件。

46a11948097fc6d163e0da4c7158b24e.png

然后用hive命令查询一下student表。

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。

04d0595acf6f6a8ab80630f3bf73d31b.png

出现这种情况是,我们建表时没有指定数据列之间的分隔符,hive默认的字段分隔符是001,即ASCII码的第一个字符Control-A,而我们的文件的分隔符是空格,二者不一致是导致数据不能正确加载的原因

;