Я использую serde для чтения данных в определенном формате с разделителем ||
, и в моей строке данных никогда не появятся тройные каналы, такие как |||
.
Одна строка моих данных может выглядеть как: aaa||bbb||ccc||ddd
, и я создаю таблицу улья, как показано ниже:
CREATE TABLE test_log(
host STRING,
identity STRING,
user STRING,
time STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^\\|]*)\\|{2}([^\\|]*)\\|{2}([^\\|]*)\\|{2}([^\\|]*)",
"output.format.string" = "%1$s %2$s %3$s %4$s")
STORED AS TEXTFILE;
Кажется, что читать данные нормально, но, очевидно, input.regex
не совсем корректно, когда сталкиваются с некоторыми данными, такими как: a|bc||edf||g|g||ghi
.Я пытался найти помощь в книге «Освоение регулярных выражений», но это не сработало.
Можно ли читать и извлекать данные в указанном выше формате только с определенным input.regex
?