针对hive的rcfile、textfile、SequenceFile 三种文件类型的,单分隔符和多分隔符的测试
一共六情况:
===========================================================================
第一种:
《rcfile 单分隔符》
create table hive_yl06.tcl_sing_rcfile(
city_name STRING comment '市名称',
city_code varchar(10) comment '市编码'
) comment 'tcl_sing_rcfile'
row format delimited fields terminated by '\t'
stored as rcfile;
insert into hive_yl06.tcl_sing_rcfile(city_name,city_code) values('111111111111','22222222222');
结论是:rcfile 单分隔符 可以插入成功(不可以load形式添加数据)
第二种(1):
《rcfile 多隔符(分隔符为\u0005\u0005\u0005) 序列化使用org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe》
create table hive_yl06.tcl_mul_rcfile(
city_name STRING comment '市名称',
city_code STRING comment '市编码'
) comment 'tcl_mul_rcfilee'
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
WITH SERDEPROPERTIES ("field.delim" = "\u0005\u0005\u0005")
stored as rcfile;
insert into hive_yl06.tcl_mul_rcfile(city_name,city_code) values('111111111111','22222222222');
结论是: 不行
第二种(2):
《rcfile 多隔符(分隔符为@@@) 序列化使用org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe》
create table hive_yl06.tcl_mul_2_rcfile(
city_name STRING comment '市名称',
city_code STRING comment '市编码'
) comment 'tcl_mul_2_rcfile'
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
WITH SERDEPROPERTIES ("field.delim" = "@@@")
stored as rcfile;
insert into hive_yl06.tcl_mul_2_rcfile(city_name,city_code) values('111111111111','22222222222');
结论是: 不行
第三种(1):
《rcfile 多隔符 序列化使用org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe》
create table hive_yl06.tcl_mul_rcfile(
city_name STRING comment '市名称',
city_code STRING comment '市编码'
) comment 'tcl_mul_rcfilee'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe'
WITH SERDEPROPERTIES ("field.delim" = "\u0005\u0005\u0005")
stored as rcfile;
insert into hive_yl06.tcl_mul_rcfile(city_name,city_code) values('111111111111','22222222222');
结论是: 可以(但是不能以load形式添加数据)
第三种(2):
《rcfile 多隔符 序列化使用org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe》
create table hive_yl06.tcl_mul_3_rcfile(
city_name STRING comment '市名称',
city_code STRING comment '市编码'
) comment 'tcl_mul_2_rcfile'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe'
WITH SERDEPROPERTIES ("field.delim" = "@@@")
stored as rcfile;
insert into hive_yl06.tcl_mul_3_rcfile(city_name,city_code) values('111111111111','22222222222');
结论是:可以(但是不能以load形式添加数据)
第四种:
《textfile 多隔符 序列化使用org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe》
create table hive_yl06.tcl_mul_4_rcfile(
city_name STRING comment '市名称',
city_code STRING comment '市编码'
) comment 'src_bug_test_rcfile'
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
WITH SERDEPROPERTIES ("field.delim" = "\u0005\u0005\u0005")
stored as textfile;
insert into hive_yl06.tcl_mul_4_rcfile(city_name,city_code) values('111111111111','22222222222');
结论是:可以(可以load形式添加数据,但是数据不对)
===========================================================
SequenceFile 本身不支持load
第五种:
《 SequenceFile 单分隔符》
create table hive_yl06.tcl_sf_1_SequenceFile(
city_name STRING comment '市名称',
city_code varchar(10) comment '市编码'
) comment 'tcl_sig_1_rcfile'
row format delimited fields terminated by '\t'
stored as SequenceFile;
insert into hive_yl06.tcl_sf_1_rcfile(city_name,city_code) values('111111111111','22222222222');
结论是:可以(不可以load形式添加数据)
第六种:
《 SequenceFile 多分隔符 序列化使用org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe》
create table hive_yl06.tcl_sf_2_SequenceFile(
city_name STRING comment '市名称',
city_code STRING comment '市编码'
) comment 'tcl_sf_2_rcfile'
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
WITH SERDEPROPERTIES ("field.delim" = "\u0005\u0005\u0005")
stored as SequenceFile;
insert into hive_yl06.tcl_sf_2_rcfile(city_name,city_code) values('111111111111','22222222222');
结论是:可以(不可以load形式添加数据)
===========================================================
insert overwrite table tcl_1_rcfile select * from tcl_before_rcfile;
insert table tcl_mul_3_rcfile select * from tcl_mul_4_rcfile;
结论:
① 对于rcfile、SequenceFile 两种文件类型无论是单分隔符还是多分隔符,都不支持load添加数据;
② 对于rcfile的多分隔符,创建表时的序列化类要用org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe 而不是org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe;否则插入不进去;
③ 对于多分隔符的textfile ,虽然能load进表但是数据时错位的。