2015-11-02 315 views
1

這可能是一個愚蠢的問題,但我似乎無法克服這個自己 -HiveQL - 提取字符串的結尾相匹配的模式正則表達式

我有串的領域,這與某個時候結束3個數字由逗號分隔,例如

- 2353535.123213.124 - data.2354234.1324.1314 - data.old-24234.2341.4325

有時不是

- aaaa.53535 - data.old-3521 - data.AFG34fsaf34

每當發生第一種情況時,我需要從字符串的末尾提取3數字模式。含義:

- 2353535.123213.124 -> 2353535.123213.124 - data.2354234.1324.1314 -> 2354234.1324.1314 - data.old-24234.2341.4325 -> 24234.2341.4325 - aaaa.53535 -> Do nothing

這可能嗎? 如果不是通過hiveQL(儘管這是可取的),即使是一個java正則表達式提取也是有用的(在自定義UDF中使用)。

回答

0
\\d+(?:\\.\\d+){2}$ 

您可以使用此java表達式。 See demo

+0

謝謝!雖然在演示中看起來不錯,但我沒有在Hive中使用它:「select regexp_extract('a.b-983475.9900291.556901','\\ d +(?:\\。\\ d +){2} $');生成 FAILED:SemanticException [Error 10014]:Line 1:7錯誤的參數''\\ d +(?:\\。\\ d +){2} $'':org.apache.hadoop.hive.ql.metadata。 HiveException:無法執行方法public java.lang.String org.apache.hadoop.hive.ql.udf.UDFRegExpExtract.evaluate(java.lang.String,java.lang.String)on object ... – KeshetE

+0

@KeshetE你可能需要'regexp_extract('ab-983475.9900291.556901','\\ d +(?:\\。\\ d +){2} $',0)' – vks

+0

沒錯!謝謝! – KeshetE