1、数据准备:
#创建测试hive数据库
create database hive_test;
#创建hive数据表,指定一个分区
CREATE TABLE testa (
id INT,
name string,
area string
) PARTITIONED BY (create_time string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;
2、准备数据,复制数据直到超过100M,本次测试为100.6M,数据内容如下:
1,fish1,SZ
2,fish2,SH
3,fish3,HZ
4,fish4,QD
5,fish5,SR
3、本地数据导入到hive中并创建一个分区:
LOAD DATA LOCAL INPATH '/home/work/hive_load_out/hive_testA.txt' INTO TABLE testA PARTITION(create_time='2020-05-11');
此时txt数据格式,100.6M引入产品系统后变成97.71KB,符合预期。
但是该产品一般引入的hive数据格式为ORC或者PARQUET格式,因此尝试将现有txt格式数据转成ORC或者PARQUET数据,本次测试为PARQUET数据,转成ORC数据步骤一样:
#重新创建测试表
CREATE TABLE testb (
id INT,
name string,
area string
) PARTITIONED BY (create_time string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS PARQUET;
#将testa中数据转入到testb,由于testa的数据带有分区,因此指定 select 字段列表的话,字段太多太累了,找到一种把分区字段从结果集排除的方法
set hive.support.quoted.identifiers=none;
insert into testb PARTITION(create_time='2020-05-12') select `(create_time)?+.+` from testa where create_time='2020-05-11';
导入后发现数据大小变成了9.9M,对于测试数据来讲,数据太小,因此尝试加入数据:
#持续尝试新增数据
insert into testb PARTITION(create_time='2020-05-12') select `(create_time)?+.+` from testa where create_time='2020-05-11';
这样数据格式就变成parquet了