Вставка содержимого таблицы Hive со специальными символами -Tab space и New Line

Я пытаюсь выбрать данные со специальными символами, в частности Tab и NewLine, из таблиц Hive, фильтрующих предложение where. я пытался

Я пробовал like '%\\n%', like '%\\t%', like '%hex(9)%' и т. Д., Но они, похоже, не работают.

Также попытался создать фиктивную таблицу для вставки таких данных, и это тоже не работает. Пожалуйста, помогите.


person Dark_knight_dwe    schedule 27.08.2019    source источник


Ответы (1)


Используйте 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