HiveSQL分区-DML

2018-09-13  本文已影响0人  MR_ChanHwang

分区

创建分区表

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。

上一篇下一篇

猜你喜欢

热点阅读