对码当歌,猿生几何?

transform语句中使用php编写map-red脚本

transform语句中使用php编写map-red脚本

1、编写hql

-- 集群上php的执行环境
set mapred.cache.archives=hdfs://host:port/pathtophp/php.tgz#home;
set mapred.job.priority=VERY_HIGH;
-- 添加的本地文件
add file /pathtoscript/script.php;
SELECT
  transform(val1, val2,...)
 -- 列的分隔符
  ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
 -- 使用自定义脚本进行map-red处理
 USING 'home/work/php/bin/php -c home/work/php/etc/php.ini script.php'
 AS (newVal1, newVal2,...)
 -- 列的分隔符
  ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
FROM
  tbl;

2、编写php脚本

while (($line = fgets(STDIN)) !== false) {
    $arr = explode("\t", $line);
    // 此处是处理过程
    echo "{$arr[0]}\t{$arr[1]}\t...\n";
}

3、调试

可以使用如下方式调试自定义脚本

cat test.txt | php script.php

4、参考资料

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Transform