关于#macro宏定义

上一篇 / 下一篇  2011-12-07 21:17:18 / 个人分类:hadoop/hive

上周忘了写博客了,以前说要把#macro解释一下的。
其实#macro这种宏定义并不是标准的sql,是他们部署的一种解析模板,当执行macro的时候就调用模板去解析,不只是sql里面可以这么用,shell或者其他的语言里都可以这么用,但是这种用法已经减少了,自从师娘推代码规范后就用得少了。其实差不多所有的macro都可以用临时表实现,还不用去解析调用的。其实从process里我们可以看出每次执行到macro的时候都是macro的解析代码。
比如说:
#macro($isnull)user_id is null or length(user_id)='0' #select case when $isnull then mid else user_id end as uid from dual;
真正真正执行的时候其实解析成
s
elect case when user_id is null or length(user_id)='0' then mid else user_id end as uid from dual;
也就是说macro并不会优化代码的执行,只能减少你的代码行数,但是不同的宏定义之间却存在着冲突的危险,所以更推荐使用中间表的写法。



TAG:

 

评分:0

我来说两句

日历

« 2024-05-10  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 36532
  • 日志数: 15
  • 建立时间: 2011-09-30
  • 更新时间: 2012-03-27

RSS订阅

Open Toolbar