HIVE基础表操作
一,建表&修改表(DDL)
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] 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]
| STORED BY 'storage.handler.class.name' [ WITH SERDEPROPERTIES (...) ]
]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement]
使用LIKE关键字创建一个与已有表模式相同的新表:
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
LIKE existing_table_or_view_name
[LOCATION hdfs_path]
表重命名
ALTER TABLE table_name RENAME TO new_table_name
执行前需要先切换数据库,执行此命令在表名前加数据库名会报错。
添加分区
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION (partition_col = partition_col_value[, partition_col = partiton_col_value, ...])
执行前需要先切换数据库,执行此命令在表名前加数据库名会报错。
外部表添加分区时需要加上location关键字,指定分区所在目录。
分区重命名
ALTER TABLE table_name PARTITION (partition_col = partition_col_value...) RENAME TO PARTITION (partition_col = partition_col_value...)
执行前需要先切换数据库,执行此命令在表名前加数据库名会报错。
删除分区
ALTER TABLE table_name DROP [IF EXISTS] PARTITION (partition_col = partition_col_value...)
执行前需要先切换数据库,执行此命令在表名前加数据库名会报错
修改列
(1)修改列名/类型/位置/注释
ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]
(2)新增/替换列/删除某一列(增加的列默认放在最后面)
ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
SHOW语句
(1)列出数据库:SHOW DATABASES;
(2)列出某数据库中所有表:SHOW TABLES [IN database_name];
(3)查看建表语句:SHOW CREATE TABLE ([db_name.]table_name);
(4)列出某表中所有分区:SHOW PARTITIONS table_name;
(5)列出所有函数:SHOW FUNCTIONS;
DESCRIBE语句
(1)显示数据库定义:DESCRIBE DATABASE db_name;
(2)显示表结构:DESCRIBE table_name;
二,数据操纵语言(DML)
加载文件入表
load data [local] inpath "file_path" into table tablename [partition(partition_column1 = value1 [,partition_column1 = value1...])]
包含local关键字则从本地文件系统加载文件入表,否则从hdfs加载文件入表。
查询结果插入表
insert into/overwrite table tablename [partition(partition_column1 = value1 [,partition_column1 = value1...])] SELECT ... FROM ...
关键字into 与overwrite的区别:使用overwrite会覆盖原表(分区)数据。
查询结果写文件系统
INSERT OVERWRITE [LOCAL] DIRECTORY directory1 SELECT ... FROM ...
使用这种方式可从表里查询需要的数据写入本地文件系统或hdfs的文件里。
Union
select_statement UNION ALL select_statement UNION ALL select_statement ...
将多个查询结果合并到一个结果集中,每个select_statement的列个数以及名字必须保持相同,且需加个别名。
Hive0.13版本以前不支持where子句中的子查询,它只允许子查询出现在SELECT语句的FROM子句中,SQL常用的exist/in子句需要改写。
hive在0.13版本后已经支持in和not in子查询