Невозможно разобрать строку, используя Hive Regex Serde - PullRequest
1 голос
/ 28 февраля 2020

Я пытаюсь разобрать строку:

"297", "298", "Y", "", "299"

, используя Regexp serder, но я не могу этого сделать. Определение таблицы, которое я создал:

create external table test.test1
(a string,
b string,
c string,
d string)
row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'
with serdeproperties ("input.regex" = "\"\"|\"([^\"]+)\"")

регулярное выражение, используемое в свойствах serde, выглядит многообещающе на тестовых веб-сайтах регулярных выражений, но я получаю исключение при попытке прочитать таблицу, любезно помогите мне в этом. Я знаю, что это легко сделать с помощью csv serde, но я пытаюсь выяснить большую часть проблемы, для которой мне нужно использовать регулярное выражение. Спасибо

1 Ответ

0 голосов
/ 02 марта 2020

В регулярном выражении это должна быть группа захвата для каждого столбца. Ваши данные содержат 5 столбцов и таблицу 4, вы хотите пропустить один столбец, верно?

Например, это регулярное выражение будет работать: with serdeproperties ('input.regex' = '^"(.*?)","(.*?)","(.*?)",.*?,"(.*?)"$')

Вы можете легко проверить без создания таблицы, как это :

select regexp_replace('"297","298","Y","","299"','^"(.*?)","(.*?)","(.*?)",.*?,"(.*?)"$','$1|$2|$3|$4');
OK
_c0
297|298|Y|299

select regexp_replace('"297","298","Y","this column is skipped","299"','^"(.*?)","(.*?)","(.*?)",.*?,"(.*?)"$','$1|$2|$3|$4');
OK
_c0
297|298|Y|299
...