说明
建表语法
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]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement]
解释
*
EXTERNAL:外部的,hive中没有此关键创建的表为管理表
详见:hive教程:管理表(内部表)和外部表[IF NOT EXISTS]:如果不存在,就创建[(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]:存储文件类型 常用的存储文件类型:SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本)、RCFILE(列式存储格式文件)如果文件数据是纯文本,可以使用
STORED AS TEXTFILE。如果数据需要压缩,使用
STORED AS SEQUENCEFILE。
[LOCATION hdfs_path]:表存储在 HDFS 的位置,默认为当前 数据库 在 HDFS 的路径下[TBLPROPERTIES (property_name=property_value, ...)]:表的自定义属性[AS select_statement]:后跟select查询语句的结果建表
删除表
drop table 表名;
例子-管理表
数据文件
创建
vim /program/data.txt
内容如下:
1,李雷
2,韩梅梅
3,lucy
创建管理(内部)表
create table if not exists t_student( id int, name string
)
row format delimited fields terminated by ',';
上传文件
hadoop fs -put /program/data.txt /hive/warehouse/t_student
根据查询结果创建表
(查询的结果会添加到新创建的表中)
create table if not exists t_student2 as select id, name from t_student;
可在 hdfs 中查看 t_student2 的数据文件
根据查询表结构创建表
create table if not exists t_student3 like t_student;
查询表的类型
desc formatted t_student2;
删除表
drop table t_student2;
注意:删除表后,也会删除 hdfs 中的数据文件
例子-外部表
数据文件
vim /program/data.txt
内容如下:
1,李雷
2,韩梅梅
3,lucy
创建外部表
create external table t_teacher( id int, name string
)
row format delimited fields terminated by ',' ;
上传文件
hadoop fs -put /program/data.txt /hive/warehouse/t_teacher
删除表
drop table t_teacher;
删除元数据,不会删除 hdfs 中的数据文件
先有数据文件,后创建表
应用场景:其他部门(其他人)将文件上传到 hdfs 中,需要 我们用 hive 进行查询处理
一般创建 外部表,因为:
- 建表外部时,可以 指定数据文件路径
- 使用后 删除表 时,不会删除该数据文件
上传文件:
hadoop fs -put /program/data.txt /school
创建表:
create external table t_teacher( id int, name string)
row format delimited fields terminated by ','
location '/school';
然后通过 select 等语句进行查询分析