gpt4 book ai didi

java - hive serde 中多分隔符字符串的正则表达式

转载 作者:行者123 更新时间:2023-11-30 04:56:11 26 4
gpt4 key购买 nike

我使用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读取和提取上述格式的数据?

最佳答案

现在,您仅捕获由管道对分隔的组,但不包含管道字符本身:([^\\|]*)。如果将其更改为 ((?:[^\\|]+\\|)*[^\\|]+) 那么每个组将能够在中间某处包含单个管道(如 a|bcgg|g),但不允许以管道开始或结束,因为这会导致歧义(例如:ab|||cd 可以分为 ab|cdab|cd)。

关于java - hive serde 中多分隔符字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8464995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com