hive create table input.regex - отфильтровать все строки, начинающиеся с символа - PullRequest
1 голос
/ 06 июня 2019

Я хочу создать таблицу в Hive

<code>CREATE TABLE <em>table</em> (
    a     string
   ,b     string
) 
PARTITIONED BY ( pr_filename string )
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES ('input.regex'='<b><i><em>reg_exp</em></i></b>') ;

, но исходные данные имеют многострочный заголовок, начинающийся с "#"

# <some comment>
#
# <some other comments>
# <some other comments>
# <some other comments>
#
a,b
1,2
8,2
8,9

Можно ли написать reg_exp чтобы отфильтровать все строки, начиная с выбранного символа, или мне нужно использовать временную таблицу для работы с этим заголовком?

1 Ответ

1 голос
/ 06 июня 2019

Если вы попытаетесь отфильтровать это так:

'input.regex'='^([^#]+),([a-zA-Z])' --first group is everything except #

Строка будет возвращена в любом случае с NULL, вы можете фильтровать такие записи.

RegexSerDe JavaDocs говорит: На этапе десериализации, , если строка не соответствует регулярному выражению, тогда все столбцы в строке будут NULL . Если строка соответствует регулярному выражению, но имеет меньше ожидаемых групп, отсутствующие группы будут NULL. Если строка соответствует регулярному выражению, но имеет больше ожидаемых групп, дополнительные группы просто игнорируются

Решение заключается в использовании промежуточной таблицы + строк фильтра при выборе из нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...