无法使用配置单元regex serde分析字符串

1mrurvl1  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(301)

我试图分析一个字符串,它是:
“297”,“298”,“y”,“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属性中使用的regex在regexp测试网站中看起来很有前途,但是我在尝试阅读表时遇到了一个异常,请在这方面帮助我。我知道使用csv-serde可以很容易地做到这一点,但是我正在尝试找出一个更大的问题,我必须使用regexp-serde

cczfrluj

cczfrluj1#

在regex中,它应该是每列捕获一个组。您的数据包含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

相关问题