HiveQL 是 Hive 的查询语言。和普遍使用的所有 SQL 方言一样,它不完全遵守任何一种 ANSI SQL 标准的修订版。HiveQL 可能和 MySQL 的方言最接近,但是两者还是存在显著性差异的。Hive 不支持行级插入操作、更新操作和删除操作。Hive 也不支持事务。
Hive 增加了在 Hadoop 背景下的可以提供更高性能的扩展,以及一些个性化的扩展,甚至还增加了一些外部程序。
Hive 中的数据库
Hive 中数据库的概念本质上仅仅是表的一个目录或者命名空间。然而,对于具有很多组和用户的大集群来说,这是非常有用的,因为这样可以避免表命名冲突。通常会使用数据库来将生产表组织成逮辑组。
如果用户没有显式指定数据库,那么将会使用默认的数据库 default。
创建数据库
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[MANAGEDLOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
Hive 创建数据库采用如上语句,通常情况下,为了避免库重名报错,语句会添加 IF NOT EXISTS 修饰符以保证在库名不重复时建立。
Hive 最初是只有 SCHEMA 表示库,在 Hive 0.6 开始才引入了 CREATE DATABASE,DBPROPERTIES 子句是从 Hive 0.7 版本时加入的,MANAGEDLOCATION 是 Hive 4.0.0 版本开始添加的。
假设创建一个 knowledgedict 库,语句如下:
CREATE DATABASE IF NOT EXISTS knowledgedict
修改数据库
用户可以使用 ALTER DATABASE 命令为某个数据库的 DBPROPERTIES 设置键-值对属性值,来描述这个数据库的属性信息。数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置。
ALTER (DATABASE|SCHEMA) database_name
SET DBPROPERTIES (property_name=property_value, ...); -- (Note: SCHEMA added in Hive 0.14.0)
ALTER (DATABASE|SCHEMA) database_name
SET OWNER [USER|ROLE] user_or_role; -- (Note: Hive 0.13.0 and later; SCHEMA added in Hive 0.14.0)
ALTER (DATABASE|SCHEMA) database_name
SET LOCATION hdfs_path; -- (Note: Hive 2.2.1, 2.4.0 and later)
ALTER (DATABASE|SCHEMA) database_name
SET MANAGEDLOCATION hdfs_path; -- (Note: Hive 4.0.0 and later)