hive的列间隔需要在创建表的时候指定,通过 ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
来指定,上面是用,来间隔,
而默认情况下 hive使用\001做列的间隔(列间隔就是说在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的样子:
Image may be NSFW.
Clik here to view.
这是以 \001 默认值方式的结果:
Image may be NSFW.
Clik here to view.
已有 0人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐