hiveql 上的正则表达式:悬空元字符映射减少 [重复]

Posted

技术标签:

【中文标题】hiveql 上的正则表达式:悬空元字符映射减少 [重复]【英文标题】:regex on hiveql : dangling meta character map reduce [duplicate] 【发布时间】:2021-01-20 10:04:16 【问题描述】:

总之,我一直在用 talend 将我的数据转换成 hive。

我运行了一些正则表达式。其中之一是这样的。

KRW3TR.899877.GR0054656*DR.798012...2..............GR0054656*EUR*
KRW3TR.899877.GR0054656*DR.798012...2..............GR0054656*EUR*DDT*
KRW3TR.899877.GR0054656*DR.798012...2..............GR0054656*EUR*CCT*

我想做的是得到最后一个序列:DDTCCT

(从这些示例中您知道有时会出现最后一个序列)

我从 map reduce 得到错误:

Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to execute method public java.lang.String org.apache.hadoop.hive.ql.udf.UDFRegExpExtract.evaluate(java.lang.String,java.lang.String,java.lang.Integer)  on object org.apache.hadoop.hive.ql.udf.UDFRegExpExtract@a22c4d8 of class org.apache.hadoop.hive.ql.udf.UDFRegExpExtract with arguments 

另一个是:

Caused by: java.lang.reflect.InvocationTargetException
Caused by: java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 9

我使用这个正则表达式来提取这个:

REGEXP_EXTRACT(columnrr,'^(?:[^*]*\\*)3([^*]*)',1) as TYPE

我的问题是: 他们有关系吗? DDT和CCT的出现有什么关系吗? 我的正则表达式应该是怎样的?

谢谢。

【问题讨论】:

不应该是'^(?:[^*]*\\*)3([^*]*)'吗? 啊呀!谢谢你!所以答案是我的问题?我应该删除这个问题吗? 【参考方案1】:

我找到了。 正则表达式中有保留字符。所以答案是:

REGEXP_EXTRACT(columnrr,'^(?:[^*]*\\\\*)3([^*]*)',1) as TYPE

相关问题:java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0 +

【讨论】:

以上是关于hiveql 上的正则表达式:悬空元字符映射减少 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

悬空元字符 * sparksql

HiveQL

Hive06-HiveQL:查询

将字符串数组减少到最小的正则表达式值

如何使用 EMR 上的 HiveQL 将 DynamoDB 上的 Map 数据类型列导出到具有 JSON 数据类型的 S3?

20个正则表达式,减少千行代码