[HADOOP] Hive의 JSON 문자열에서 선택한 값을 추출하는 방법
HADOOPHive의 JSON 문자열에서 선택한 값을 추출하는 방법
나는 Hive에서 다음과 같은 출력을 생성하는 간단한 쿼리를 실행하고있다.
|------|-----------------------------------------------------------|
| col1 | col2 |
|------|-----------------------------------------------------------|
| A | {"variable1":123,"variable2":456,"variable3":789} |
|------|-----------------------------------------------------------|
| B | {"variable1":222,"variable2":333,"variable3":444} |
--------------------------------------------------------------------
json 문자열을 구문 분석하고 SELECT 문 자체에서 각 토큰의 값을 가져 와서 WHERE 문을 통합하여 나에게 중요한 문자열 부분 만 반환 할 수 있어야합니다.
그래서 궁극적 인 결과는 다음과 같습니다.
|------------------------------------------|
| col1 |variable1 | variable2 | variable3 |
|------------------------------------------|
| A | 123 | 456 | 789 |
|------------------------------------------|
| B | 222 | 333 | 444 |
--------------------------------------------
나는 esnaples에 지정된 인수 구조를 사용하여 SPLIT 및 GET_JSON_OBJECT를 포함하여 다양한 함수를 사용하여 시도했지만 다음과 같은 모든 오류를 반환합니다.
No matching method for class org.apache.hadoop.hive.ql.udf.UDFJson
with (struct<...>, string). Possible choices: _FUNC_(string, string)
누군가 내가 내가하려는 일이 실현 가능한지 또는 내가 잘못 가고있는 곳을 설명 할 수 있습니까?
미리 감사드립니다
해결법
-
==============================
1.
select col1, get_json_object(col2,'$.variable1') as variable1, get_json_object(col2,'$.variable2') as variable2, get_json_object(col2,'$.variable3') as variable3 from json_test
출력을 테이블 (예 : json_test)에 넣으면 이런 식으로 구문 분석 할 수 있습니다. 이러한 결과를 얻기 위해 쿼리를 조정할 수도 있습니다.
산출:
col1 |variable1 |variable2 |variable3 | -----|----------|----------|----------| A |123 |456 |789 | B |222 |333 |444 |
from https://stackoverflow.com/questions/45514710/how-to-extract-selected-values-from-json-string-in-hive by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 돼지의 group_concat? (0) | 2019.08.06 |
---|---|
[HADOOP] 두 테이블을 비교하고 HIVE와 다른 행을 반환하는 방법 (0) | 2019.08.06 |
[HADOOP] 년 월 일 파티션 열 목록에서 최신 / 최근 파티션을 추출하는 방법 (0) | 2019.08.06 |
[HADOOP] java Mapreduce를 사용하여 JSON 처리하기 (0) | 2019.08.06 |
[HADOOP] 하이브에서 sysdate -1 가져 오기 (0) | 2019.08.06 |