sql - 为什么 HIVE 必须用 "\01"拆分字符串? [b4 0.11.0 是的,0.11.0之后可以指定]

标签 sql string hadoop hive

在配置单元表中有一些字符串,我使用转换方法替换一些字符,我的映射器脚本是这样的:

<?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/

相关文章:

sql - 在 postgres 中选择时间戳记录

c - 在C中使用字符串数组的数组来解析文本文件

c++ - 替换 vector 字符串中的字符串

hadoop - 在虚拟盒集群上部署CDH5?

php - 将 SQL 数据库中的数据显示为拓扑

php - 如何防止在处理行时选择该行?

sql - 在关系数据库中存储大量点(x,y,z)

ruby - 在 Ruby 中拆分具有多个分隔符的字符串

java - 无法验证 serde : org. openx.data.jsonserde.jsonserde

hadoop - 无法使用Sqoop导入配置单元