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的样子:
这是以 \001 默认值方式的结果:
相关推荐
eternityzzy 2020-07-19
archive 2020-05-28
zzjmay 2020-05-17
tugangkai 2020-05-09
archive 2020-07-30
成长之路 2020-07-28
taisenki 2020-07-05
tugangkai 2020-07-05
SignalDu 2020-07-05
zlsdmx 2020-07-05
tomson 2020-07-05
tugangkai 2020-07-04
tomson 2020-07-05
Zhangdragonfly 2020-06-28
genshengxiao 2020-06-26
成长之路 2020-06-26