选项卡空间和新行

gorkyyrv  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(404)

我试图从where子句上的配置单元表过滤中选择具有特殊字符的数据,特别是tab和换行符。我试过了
我试过了 like '%\\n%' , like '%\\t%' , like '%hex(9)%' 等等,但他们似乎不工作。
还试图创建一个虚拟表来插入这样的数据,但效果不太好。请帮帮我。

r3i60tvu

r3i60tvu1#

使用 rlike '\\t' 用于制表符和 rlike '\\n' 对于换行符(使用双反斜杠):

hive> select 'a\tb' rlike '\\t'; --tabs
OK
true
Time taken: 0.075 seconds, Fetched: 1 row(s)

对于新词:

hive>  select 'a\nb' rlike '\\n'; --newline
OK
true
Time taken: 0.454 seconds, Fetched: 1 row(s)

使用换行符和制表符插入值的示例:

create table test_special_chars as  
        select 'a\nb' as a union all select 'a\tb';

换行是很棘手的。问题是,默认情况下,表是文本文件,换行符通常被解释为新行,这就是为什么选中时,它会返回一个额外的行:

select * from test_special_chars;
OK
a
b
a       b

实际上,insert of在文本文件中创建了额外的行。事情就是这样。
但如果创建orc表:

create table test_special_chars stored as ORC as  select 'a\nb' as a union all select 'a\tb';

它工作正常,因为orc不是文本格式,可以存储换行:

select count(*) from test_special_chars where a rlike '\\n';

退货:

OK
1
Time taken: 40.564 seconds, Fetched: 1 row(s)

当你 select a from test_special_chars where a rlike '\\n' ,在屏幕上它也将显示为两行,在选择时解释,但orc和文本文件之间的区别是,在orc中,换行符可以存储在值中,而不在文件中创建额外的行。这就是为什么 rlike '\\n' 与orc一起使用,不与textfile一起使用(不返回任何行),在textfile中插入后\n在文件中创建两个单独的行,但在orc中它不会。
这就是如何用其他东西替换换行符:

select regexp_replace(a,'\\n',' newline ') from test_special_chars where a rlike '\\n';

结果:

OK
a newline b
Time taken: 1.502 seconds, Fetched: 1 row(s)

相关问题