2017-02-08 2 views
1

Ich möchte in einem Ausdruck in Hive negative Dezimalwerten analysieren, und ich habe die folgende Regex geschrieben,Handhabung mehr Übereinstimmungen in regex in Hive

select regexp_extract("abcsdfghj-117.3700631&poikse-118.244&", 
'([-][1-9][0-9]*[.][0-9]+)&*') as output 

Während die regex gut zu funktionieren scheint, es gibt mir nur das erste Spiel davon. Ist es möglich, Bienenvölker alle möglichen Kombinationen auszugeben? Gibt es irgendeine Funktion im Bienenstock, die alle Treffer zurückgibt?

Ich habe Google das und ich konnte keine Antwort finden. Jede mögliche Hilfe würde

Dank

+0

'regexp_extract' benötigt 3 Parameter. '(string, pattern, match_index)' –

+0

@ cricket_007 Ich habe das schon probiert. Ich habe 0 und 1 und ich bekomme -117.3700631 und für 2, wirft es und Fehler. Ich frage mich nur, ob wir eine Abfrage schreiben können, um etwas wie -117.3700631, -118.244 auszugeben. Kannst du mir bitte dabei helfen? – Observer

+0

Ich wette, Sie müssen eine UDF schreiben, um "alle Übereinstimmungen" als eine Liste zu bekommen, die Sie wollen. Und hier ist die richtige Regex. https://regex101.com/r/KgTsAl/1 –

Antwort

2
  1. ersetzen geschätzt werden jedes {prefix}{number}& mit ,{number}
  2. das Ergebnis aus dem 2. Zeichen abgeschnitten (Entfernen der ersten ,)
  3. teilen das Ergebnis Array von ,

hive> select split(substr(regexp_replace("abcsdfghj-117.3700631&poikse-118.244&",'.*?(-\\d+\\.\\d+)&',',$1'),2),',') as output; 
OK 
["-117.3700631","-118.244"] 
+0

Ja, nun, ich mag Java/Python UDFs mehr als Regex :) –

Verwandte Themen