Hive 基本教程

Hive SQL

Hive 笔记

Hive SQL 数据定义详解


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 DATABASEDBPROPERTIES 子句是从 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)