hive 字段间隔的一些说明

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的样子:


hive 字段间隔的一些说明
 

这是以 \001 默认值方式的结果:


hive 字段间隔的一些说明
 

相关推荐