Hive表的操作(四)

空扰寡人 提交于 2020-01-31 10:48:32

1. 前言

前面三篇讲述了安装MySQL和Hive以及Hive的配置和存储,并通过Shell成功登录了Hive,接下来就可以创建Hive表进行数据操作了。

Hive是一个数据仓库,它可以将结构化的数据文件映射为一张数据库表,并具有SQL语言的查询功能,这里需要再次强调的是对于数据仓库来说,往往存放的是历史数据,他的作用是完成数据的查询分析,而不是完成单条记录的增加、修改和删除操作。

Hive表的创建语法与传统的关系型数据库有很大的相似之处,但是Hive的类型可以更加复杂,比如说可以是数组类型和Map类型。

2. person.txt文件

文件内容如下,一通乱敲:

1	lhd	22	study-study-study	std_addr:xian-work_addr:xian
2	lrj 23	study-study-game	std_addr:beijing-work_addr:xian
3	gdh	23	game-game-driver	std_addr:dalian-work_addr:yantai

3. 创建Hive表

首先,创建一张普通的Hive表,表名为person,包含id、name、age、fav和addr这五个字段,数据类型为int、String、int、String数组和Map<String, String>,支持的数据文件格式为txt。建表语句如下:

create table person(
id int,
name string,
age int,
fav array<string>,
addr map<string, string>
)
comment 'This is the person table'
row format delimited fields terminated by '\t'
collection items terminated by '-'
map keys terminated by ':'
stored as textfile;

上面一小段是指定表中的字段信息和数据类型的,下面逐个说一下下面的每句话的作用:
表的简介:

comment 'This is the person table'

定义每一个字段的分隔符,这里的’\t’表示以Tab键作为分隔符分割每行字段:

row format delimited fieleds terminated by '\t'

定义集合类型中每个对象的分隔符,fav字段是String类型的数组,以’-'分割每个字符串:

collection items terminated by '-'

定义Map类型键值对的分隔符,这里以’:'为分隔符,分割键与值:

map keys terminated by ':'

定义这张表使用的数据文件格式,这里指定的格式为txt格式:

stored as textfile

在这里插入图片描述

4. 导入数据

使用上述建表语句创建出的表只是一张空表,接下来该导入数据了:
数据就是person.txt文件,每行字段中间隔一个Tab键,fav字段中每个元素中间用’-‘隔开,addr字段中的键和值之间用’:'分隔开,导入数据的语法如下:

 load data local inpath '/opt/module/hive-0.13.1-cdh5.3.6/person.txt' overwrite into table person;

在这里插入图片描述
注意:

  1. 如果语句上加上’local’关键字,inpath后的路径是本地路径,加载到Hive表中的数据将从本地复制数据到Hive表对应的HDFS中。如果语句没有加上"local"关键字,inpath后面的路径是HDFS路径,那么加载到Hive表中的数据将从HDFS源数据位置移动到Hive表对应的HDFS目录下,HDFS源数据将被删除。
  2. "overwrite"关键字是可选项,加上代表覆盖原文件中的所有内容。如果不加"overwrite"关键字,将会在原文件的基础上追加新的内容。

5. 查询表

导入完成之后就可以使用下面的命令进行查询操作,和SQL语言一样:

select * from person;

效果如下:

在这里插入图片描述
空白的,说明person数据没有导入成功!!!

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