【问题标题】:How to reset textinputformat.record.delimiter to its default value within hive cli / beeline?如何在 hive cli/beeline 中将 textinputformat.record.delimiter 重置为其默认值?
【发布时间】:2026-01-20 06:05:02
【问题描述】:

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

以下选项均无效(也没有其他一些试验)

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

reset;

有什么想法吗?

谢谢

演示

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

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

+-------------+
|    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;

仍然得到相同的结果

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

【问题讨论】:

    标签: hadoop mapreduce hive hiveql


    【解决方案1】:

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

    【讨论】:

    • 是的,我做到了,它似乎被改变了。您可以在“以下选项均无效”列表中看到reset
    【解决方案2】:

    使用 unicode alt+A 或 \u0001 作为分隔符。

    【讨论】:

    • SOH 既不是 LF 也不是 CR,无论如何它都没有意义,因为这是默认的字段分隔符。