2017-03-15 20 views
2

以下のような文字列が、ハイブテーブルのいずれかの列にあります。文字列の変換HIVE

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

は、私はこれを行うことができますどのように

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

HIVE

にそれを変換したいです。

答えて

2

簡易バージョン

値はコロン(:)記号を含んでいないと仮定します。 :

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

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

安全なバージョンに続いて{,:(キー)以外の文字のシーケンスのための

ルック

文字のシーケンスが続くオプション{(beforekey)、探し(キー)直後に:(コロン)、続いて"、文字列(値)の順に続き、"に続いて,またはが続きます(後の値)

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

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

あなたはこれがなぜ機能するのかについて少しの説明を追加できますか? –