HiveQL是Hive查询语言。和普遍使用的所有SQL方言一样,它不完全遵守任一种ANSISQL标准的修订版。HiveQL可能和MySQL的方言最接近,但是两者还是存在显著性差异的。Hive不支持行级插入操作、更新操作和删除操作。Hive也不支持事务。当然了,大部分的HiveQL还是很常见的。本篇首先介绍Hive中的数据库概念以及操作细节。
1 Hive中的数据库
hive中数据库的概念本质上仅仅是表的一个目录或者命名空间。然而,对于具有很多组和用户的大集群来说,这是非常有用的,因为这样可以避免表命名冲突。通常会使用数据库来将生产表组织成逻辑组。
如果用户没有显式指定数据库,那么将会使用默认的数据库default
通过下面语句创建一个数据库:
hive> CREATE DATABASE IF NOT EXISTS financials;
hive会为每个数据库创建一个目录。数据库中的表将会以这个数据库目录的子目录形式存储。但有一个例外就是default数据库中的表,因为这个数据库本身没有自己的目录。数据库所在的目录位于属性hive.metastore.warehouse.dir所指定的顶层目录之后,假设配置项的值是/hive/warehouse,那么当我们创建数据库financials时,hive将会对应地创建一个目录/hive/warehouse/financials.db。这里请注意,数据库的文件目录名是以.db结尾的。
上图除了红框处的其他目录都是默认数据库default里的表目录
我们可以通过如下的命令来修改这个默认的位置:
hive> CREATE DATABASE IF NOT EXISTS financials
> LOCATION '/user';
还可以为这个数据库增加一个描述信息,这样通过DESCRIBE DATABASE 命令就可以查看到该信息:
hive> CREATE DATABASE financials
> COMMENT 'Holds all financial tables';