Hive数据库操作

来源:互联网 发布:淘宝帮忙制作视频 编辑:程序博客网 时间:2024/06/04 19:06

Hive部署完成后我们就要来使用了

一、数据库创建

CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name  [COMMENT database_comment]  [LOCATION hdfs_path]  [WITH DBPROPERTIES (property_name=property_value, ...)];
  • 1
  • 2
  • 3
  • 4
  • 5

我们可以按照官网给出的格式来创建数据库 
1、创建一个最简单的数据库

hive> create database IF NOT EXISTS hive;OKTime taken: 0.333 seconds
  • 1
  • 2
  • 3

查看

hive> show databases;OKdefaulthiveTime taken: 0.022 seconds, Fetched: 2 row(s)
  • 1
  • 2
  • 3
  • 4
  • 5

查看hive在HDFS上的目录

[root@hadoop001 soft]# hadoop fs -ls /user/hive/warehouse/Found 1 itemsdrwxr-xr-x   - root root          0 2017-09-16 12:01 /user/hive/warehouse/hive.db
  • 1
  • 2
  • 3

2、创建数据库时给数据库加上注释,指定数据库在HDFS上存储的位置,数据库属性

hive>create database IF NOT EXISTS hive2      COMMENT 'This is my frist hiveDB'    LOCATION '/ruoze/db/'    WITH DBPROPERTIES ('creator'='Bob','date'='2017-08-17');
  • 1
  • 2
  • 3
  • 4

查看hive2 在HDFS上的位置

[root@hadoop001 soft]# hadoop fs -ls  /ruoze/db/
  • 1

可以看到当我们创建数据库时指定了数据库存储位置后,在HDFS上并没有hive2.db这样的文件。 
接下来我们在hive2这个数据库当中创建一个表

hive> use hive2;OKTime taken: 0.048 secondshive> create table hive_table(id int );OKTime taken: 1.005 seconds
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

再来执行hadoop fs -ls /ruoze/db/看看

[root@hadoop001 soft]# hadoop fs -ls  /ruoze/db/Found 1 itemsdrwxr-xr-x   - root root          0 2017-09-16 12:23 /ruoze/db/hive_table
  • 1
  • 2
  • 3

所以我们不采用默认的数据库存储路径(/user/hive/warehouse/)后,我们指定的数据库存储路径可以理解为一个数据库。

二、查看数据库的属性值 
上面我们创建数据库时为数据库添加了COMMENT 、LOCATION 、WITH DBPROPERTIES信息,那么这些信息在哪里查看呢?

在这里就要说一下hive的数据了 
hive的数据分两种,一种是data,一种metadata(元数据) 
data存储在HDFS 
metadata存储在MySQL 
我们为数据库添加的附加信息就是存储在mysql当中。 

无论是在hive当中创建数据库还是表,在HDFS上都有与之对应的目录存在 

mysql> select * from DBS \G;*************************** 1. row ***************************          DB_ID: 1           DESC: Default Hive databaseDB_LOCATION_URI: hdfs://mycluster/user/hive/warehouse           NAME: default     OWNER_NAME: public     OWNER_TYPE: ROLE*************************** 2. row ***************************          DB_ID: 11           DESC: NULLDB_LOCATION_URI: hdfs://mycluster/user/hive/warehouse/hive.db           NAME: hive     OWNER_NAME: root     OWNER_TYPE: USER*************************** 3. row ***************************          DB_ID: 16           DESC: This is my frist hiveDBDB_LOCATION_URI: hdfs://mycluster/ruoze/db           NAME: hive2     OWNER_NAME: root     OWNER_TYPE: USER3 rows in set (0.00 sec)ERROR:No query specified
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

在DBS当中可以看到hive2的COMMENT、LOCATION 
hive2的WITH DBPROPERTIES信息存储在DATABASE_PARAMS

mysql> select * from DATABASE_PARAMS \G;*************************** 1. row ***************************      DB_ID: 16  PARAM_KEY: creatorPARAM_VALUE: Bob*************************** 2. row ***************************      DB_ID: 16  PARAM_KEY: datePARAM_VALUE: 2017-08-172 rows in set (0.00 sec)ERROR:No query specified
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

三、删除数据库 
官网删除数据库语法格式

DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
  • 1

删除hive数据库(里面没有表存在)

hive> drop database if exists hive;OKTime taken: 0.477 seconds
  • 1
  • 2
  • 3

删除hive2数据库(里面存在表hive_table)

hive> drop database if exists hive2;FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database hive2 is not empty. One or more tables exist.)
  • 1
  • 2

此时会报错,因为hive2并不是一个空数据库,如果想删除成功 
就要加CASCADE(级联)关键字

hive> drop database if exists hive2 CASCADE;OKTime taken: 2.156 seconds
原创粉丝点击