命令 | 作用 | 额外说明 |
show databases; | 查看都有哪些数据库 | 就像sql语言中的一样,以下空白说明和Mysql数据库一样 |
create database park; | 创建park数据库 | 创建的数据库,实际是在Hadoop的HDFS文件系统里创建一个目录节点,统一存在: /user/hive/warehouse 目录下
|
use park; | 进入park数据库 |
|
show tables; | 查看当前数据库下所有表 |
|
create table stu (id int,name string); | 创建stu表,以及相关的两个字段 | hive里,用的是string,不用char和varchar。此外,所创建的表,也是HDFS里的一个目录节点
|
insert into stu values(1,'zhang') | 向stu表插入数据 | 1.HDFS不支持数据的修改和删除,但是在2.0版本后支持了数据追加。实际上,insert into 语句执行的是追加操作。 3.hive的操作实际是执行一个job任务,调用的是Hadoop的MR。
|
select * from stu | 查看表数据 | 也可以根据字段来查询,比如select id from stu |
drop table stu | 删除表 |
|
select * from stu | 查询stu表数据 | 有时会出现这样的情况:
原因是:我们从外部导入的文件的数据格式是: 1 jary 2 rose 即第一列和第二列是以空格为分隔符的。 但是把数据导入到hive之后,hive并不知道分隔符是什么,所以就不能正确的切分数据。所以显示null。 解决办法:在hive创建表的时候,要指定分割符,并且这个分割符要和外部文件里的分割符一致。详见指令8 |
load data local inpath '/home/software/1.txt' into table stu; | 通过加载文件数据到指定的表里 |
在执行完这个指令之后,发现hdfs stu目录下多了一个1.txt文件。由此可见,hive的工作原理实际上就是在管理hdfs上的文件,把文件里数据抽象成二维表结构,然后提供hql语句供程序员查询文件数据。
|
create table stu1(id int,name string) row format delimited fields terminated by ' ';
| 创建stu1表,并指定分割符 空格。 | 此时,把外部数据导入hive,就可以正确查出数据了。
|
desc stu | 查看 stu表结构 |
|
create table stu2 like stu | 创建一张stu2表,表结构和stu表结构相同 | like只复制表结构,不复制数据 |
insert overwrite table stu2 select * from stu | 把stu表数据插入到stu2表中 | insert overwrite 可用于将select 查询出的数据插入到指定的表中或指定的目录下 比如:把查询结果存到本地指定的目录下, 执行:insert overwrite local directory '/home/stu' row format delimited fields terminated by ' ' select * from stu; 也可以将查询结果存到HDFS文件系统上 执行:insert overwrite directory '/stu' row format delimited fields terminated by ' ' select * from stu; 也可以将查询结果插入到多张表中 执行:from stu insert overwrite table stu1 select * insert overwrite table stu2 select *; |
alter table stu rename to stu2 | 为表stu重命名为stu2 |
|
alter table stu add columns (age int); | 为表stu增加一个列字段age,类型为int |
|
exit | 退出hive | 当退出hive后,我们可以尝试做这样的一件事: 而表名、表里有哪些字段,字段类型、哪张表存在哪个数据下等这些表信息,称之为hive的元数据信息。 知识点:hive的元数据信息不是存在hdfs上的,而是存在hive自带的derby关系型数据库里的。 即hive管理的数据是在hdfs上的,hive的元数据信息是存在关系型数据库里的。
上述问题出现的原因就是由于derby数据库引起的,这个数据库功能不完善,仅用于测试。 derby数据库存储hive元数据的方式:当在bin目录下进入hive时,derby数据会在bin目录下生成一个metastore_db目录,将元数据信息存在这个目录下。 当换个目录,比如在home 目录下hive时,derby又会在home目录下生成一个metastore_db目录,存储元数据信息。
解决办法:将默认使用的derby数据库换成mysql数据库
|
|
|
|
Hive基础指令--笔记
最新推荐文章于 2022-11-22 17:23:43 发布