2016-08-19 6 views
0

Wir haben eine Zeichenfolge wie:Unter String-Extrakte in Hive

ABC.XXXXXXX.USD.XX

und die Aufgabe Währung (USD in diesem Fall) zu extrahieren. Optionen habe ich versucht, kehrt Unsinn:

select distinct 
    r.name 
    ,regexp_extract(r.name,'\.(.{3})\.',1) 
    ,split(r.name,'\.') 
    ,split(r.name,'\.')[2] 
from sales r 

Ausgang:

ABC.XXXXXXX.USD.XX BC. ["","","","","","","","","","","","",""] <empty> 

Wie kommt das?

+1

könnte aufgrund der Flucht sein? Probieren Sie '' \\. '': ''\\. (. {3}) \\.'', 'Split (r.name, '\\.')' ' –

Antwort

0

Die Funktion split in Hive basiert auf regulären Ausdrücken. Siehe language manual on the wiki:

split(string str, string pat) 
    Split str around pat (pat is a regular expression) 

Sie das Trennzeichen als "\." angegeben, dass eine nicht definierte Escape-Sequenz als bloße . analysiert, die in regex Spieler jedes Zeichen damit es zwischen den einzelnen Zeichen aufgeteilt, und auch am Anfang und Ende der Zeichenfolge.

Sie müssen den Punkt mit dem Backslash zu entkommen, die setzen in einem String-Literal als "\\."

0

Nur, dass in eckigen Klammern wie definiert werden können:

split(r.name,'[\.]')[2]