Hive数据定义
文章目录
Hive中的数据库
创建一个数据库:
命令: CREATE DATABASE financials;
如果数据库存在则会抛出一个错误信息,可以使用以下语句避免在这种情况下抛出错误信息:
命令:CREATE DATABASE IF NOT EXISTS financials;
在创建数据库的时候,后面添加 LOCATION
命令,可以修改数据库存储的默认位置。
命令:CREATE DATABASE IF NOT EXISTS financials
LOCATION '/my/preferred/directory';
在创建数据的时候,后面还可以添加 COMMIT
命令,为数据库增加一个描述信息,这样通过 DESCRIBE DATABASE <database>
命令就可以查看到该信息。 DESCRIBE DATABASE
命令也会显示出这个数据库所在的文件目录位置路径。
命令:CREATE DATABASE IF NOT EXISTS financials
COMMENT 'holds all financials tables';
查看描述命令:DESCRIBE DATABASE financials;
DESCRIBE DATABASE语句的输出中,这里使用了 master-server
来代表URI权限,也就是说应该是由文件系统的“主节点”(例如,HDFS中运行NameNode服务的那台服务器)的服务器名加上一个可选的端口号构成的(例如,服务器名:端口号这样的格式)。
如果用户执行的是伪分布式模式,那么主节点服务器名称就应该是 localhost
。对于本地模式,这个路径应该是一个本地路径,例如 file://user/hive/warehouse/financials.db
。
如果这部分信息省略了,那么Hive将会使用Hadoop配置文件中的配置项 fs.default.name
作为master-server
所对应的服务器名和端口号,这个配置文件可以在 $HADOOP HOME/conf
这个目录下找到。
需要明确的是,hdfs:/user/hive/warehouse/financials.db
和 hdfs://master-server/user/hive/ warehouse/financials.db
是等价的,其中 master-server
是主节点的DNS名和可选的端口号。
为了保持完整性,当用户指定一个相对路径(例如,some/relative/path)时,对于HDFS和Hive,都会将这个相对路径放到分布式文件系统的指定根目录下(例如,hdfs://user/)。然而,如果用户是在本地模式下执行的话,那么当前的本地工作目录将是some/relative/path的父目录。
为了脚本的可移植性,通常会省略掉那个服务器和端口号信息,而只有在涉及到另一个分布式文件系统实例(包括S3存储)的时候才会指明该信息。
用户还可以为数据库增加一些和其相关的键值对属性信息。
命令: CREATE DATABASE IF NOT EXISTS financials
WITH DBPROPERTIES('creator' = 'Mark Moneybags','date' = '2012-01-02');
查看描述命令:DESCRIBE DATABASE financials;
查看数据库目录:
命令:SHOW DATABASE;
如果数据库非常多,那么可以使用正则表达式来匹配筛选出需要的数据库名:
命令:SHOW DATABASE LIKE 'h.*';
Hive 会为每个数据库创建一个目录。数据库中的表将会以这个数据库目录的子目录形式存储。有一个例外就是default数据库中的表,因为这个数据库本身没有自己的目录。
数据库所在的目录位于属性 hive.metastore.warehouse.dir
所指定的顶层目录之后。假设用户使用的是这个配置项默认的配置,也就是 /user/hive/warehouse
,那么当我们创建数据库 financials 时,Hive将会对应地创建一个目录 /user/hive/warehouse/financials.db
。这里请注意,数据库的文件目录名是以.db结尾。
使用数据库:
命令: USE financials;
删除数据库:
命令: DROP DATABASE IF EXISTS financials;
默认情况下,Hive是不允许用户删除一个包含有表的数据库的。用户要么先删除数据库中的表,然后再删除数据库;要么在删除命令的最后面加上关键字 CASCADE
,这样可以使Hive 自