2017-03-15 25 views
2

Ich habe eine Zeichenfolge wie unten in einer der Spalten in der Hive-Tabelle angegeben.String Umwandlung in HIVE

{ABC:"ABCVAL",XYZ:"XYZVAL"} 

ich möchte es konvertieren in HIVE

{"ABC":"ABCVAL","XYZ":"XYZVAL"} 

Wie kann ich dies tun.

Antwort

2

Einfache Version

den Wert Unter der Annahme, nicht Doppelpunkt (:) Symbol enthält.

Geben Sie für Folge von Zeichen anders als {,: (Schlüssel), gefolgt von :

select regexp_replace('{ABC:"ABCVAL",XYZ:"XYZVAL"}','(?<key>[^{,:]+):','"${key}":'); 

{"ABC":"ABCVAL","XYZ":"XYZVAL"} 

Sichere Version

Geben Sie für optionale { (beforekey), durch eine Folge von Zeichen folgen (key) direkt gefolgt von : (Doppelpunkt), gefolgt von ", Folge von Zeichen (Wert) und dann wieder ", gefolgt von , oder ] (aftervalue)

select regexp_replace 
     (
      '{ABC:"ABCVAL",XYZ:"XYZVAL"}' 
      ,'(?<beforekey>\\{)?(?<key>.*?)(?<colon>:)(?<value>".*?")(?<aftervalue>[,}])' 
      ,'${beforekey}"${key}"${colon}${value}${aftervalue}' 
     ) 
; 

{"ABC":"ABCVAL","XYZ":"XYZVAL"} 
+0

Können Sie eine kleine Erklärung hinzufügen, warum das funktioniert? –