HIve Hql语句
官网DDL(Data Definition Language 数据定义语言)
官网DML(Data Manipulation Language 数据操作语言)
001、DDL
符号解释:
( ):里面的参数选择一个作为此次命令参数。
[ ]: 里面的参数可选可不选。
| : 或
优化设置:
set hive.cli.print.current.db=true;:显示当前所在的数据库
- Database
创建
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
参数解释:
database|schema:选择此次创建的格式是什么
IF NOT EXISTS:如果不存在则创建,存在则忽略
comment: 设置描述信息
location:设置此次创建保存到其他HDFS目录,默认为:dfs://master:9000/user/hive/warehouse/database_name.db
with dbproperties(k=v,...):设置key=value形式的描述。
删除
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
参数解释:
database|schema:选择此次删除的格式是什么
IF EXISTS:如果存在则删除,不存在忽略
restrict:如果数据库中存在数据表,则不让删除数据库。默认选项
cascade:强制删除数据库,无论是否存在表
修改
ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...);
ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role;
ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path;
命令解释:
对面三条分别对应修改数据库的:
DBPROPERTIES:keyValue形式的描述;
owner:拥有着权限
location:在hdfs中的目录
查看
# 查看所有的database或者schemas
SHOW (DATABASES|SCHEMAS) [LIKE 'identifier_with_wildcards'];
参数解释:
database|schema:选择此次查看的格式是什么
like:支持模糊查询
# 查看指定的database或者schemas的详细信息
describe (DATABASES|SCHEMAS) [extended] db_name;
参数解释:
database|schema:选择此次查看的格式是什么
extended:查看创建时指定的dbproperties设置的属性。
切换数据库
USE database_name;
- Table
创建
# 001
create [external] table [if not exists] [db_name.]table_name
[(col_name data_type [comment col_comment], ...)]
[comment table_comment]
[partitioned by (col_name data_type [comment col_comment], ...)]
[clustered by (col_name, col_name, ...) [sorted by (col_name [asc|desc], ...)] into num_buckets buckets]
[row format row_format]
[stored as file_format]
[location hdfs_path]
[tblproperties(property_name=property_value, ...)];
参数解释:
* external:如果指定此参数,那么创建的表为外部表。
* if not exists:判断是否存在,如果不存在则创建,存在跳过。只判断表名而不校验里面的数据列。
* db_name.: 指定数据库,默认当前
* col_name data_type [comment col_comment], ...:列名 列的数据类型以及列的描述
* comment table_comment:表的描述
* partitioned by (col_name data_type [comment col_comment], ...:构建的分区。
# 此字段不能与上面的列重名并且不存放实际的数据内容,仅仅是分区的表示。
* clustered by (col_name, col_name, ...) [sorted by (col_name [asc|desc], ...)] into num_buckets buckets:构建分桶;
col_name:根据那一列构建分桶;
sorted by (col_name [asc|desc], ...):根据那一列进行排序以及排序规则
into num_buckets buckets:放置到几个桶内以及桶的名称
* row format row_format:指定分隔符,分隔符分类大概为以下几类:
# hive 建表的时候默认的分割符是'\001',若在建表的时候没有指明分隔符,load 文件的时候文件的分隔符需要是'\001';若文件分隔符不是'001',程序不会报错,但表查询的结果会全部为'null';
# 在使用下列参数之前需要开启指明format类型,一般使用delimited,即:row format delimited
[fields terminated by char]: 列的分隔符,一般使用','
[collection items terminated by char]: 数组的分隔符,一般使用'-'
[map keys terminated by char]: map的分隔符,一般使用':'
[lines terminated by char] : 行的分隔符,一般使用默认'\n'
[NULL DEFINED AS char] : 空指的格式化,一般使用''
serde serde_name [with serdeproperties(property_name=property_value, property_name=property_value,...)] :一些其余的配置,暂时没了解...
* stored as sequencefile|textfile|rcfile:修改文件格式
# 如果文件数据是纯文本,可以使用 stored as textfile。如果数据需要压缩,使用 stored as sequencefile。
# textfile是默认的文件格式,使用 delimited子句来读取分隔的文件。
* location hdfs_path:设置保存目录,默认为hive目录下
* tblproperties(property_name=property_value, ...): 这是key=value形式的描述
# 002
格式等同于001 最后可以加
[AS select_statement];
# 通过AS 查询语句完成建表:将子查询的结果存在新表里,有数据。一般用于中间表
# 003
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
LIKE existing_table_or_view_name
[LOCATION hdfs_path];
会创建结构完全相同的表,但是没有数据。
参数解释:同#001
删除
DROP TABLE [IF EXISTS] table_name [PURGE];
参数解释:
IF EXISTS: --
PURGE:数据不会放到回收箱,会直接删除
修改
# 001 修改表的属性
* ALTER TABLE table_name RENAME TO new_table_name; // 修改表名
* ALTER TABLE table_name SET TBLPROPERTIES table_properties; // 修改表key=value形式的描述
* ALTER TABLE table_name SET TBLPROPERTIES ('comment' = new_comment); // 修改表的描述,只能改和增不能删除
# 002 修改分区属性
* ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location'];
// 添加一个新的分区
partition_spec:就是创建表的时候的那个字段,key=value
* ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
// 修改分区名称
* ALTER TABLE table_name [PARTITION partition_spec] SET LOCATION "new location";
// 修改分区路径;如果不加分区则修改表的路径
* ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec [IGNORE PROTECTION] [PURGE];
// 删除分区信息
IGNORE PROTECTION: 强制删除
purge:不会放到回收箱,直接删除
* ALTER TABLE table_name_2 EXCHANGE PARTITION (partition_spec) WITH TABLE table_name_1;
// 转移分区,从一个表中转移到另一个表
# 003 修改列属性
*ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];
// 修改列的名称,列的属性,列的备注,以及列的位置和权限
*ALTER TABLE table_name [PARTITION partition_spec] ADD|REPLACE COLUMNS [CASCADE|RESTRICT]
// 添加或者替换列。如果使用replace替换的话,则会替换原表中的所有列。
查看
* SHOW TABLES [IN database_name] ['identifier_with_wildcards'];
// 查看所有表,后面可以指定数据库,还可以添加正则表达
* SHOW PARTITIONS [db_name.]table_name [PARTITION(partition_spec)];
// 查看某个表的所有分区信息。
* show tblproperties table_name;
// 查看表的key-value描述
* describe table_name;
// 查看表基本信息,后面可以追加参数:
// extended:查看所有信息,但是比较乱。
// formatted:也是查看所有,但是格式化了比较好看。
* SHOW COLUMNS (FROM|IN) table_name [(FROM|IN) db_name];
// 查看某个表的列数据