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;
注意:
- 如果语句上加上’local’关键字,inpath后的路径是本地路径,加载到Hive表中的数据将从本地复制数据到Hive表对应的HDFS中。如果语句没有加上"local"关键字,inpath后面的路径是HDFS路径,那么加载到Hive表中的数据将从HDFS源数据位置移动到Hive表对应的HDFS目录下,HDFS源数据将被删除。
- "overwrite"关键字是可选项,加上代表覆盖原文件中的所有内容。如果不加"overwrite"关键字,将会在原文件的基础上追加新的内容。
5. 查询表
导入完成之后就可以使用下面的命令进行查询操作,和SQL语言一样:
select * from person;
效果如下:
空白的,说明person数据没有导入成功!!!
来源:CSDN
作者:你好杰克。
链接:https://blog.csdn.net/weixin_44202489/article/details/104121169