hiveql 上的正则表达式:悬挂元字符映射减少

问题描述

所以,我已经将我的数据转换为带有 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的出现有关系吗? 我的正则表达式应该如何?

谢谢。

解决方法

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

 public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        var sourceProvider = radMultiColumnComboBox_Part.ItemsSourceProvider as GridViewItemsSourceProvider;
        var columns = sourceProvider.Columns;
        
        foreach(var gridViewColumn in sourceProvider.Columns)
        {
            var binding = new Binding(DisplayMemberPath);
            binding.Source = gridViewColumn.DataContext;
            // there is no property DataMemberBinding.
            BindingOperations.SetBinding(gridViewColumn,Telerik.Windows.Controls.GridViewColumn.DataContextProperty,binding); 
        }
    }

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