Используйте 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
Фактически, вставка \ n создала дополнительную строку в текстовом файле. Это то, что случилось.
Но если вы создадите таблицу 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 и не работает с текстовым файлом (не возвращает никаких строк), после вставки в текстовый файл \ 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)
person
leftjoin
schedule
28.08.2019