在配置单元表中有一些字符串,我使用转换方法替换一些字符,我的映射器脚本是这样的:
<?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
最佳答案
我在 here 中找到了答案.
写入文件系统的数据被序列化为文本,列由 ^A 分隔,行由换行符分隔。
从 Hive 0.11.0 开始,可以指定使用的分隔符,在早期版本中,它始终是 ^A 字符 (\001)
感谢所有看到这个问题的人。
关于sql - 为什么 HIVE 必须用 "\01"拆分字符串? [b4 0.11.0 是的,0.11.0之后可以指定],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20334363/