Hive表与内部数据的映射关系

匿名 (未验证) 提交于 2019-12-03 00:08:02

Hive表与内部数据的映射关系

1. 在练习Hive之前,先创建一个文件夹来存放Hive的练习数据。

命令:cd /export/data/ ,然后创建对应文件夹: mkdir hivedata

2. 进入hivedata文件夹,创建一个名为1.txt 的文件,将如下数据复制进去。

1,allen,18 2,jack,28 3,rose,20 4,lucy,10

3. 然后将文件上传值HDFS

现在HDFS上创建一个文件夹来保存数据,命令:hadoop fs -mkdir /hivedata

然后将1.txt上传至刚刚创建的文件夹,命令:hadoop fs -put 1.txt /hivedata

4. 使用node-3远程连接上Hive

这里不多说。

5. 查看当前数据库

命令:show databases;

6. 创建一个练习用的数据库:pttest

命令:create database pttest;

7. 选择我们刚刚创建的数据库,创建一张test1表

命令:use pttest; ,创建表:create table test1(id int,name string,age int);

8. 此时去查询这个表会发现没有任何数据,因为文件还没有映射过来。

Hive在HDFS上有特定的映射的地方:/user/hive/warehouse,当创建外部表时可以指定数据加载的地方。

在这里我们可以查看到刚刚创建的数据库和表。

9.将之前上传到HDFS的文件移动到Hive指定映射的地方。

命令:hadoop fs -cp /hivedata/1.txt /user/hive/warehouse/pttest.db/test1

10. 这时候如果我们去select test1表,会发现:查出来的数据都是null

原因:分隔符,1.txt中我们用的是 ‘,’ 来作为分隔符,但是我们在创建test1 表时没有指定分隔符,导致错误。

11. 修改表与数据的对应分隔符

命令:alter table test1 set serdeproperties('field.delim'=',');

然后查询发现:

附:修改序列化分隔符:

alter table test1 set serdeproperties('serialization.format'='\t');

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!