hive 建表多分隔符单分隔符以及对于的文件类型(rcfile、textfile、SequenceFile)的使用说明

针对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进表但是数据时错位的。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值