hive的列间隔需要在创建表的时候指定,通过 ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
来指定,上面是用,来间隔,
而默认情况下 hive使用\001做列的间隔(列间隔就是说在hdfs中字段之间用什么符号间隔)
而工作中,最经常使用 \t方式间隔,原因就是间隔后在hdfs文件中存储的列间隔规范,用肉眼看很容易区分
哪里是哪里
看如下脚本,其中表
f_trademark_tmp_hdfs_ext_%CHINDAASDATE%
liuchengtmp1_%CHINDAASDATE%
f_markimage_tmp_hdfs_ext_%CHINDAASDATE%
都是用,间隔的, 如下创建表语句 无法增加字段间隔 ,创建好表后 字段间隔为默认 \001
create table ftrademarktmp_%CHINDAASDATE% as
select
a.markcode ,
a.appperson ,
a.addr ,
a.markname ,
trim(substr(a.typedetaildes,4000)) typedetaildes,
a.begindate ,
a.enddate ,
a.CHECKDATE ,
a.status ,
a.appdate ,
a.regdate ,
a.ZIPCODE ,
b.xiangmu_new ,
c.markimage ,
case when a.begindate is not null and a.enddate >= %current_date% and instr(hivenvl(a.status,'未知'),'无效')=0 then 'R商标'
when a.begindate is not null and instr(a.status,'无效')>0 or instr(a.status,'注销')>0 then '过期商标'
when a.enddate < %current_date% then '过期商标'
when a.begindate is not null and (instr(a.status,'无效')>0 or instr(b.xiangmu_new,'无效')>0) then '无效(被否)商标'
when a.begindate is null then 'TM商标'
else '未知'
end MARKTYPE_NEW
from f_trademark_tmp_hdfs_ext_%CHINDAASDATE% a
left outer join liuchengtmp1_%CHINDAASDATE% b
on a.markcode = b.markcode
left outer join f_markimage_tmp_hdfs_ext_%CHINDAASDATE% c
on a.markcode = c.markcode
order by a.appdate ;
如果好奇 Hive 用间隔后数据的样子,可以找到hive表对应的hdfs文件,然后拖到window下用
notepad++打开,如下
这是以,间隔的hive数据在hdfs的样子:
这是以 \001 默认值方式的结果: