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*
我想做的是得到最后一个序列:DDT
CCT
(从这些示例中您知道有时会出现最后一个序列)
我从 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 上的正则表达式:悬空元字符映射减少 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 EMR 上的 HiveQL 将 DynamoDB 上的 Map 数据类型列导出到具有 JSON 数据类型的 S3?