hive表中有一些字符串,我使用transform方法替换一些char,我的mapper脚本如下:
<?php
$strFrom = "\7";
$strTo = "\1"; // "|" it works well
$fd = fopen("php://stdin", "r");
while($line = fgets($fd)){
$outStr = str_replace($strFrom, $strTo, $line);
print $outStr;
}
fclose($fd);
我的hive sql是这样的:
select transform (value)
using 'home/php/bin/php -c home/php/etc/php.ini replace.php'
as (v1 string)
from test_tbl
实际上我尝试replace string from "\7" to "\1",但我发现它似乎正确替换,但它只输出第一列。像这样的一个输入:
a\7b\7c\7d
然后输出如下:
a
是的,只有一栏!
如果我将其替换为“|”,则输出:
a|b|c|d
所以我很困惑,为什么hive必须用“\ 1”分割字符串?我怎么能禁止它?我只想得到:
a\1b\1c\1d
答案 0 :(得分:1)
我在here找到了答案。
写入文件系统的数据被序列化为文本,其中列由^ A分隔,行由换行符分隔。
从Hive 0.11.0开始,可以指定使用的分隔符,在早期版本中,它始终是^ A字符(\ 001)
感谢所有看过这个问题的人。