복붙노트

[HADOOP] Hive에서 여러 열의 열을 하나로 결합

HADOOP

Hive에서 여러 열의 열을 하나로 결합

Apache Hive에서 explode () 함수에 대한 역 기능을 수행하는 방법이 있습니까? 이 형식의 id int, description string, url string 등의 테이블이 있다고 가정 해 봅시다.

그리고이 테이블에서 json 열의 다른 모든 열을 json으로 저장 한 id int, json string처럼 보이는 테이블을 만들고 싶습니다. "설명": "blah blah", "url": "http :", ...

해결법

  1. ==============================

    1.Hive는 여러 열을 하나의 열로 결합하는 데 사용할 수있는 일부 문자열 작업에 액세스 할 수 있습니다.

    Hive는 여러 열을 하나의 열로 결합하는 데 사용할 수있는 일부 문자열 작업에 액세스 할 수 있습니다.

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

    이것은 많은 열을 유효한 JSON으로 결합하는 데 분명히 복잡해질 것입니다. 이것이 하나이고 모든 JSON 문자열에 동일한 속성이 있다는 것을 알고 있다면 목적을 위해 CONCAT로 벗어날 수 있습니다.

    이를위한 "올바른"방법은 열 목록을 가져 와서 JSON 문자열을 추출하는 사용자 정의 함수를 작성하는 것입니다. 열을 추가하거나 다른 테이블에 동일한 작업을 수행해야하는 경우 훨씬 유지 관리가 쉽습니다.

    누군가가 이미 사용할 수있는 것을 작성했을 가능성이 있으므로 주변을 둘러보아야합니다. 불행히도 [Hive에서 제공하는 JSON 관련 UDF] https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-get_json_object) JSON 문자열에서 작동하지만 만들지는 않습니다.

  2. ==============================

    2.HIve에서 CONCAT_WS를 사용하여 문자열 변수를 연결할 수 있습니다

    HIve에서 CONCAT_WS를 사용하여 문자열 변수를 연결할 수 있습니다

    CONCAT_WS ( '-', 'string1', 'string2', 'string3') 선택  테이블에서

  3. from https://stackoverflow.com/questions/16009608/combine-columns-from-multiple-columns-into-one-in-hive by cc-by-sa and MIT license