Hive DDL之数据库操作
1、Hive DDL
(1)Hive Data Definition Language
(2)create、delete、alter(更新)...管理相关的
2、Hive 数据抽象 / 结构
(1)database 数据库 ---- 对应HDFS一个目录
(2) table 表 ---- 对应HDFS一个目录
(3) partition 分区表 ---- 对应HDFS一个目录
(3) data 文件
(4) bucket 分桶 ---- 对应HDFS一个文件
(4) data 文件
3、创建数据库hivetest的语法
CREATE [REMOTE] (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[MANAGEDLOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
CREATE 关键字;[] 可有可无;(|)二选一;
hive> CREATE DATABASE hivetest;
hive> show databases;
查看在Hive在HDFS中默认的存储路径 /user/hive/warehouse
当然,这个路径是可以修改的。
hivetest库的组织结构是 /user/hive/warehouse/hivetest.db
除了我们自己创建的数据库hive、testzhang_db、hivetest,还有一个默认的default数据库,但在hdfs上并不体现出来。
[hadoop@hadoop000 ~]$ cd software/ [hadoop@hadoop000 software]$ mysql -uroot -proot mysql> show databases; mysql> use hadoop_hive; mysql> show tables; mysql> select * from DBS \G; DB_ID: 11 DESC: NULL DB_LOCATION_URI: hdfs://hadoop000:8020/user/hive/warehouse/hivetest.db NAME: hivetest OWNER_NAME: hadoop OWNER_TYPE: USER 5 rows in set (0.00 sec)
查看Hadoop里的文件,目前文件里都为空,因为hivetest.db是空的数据库
[hadoop@hadoop000 ~]$ hadoop fs -ls /user/hive/warehouse/hivetest.db
[hadoop@hadoop000 ~]$ hadoop fs -ls /user/hive/warehouse/hive.db
4、建议:使用以下语法创建数据库,防止报错。
[hadoop@hadoop000 bin]$ pwd /home/hadoop/app/hive-1.1.0-cdh5.15.1/bin [hadoop@hadoop000 bin]$ hive hive> CREATE DATABASE IF NOT EXISTS hive;
5、更改默认存储HDFS路径
在/test/location下是空的,因为在hive2的数据库中没有表。
hive> CREATE DATABASE IF NOT EXISTS hive2 LOCATION '/test/location'; OK Time taken: 0.012 seconds
mysql> select * from DBS \G; *************************** 3. row *************************** DB_ID: 4 DESC: NULL DB_LOCATION_URI: hdfs://hadoop000:8020/test/location NAME: hive2 OWNER_NAME: hadoop OWNER_TYPE: USER
6、使用DBPROPERTIES
hive> CREATE DATABASE IF NOT EXISTS hive3 > WITH DBPROPERTIES('creator'='jieqiong'); OK Time taken: 0.01 seconds hive> desc database hive; OK hive hdfs://hadoop000:8020/user/hive/warehouse/hive.db hadoop USER Time taken: 0.192 seconds, Fetched: 1 row(s) hive> desc database hive2; OK hive2 hdfs://hadoop000:8020/test/location hadoop USER Time taken: 0.011 seconds, Fetched: 1 row(s) hive> desc database hive3; OK hive3 hdfs://hadoop000:8020/user/hive/warehouse/hive3.db hadoop USER Time taken: 0.008 seconds, Fetched: 1 row(s) hive> desc database extended hive3; OK hive3 hdfs://hadoop000:8020/user/hive/warehouse/hive3.db hadoop USER {creator=jieqiong} Time taken: 0.01 seconds, Fetched: 1 row(s)
7、目前阶段的命令行,我在哪个数据库里?
(1)所以目前所处的库是default数据库
hive> show databases; OK default hive hive2 hive3 hivetest testzhang_db Time taken: 0.153 seconds, Fetched: 6 row(s) hive> set hive.cli.print.current.db; hive.cli.print.current.db=false hive> set hive.cli.print.current.db=true; hive (default)>
8、清屏
hive (default)> !clear;
9、切换数据库
hive (default)> use hivetest; OK Time taken: 0.026 seconds hive (hivetest)>
10、展现数据库中的表
hive (hivetest)> show tables; OK Time taken: 0.051 seconds
11、删除空的数据库
hive (testzhang_db)> show databases; OK default hive hive2 hive3 hivetest testzhang_db Time taken: 0.008 seconds, Fetched: 6 row(s) hive (testzhang_db)> show tables; OK helloworld Time taken: 0.013 seconds, Fetched: 1 row(s) hive (testzhang_db)> drop database hives; FAILED: SemanticException [Error 10072]: Database does not exist: hives hive (testzhang_db)> drop database hive3; OK Time taken: 0.113 seconds hive (testzhang_db)> drop database hivetest; OK Time taken: 0.024 seconds hive (testzhang_db)>
12、查找匹配条件的数据库
(1)以hive开头的数据库
hive (testzhang_db)> show databases like 'hive*'; OK hive hive2 Time taken: 0.011 seconds, Fetched: 2 row(s)
13、删除非空数据库(工作中一定不要用!!)
(1)删除后,依旧是以hive (testzhang_db)> 显示,没关系的。
hive (testzhang_db)> drop database testzhang_db CASCADE;