当前位置:   article > 正文

Hive DDL操作命令实验_头歌实践平台hive 表 dml 操作答案

头歌实践平台hive 表 dml 操作答案

教材第三章Hive 数据定义操作实验

一 对数据库的操作

1 查看Hive中现有的所有数据库
hive> show databases;
OK
default
说明:当前Hive中只有一个默认数据库defalut

2 查看当前数据库中的数据表hive> show tables;
OK
student
说明:数据库default就是默认的当前数据库


3 创建数据库
1)创建一个新的数据库sogou
hive> create database sogou;
OK

2)再次查看Hive中现有的所有数据库
hive> show databases;
OK
default
sogou
说明:当前hive中有默认数据库defalut和刚才新创建的数据库sogou;

3)再次尝试创建同名数据库sogou
hive> create database sogou;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Database sogou already exists
说明:报错提示数据库已经存在

4)用if not exists语法来创建数据库
hive> create database if not exists sogou;
OK
再次查看Hive中现有的所有数据库
hive> show databases;
OK
default
sogou
说明:Hive中现有的数据库没有发生变化;if not exists是数据库sogou不存在才创建,数据库sogou存在就不会执行create database命令

hive>  show databases like 's*';
OK
sogou

说明:如果数据库非常多的话,那么可以使用正则表达式匹配来筛选出需要的数据库名

5)查看hive数据库位于HDFS文件系统上的默认路径/user/hive/warehouse
新建一个XShell连接,在Linux终端执行命令:hadoop fs -ls -R /user/hive/warehouse
drwxr-xr-x   - root supergroup          0 2021-09-06 09:41 /user/hive/warehouse/sogou.db
说明:sogou.db是数据库sogou所对应的HDFS子目录,/user/hive/warehouse/是hive在HDFS上的数据库默认存储路

6)创建数据库,指定该数据库的描述信息
hive> create database sogou comment 'sogou test database';
OK

7)描述数据库的属性信息
hive> describe database sogou;
OK
sogou    sogou test database    hdfs://hive:8020/user/hive/warehouse/sogou.db    root    USER 


4 删除数据库
hive> drop database sogou;
OK
Time taken: 0.17 seconds
说明:删除刚才创建的数据库sogou
hive> show databases;
OK
default
说明:查看Hive中现有的所有数据库,发现sogou数据库已经没有了
hive> drop database default;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Can not drop default database)
说明:默认数据库default不允许删除(有点类似HBase的默认名字空间default也不允许删除)

强制删除数据,即使该数据库中存在数据表,要谨慎执行
hive> drop database if exists enterprise cascade;
说明:删除表命令的最后面加上关键字cascade,Hive会先删除数据库中的表再删除数据 库

二 对数据表的操作
1 查看当前有哪些表
hive> show tables;
OK
student
说明:Hive有当前数据库的概念,默认的当前数据库是default,所以默认会查看数据库default中的数据表

2 选择使用哪个数据库
1)使用默认数据库default作为Hive的当前数据库
hive> use default;
OK
说明:Hive默认的当前数据库本来就是default,可以不用执行use default
2)用if not exists语法来创建数据库sogou
hive> create database if not exists sogou;
OK
3)将数据库sogou设置为默认数据库
hive> use sogou;
OK
3 创建数据表
hive> create table test(id int);
OK
Time taken: 0.127 seconds
说明:在hive的当前数据库中创建一个数据表test,该表包含一个int型列字段id

4 查看数据表
1)hive> show tables;
OK
test
说明:查看hive当前数据库中的所有数据表,注意当前数据库为之前设置的sogou

2)hive> use default;
OK
说明:把hive当前数据库切换为默认数据库default

3)hive> show tables;
OK
student
说明:students是默认数据库default中的表,而之前创建的数据表test是位于自定义数据库sogou中

4)查看hive数据库位于HDFS文件系统上的目录
在Linux终端执行命令:hadoop fs -ls -R /user/hive/warehouse
rwxr-xr-x   - root supergroup          0 2021-09-06 10:20 /user/hive/warehouse/sogou.db
drwxr-xr-x   - root supergroup          0 2021-09-06 10:20 /user/hive/warehouse/sogou.db/test
说明:sogou.db是数据库sogou所对应的HDFS子目录,test是数据表test对应的子目录,数据库sogou中数据表test对应了该数据库的目录sogou.db的子目录test

5 尝试删除包含表的数据库
1)使用数据库sogou
hive> use sogou;
2)查看数据库中的表
hive> show tables;
OK
test

带正则表达式匹配条件的查看表命令  hive> show tables like 't*';
3)删除包含表的数据库
hive> drop database sogou;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database sogou is not
empty. One or more tables exist.)
说明:Hive不允许用户删除包含有表的数据库

4)强制删除包含表的数据库
hive> drop database sogou cascade;
OK
查看数据库,发现sogou数据已经被强制删除,连同其包含的表test也删除了
hive> show databases;
OK
default

制定指定数据库中的数据表 hive> show tables in default;
OK
student

5)hive> drop database if exists sogou;
OK
说明:if exists语句含义是如果sogou存在,就执行删除,如果不存在就什么都不做,避免 drop database命令报错

6 Hive的内部表(管理表)和外部表
1)创建内部表
创建数据库sogou
hive> create database if not exists sogou;
OK

使用数据库sogou
hive> use sogou;
OK

hive> create table test(id int);
OK
说明:Hive的create table命令默认创建的是内部表

查看当前数据库sogou中的表
hive> show tables;
OK
test

查看hive数据库位于HDFS文件系统上的默认路径/user/hive/warehouse
在Linux终端执行命令:hadoop fs -ls -R /user/hive/warehouse
drwxr-xr-x   - root supergroup          0 2021-09-07 10:01 /user/hive/warehouse/sogou.db
drwxr-xr-x   - root supergroup          0 2021-09-07 10:01 /user/hive/warehouse/sogou.db/test

查看表的元数据描述信息,从中可以看出表test的类型是Table Type:  MANAGED_TABLE
hive> describe formatted test;   

删除内部表
hive> drop table test;
OK
删除内部表test,查看表发现test表已被删除
hive> show tables;
OK

再次查看hive数据库位于HDFS文件系统上的默认路径/user/hive/warehouse
在Linux终端执行命令:hadoop fs -ls -R /user/hive/warehouse
drwxr-xr-x   - root supergroup          0 2021-09-07 10:05 /user/hive/warehouse/sogou.db
注意:删除内部表test,连同该内部表对应的子目录test也被删除了

删除内部表,内部表对应的HDFS目录和数据文件都会一并删除;因此多个内部表不能方便地共享目录和数据文件。

对内部表的不方便数据共享进行测试:

创建两个内部表student和student_1,使得两个表对应相同的HDFS目录路径/student
创建一个内部表student
hive>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/693671
推荐阅读
相关标签
  

闽ICP备14008679号