hive中使用transform小例子

                                      hive中使用transform小例子

代码:

    set mapred.cache.archives=hdfs://host:54310/app/ns/test/php.tgz#home;
     set HDFS_PHP=home/know/odp/php  -c home/know/odp/php/etc/php.ini;
    add file `pwd`/test.php;
     set mapred.reduce.tasks=10

     insert overwrite directory '${output}/output/'
     select transform(b.qid,b.time)
     using '${hiveconf:HDFS_PHP} test.php'
     as qid,endcode_qid
     from (
    
      select /*+mapjoin(pm)*/
        qb.qid as qid,qb.create_time as time
      from test_q qb 
      join test_a pm
      on (qb.dt='${dt}'and pm.dt='qid'  and pm.id=qb.qid )
     ) b  

 注意:

1.上面的例子在hive上是不能直接运行的,因为上面的例子我是写在shell中的

2.用transform 时防止集群本身没有环境可以把环境依赖包打包

   用 set mapred.cache.archives=hdfs://host:54310/app/ns/test/php.tgz#home; 

    #home指的是一个包的别名,因此

    set HDFS_PHP=home/usr/php/php -c home/know/odp/php/etc/php.ini;

 这里直接使用home

扫描二维码关注公众号,回复: 769011 查看本文章

3.如果是直接在shell 中运行hive -e 执行上述脚本,可能运行会报错

 hive 中的变量替换会与${hiveconf:} shell 中的变量替换冲突

 因此在shell中最好不用${hiveconf:}

4.home/know/odp/php 这个路径意思是说home是整个包的别名,/know/odp/php包被解压后的完整路径

     

    

猜你喜欢

转载自wangjin161.iteye.com/blog/2241693