【问题标题】:Hive RegEx Serde doesn't work and loads as NULLHive RegEx Serde 不起作用并加载为 NULL
【发布时间】:2020-10-01 12:42:29
【问题描述】:

我正在尝试使用 Serde Regex 属性创建一个配置单元表来加载以下文件。

输入文件:

$ hdfs dfs -cat /user/t04413b/test.log
{"repoType":3,"repo":"PROD_hive","reqUser":"shdingst","evtTime":"2020-06-09 01:01:23.308"}

Hive 创建表查询:

create external table logs3
(
repo_type  string,
repo string,
requser string,
evttime string
)
row format serde 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
with serdeproperties (
"input.regex" = ":(.*),.*:(.*),.*:(.*),.*?:(.*)}.*"
)
stored as textfile;

将路径'/user/t04413b/test.log'中的数据加载到表logs3中;

select * from logs3;
+------------------+-------------+----------------+----------------+--+
| logs3.repo_type  | logs3.repo  | logs3.requser  | logs3.evttime  |
+------------------+-------------+----------------+----------------+--+
| NULL             | NULL        | NULL           | NULL           |

我在 Rubular.com 中测试了正则表达式,它运行良好,但在 SerDe 正则表达式中它不起作用。 有人可以帮忙解决吗?谢谢

【问题讨论】:

  • 欢迎来到stackoverflow。您可以使用反引号来格式化代码,如下所示:``` 代码 ``` 。这使问题更具可读性

标签: regex hive create-table hive-serde hiveddl


【解决方案1】:

'}'是正则表达式中的特殊字符,需要屏蔽:

"input.regex" = "^.*:(.*),.*:(.*),.*:(.*),.*?:(.*)\\}.*"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多