分区
创建分区表
CREATE TABLE psn5 (
id int,
name string,
likes ARRAY <string>,
address MAP <string,string>
)
PARTITIONED BY (sex string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':';
以性别分区;分区字段不可与表列名重复!
载入分区表数据
介绍load-data:Hive-DML
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] [INPUTFORMAT 'inputformat' SERDE 'serde'] (3.0 or later)
load data local inpath '/root/data' into table psn5 partition (sex='boy');
重新填充假数据
cp data data1
并将id改为4,5,6。
load data local inpath '/root/data1' into table psn5 partition (sex='girl');
查询分区数据
SELECT *
FROM psn5
WHERE sex='boy';
添加分区
ALTER
TABLE psn5
ADD
PARTITION (sex='weizhi');
删除分区
ALTER TABLE psn5
drop PARTITION (sex='boy');
删除分区,对应的数据也被删除
创建多字段分区
CREATE TABLE psn6 (
id int,
name string,
likes ARRAY <string>,
address MAP <string,string>
)
PARTITIONED BY (sex string,age int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':';
实际HDFS目录会按照分区先后来创建文件夹;分区在后面的文件夹在前一个文件夹中。
删除多字段分区
ALTER
TABLE psn6
DROP PARTITION (sex='boy');
直接会删除指定的分区,不受之后的分区键影响。
DML
load data inpath '/user/data1' into table psn1;
若对应的数据文件目录在HDFS中,则会将文件移动至表数据目录。
若对应的数据文件目录是本地文件,则会复制上传。
若本身已经存在data,再次上传data,则会生成data_copy_1。