为什么HIVE必须用“\ 01”分割字符串? [b4 0.11.0是,你可以指定0.11.0之后]

时间:2013-12-02 17:34:03

标签: sql string hadoop hive

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

1 个答案:

答案 0 :(得分:1)

我在here找到了答案。

  • 写入文件系统的数据被序列化为文本,其中列由^ A分隔,行由换行符分隔。

  • 从Hive 0.11.0开始,可以指定使用的分隔符,在早期版本中,它始终是^ A字符(\ 001)

感谢所有看过这个问题的人。