Hive脚本中切勿使用/**/注释

Posted dfx339

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive脚本中切勿使用/**/注释相关的知识,希望对你有一定的参考价值。

Hive脚本中切勿使用/**/注释

 

Hive脚本的注释目前好像只有 -- ,我之前在做初版数据的时候 使用NotePad++ 习惯性的有时候注释会写成 /**/ ,然后就引发了问题

脚本上传到hue,加入调度,调度正常执行 不报错,但是应该有的数据却为空!!! 奇了怪了.... (反复执行了好多遍,都没有数据,脚本都没有问题呀  一段一段copy执行的时候都正常的)

再仔细看看 ,原因问题出在注释上,在hive脚本里面我不小心留了两行注释 格式为 /* 注释内容 */ 的内容

造成的结果:  /*注释内容*/ 前面的脚本内容正常执行,/* 注释内容*/ 后面的脚本内容统统没有执行,所以很多该有的数据都为空了....

 

错误脚本内容示例:

insert.hql

use bgda_hw_stg;
set hive.auto.convert.join=false;

drop table testdata ;
create table testdata(
createUser string
,createTime string
,updateUser string
,updateTime string
) row format delimited fields terminated by ‘01‘;

insert overwrite table testdata
select 
,‘小仙女‘ as createUser
,cast(from_unixtime(unix_timestamp(),‘yyyy-MM-dd HH:mm:ss‘) as string)as createTime 
,‘小天使‘ as updateUser
,‘‘ as updateTime
;

/* 将T+1数据插入testdata_bak表中 testdata_bak表在初始化的时候已经创建,目前已存在于bgda_hw_stg库中*/
insert into testdata_bak select * from testdata;

  

以上脚本信息中:由于注释方式

/* 将T+1数据插入testdata_bak表中 testdata_bak表在初始化的时候已经创建,目前已存在于bgda_hw_stg库中*/

 导致 insert into testdata_bak select * from testdata; 这段hql 不会被执行,但是整个调度也不会报错!!!

所以这个一定要注意一下哦,注释方式一定要正确的写,如果发现脚本执行没有报错 但是该有的数据没有 可以查看以下脚本中是否存在不规则的注释...(不过大部分数据错处应该是及脚本逻辑问题哈哈哈)

 

正确示例:

insert.hql

use bgda_hw_stg;
set hive.auto.convert.join=false;

drop table testdata ;
create table testdata(
createUser string
,createTime string
,updateUser string
,updateTime string
) row format delimited fields terminated by ‘01‘;


insert overwrite table testdata
select 
,‘小仙女‘ as createUser
,cast(from_unixtime(unix_timestamp(),‘yyyy-MM-dd HH:mm:ss‘) as string)as createTime 
,‘小天使‘ as updateUser
,‘‘ as updateTime
;

-- 将T+1数据插入testdata_bak表中 testdata_bak表在初始化的时候已经创建,目前已存在于bgda_hw_stg库中
insert into testdata_bak
select * from testdata;

 

以上是关于Hive脚本中切勿使用/**/注释的主要内容,如果未能解决你的问题,请参考以下文章

常用python日期日志获取内容循环的代码片段

vbscript 各种自定义代码片段 - 有关详细信息,请参阅注释

如何在 Toad for Oracle 中使用自定义代码片段?

PIG 脚本、Hive 查询和相应 MapReduce 代码的包装代码

Hive 表注释显示乱码问题,GC 方式

Hive 字段和表注释乱码