目录
1. 建表语句
建表语句
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] -- 文件位置
Hive支持的字段类型
string
tinyint smallint int bigint
boolean
double
float
2. 建表
1. 普通表
默认数据类型为 testfile,不加 external 默认为内部表。
CREATE TABLE table1(id INT, name STRING)
ROW FORMAT DELIMITED '\t';
2. 外部表
需要指定数据位置,删除表只会删除表的元数据,不会删除HDFS数据。
CREATE EXTERNAL TABLE table1(id INT, name STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION 'hdfs://...';
3. 分区表
PARTITIONED BY 指定分区,可以有多个,每个分区在HDFS对应一个目录。
CREATE TABLE table1(id INT, name STRING) PARTITIONED BY (partition STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
2. 导入数据
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename
[PARTITION ('partition1', 'partition2' ...)]
set hive.exec.dynamic.partition=true
1. Load data
-- 导入HDFS数据到指定表
LOAD DATA INPATH '/tmp/app.log' OVERWRITE INTO TABLE cp_app;
-- 导入服务器数据到指定分区
LOAD DATA LOCAL INPATH '/tmp/app.log.1' OVERWRITE INTO TABLE cp_app PARTITION(`date`='');
2. Insert ... Select
-- 单条插入
insert overwrite table cp_app partition(`date`) select * from cp_app_log;
--多条插入
from cp_app_log
insert into table cp_app select ...
insert into table cp_api select ...
3. alter 分区操作
-- 添加分区(并加载数据到分区)
ALTER TABLE table_name ADD partition_spec [ LOCATION 'hdfs://...' ];
-- 删除分区
ALTER TABLE table_name drop partition (`partition_name`);