hive转义字符

CREATE TABLE escape (id STRING, name STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '"';

LOAD DATA LOCAL INPATH '/home/tianzhao/book/escape.txt'
OVERWRITE INTO TABLE escape;

escape.txt的内容是:
Joe"2\"3333
Hank"2\"3333

表没有转义,那么两个“都会当作字段分隔符,查询结果是:
select * from escape;
Joe 2\
Hank 2\


ALTER TABLE escape SET SERDEPROPERTIES ('escape.delim' = '\\'); 给表加上了转义字符\,\后面的字符会被转义,直接跳过,如果是分隔符不会被当作分隔符。查询结果是:
select * from escape;
Joe 2"3333
Hank 2"3333


CREATE TABLE escape2 (id STRING, name STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '"';

LOAD DATA LOCAL INPATH '/home/tianzhao/book/escape2.txt'
OVERWRITE INTO TABLE escape2;

escape2.txt 的内容是:
Joe"2"3333"44
Hank"2"3333"44
实际数据比表的字段要多。

select * from escape2;
Joe 2
Hank 2


ALTER TABLE escape2 SET SERDEPROPERTIES ('serialization.last.column.takes.rest' = 'true');
serialization.last.column.takes.rest 的意思是最后一个字段的内容是否包含那些多余的数据:
select * from escape2;
Joe 2"3333"44
Hank 2"3333"44

hive只支持单字节的分隔符,LazyStruct、LazySimpleSerDe里面可以看到hive如何序列化、反序列化的过程。

ALTER TABLE ctas_null_format1 SET SERDEPROPERTIES ('serialization.null.format'='\\N');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值