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包被解压后的完整路径