2013-04-15 4 views
2

Apache Hive에서 explode() 함수에 대해 반대로 수행 할 수있는 방법이 있습니까? 의 내가이 양식 id int, description string, url string, ...하이브에서 여러 열의 열을 하나로 결합

의 테이블이 있고이 테이블에서 나는 json 열에서 JSON 다른 모든 열을 저장 id int, json string과 같은 테이블을 생성하고자한다고 가정 해 봅시다. "description":"blah blah", "url":"http:", ...

답변

7

하이브는 분명히 올바른 JSON으로 많은 열을 결합하는 복잡한 빠른 얻을 것입니다 하나 개의 컬럼

SELECT id, CONCAT(CONCAT("(", CONCAT_WS(", ", description, url)), ")") as descriptionAndUrl 
FROM originalTable 

이에 여러 열을 결합하는 데 사용할 수있는 몇 가지 string operations에 액세스 할 수 있습니다. 이것이 하나 일 뿐이고 모든 JSON 문자열이 동일한 속성을 가질 것이라는 것을 알고있는 경우에는 용도에 맞게 CONCAT을 사용할 수 있습니다.

"올바른 방법"은 User Defined Function을 작성하여 열 목록을 가져 와서 JSON 문자열을 추출하는 것입니다. 열을 추가하거나 다른 테이블에 동일한 작업을 수행해야하는 경우 관리가 훨씬 쉬워집니다.

누군가가 이미 작성한 문서 일 가능성이 큽니다. 따라서 주위를 둘러 봐야합니다. 유감 스럽지만 [하이브가 제공 한 JSON 관련 UDF] https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-get_json_object)는 JSON 문자열에서 작동하지만 만들지 않습니다.

0

당신은

SELECT CONCAT_WS 하이브에 CONCAT_WS를 사용하여 문자열 변수 연결할 수 있습니다 - 표

FROM ('문자열 1', '문자열 2', 'string3' '') 을
관련 문제