2017-03-15 1 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)을 찾아 (키) 바로 뒤에 : (콜론) 다음에 ", 문자 시퀀스 (값), 그리고 ", 다시 , 또는이 계속됩니다.(aftervalue)

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

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

수 있습니다 당신은 왜 이것이 작동하는지에 대해 약간의 설명을 추가 할 수 있습니까? –