如何将textinputformat.record.delimiter重置为hive cli / beeline中的默认值?

时间:2017-03-08 13:19:03

标签: hadoop mapreduce hive hiveql

println设置为非默认值,对于加载多行文本非常有用,如下面的演示所示。
但是,我没有在不退出cli的情况下将此参数设置回其默认值并重新打开它。

以下选项均无效(或其他一些试验)

textinputformat.record.delimiter

有什么想法吗?

由于

演示

set textinputformat.record.delimiter='\n';
set textinputformat.record.delimiter='\r';
set textinputformat.record.delimiter='\r\n';
set textinputformat.record.delimiter='
';

reset;

NewLine被解释为记录分隔符,导致插入2条记录

create table mytable (mycol string);
insert into mytable select concat('Hello',unhex('A'),'world');    
select concat('>>>',mycol,'<<<') as mycol from mytable;
+-------------+
|    mycol    |
+-------------+
| >>>Hello<<< |
| >>>world<<< |
+-------------+

整个文本作为单个记录插入

set textinputformat.record.delimiter='\0';

truncate table mytable;
insert into mytable select concat('Hello',unhex('A'),'world');    
select concat('>>>',mycol,'<<<') as mycol from mytable;

尝试将分隔符更改回换行符

+----------+
|  mycol   |
+----------+
| >>>Hello |
| world    |
| <<<      |
+----------+

仍然得到相同的结果

set textinputformat.record.delimiter='\n';

truncate table mytable;
insert into mytable select concat('Hello',unhex('A'),'world');    
select concat('>>>',mycol,'<<<') as mycol from mytable;

2 个答案:

答案 0 :(得分:1)

您检查过“textinputformat.record.delimiter”变量状态吗?它真的改变了吗?你可以在没有任何价值的情况下调用set textinputformat.record.delimiter
如果它已被更改但无效,您肯定可以在问题跟踪器中创建问题。作为将分隔符参数设置回默认值的解决方法,您可以尝试RESET命令。它会将所有属性重置为默认值,尽管此解决方案可能对您的情况不可接受。

答案 1 :(得分:1)

使用unicode alt + A或\ u0001作为delimer。