2020년 11월 10일 화요일

Hive [6] - Json데이터 컨트롤 (json to hive)


Hive에서 Json파일 컨트롤


1. get_json_object

hive 0.7.0 이하로는 아래와 같이 사용한다.










[ 쿼리문 ]

SELECT

    get_json_object(StudentsOneLine, '$.StudentDetails.FirstName'),

    get_json_object(StudentsOneLine, '$.StudentDetails.LastName')

FROM StudentsOneLine;




2. json_tuple 사용

{"memberId":817090,"campaigns":[{"id":"40718","amount":"10"},{"id":"40801","amount":"26"},{"id":"40584","amount":"0"},{"id":"40685","amount":"0"}],"eventTime":"1604847624784","createdAt":"2020-11-09:00:00:25"}

위와 같은 json파일이 있다고 하면 hive 0.7.0이상부터는 json_tuple함수를 이용하여 json데이터를 추출한다.


[ 쿼리문 ]

SELECT memberid, id, amount, eventtime

from tableName 

LATERAL VIEW JSON_TUPLE(campaigns) campaigns as id, amount;




3. Explode

그러나 데이터가 아래와 같이 String 타입이 아니고 Int타입 Json이라면

{"memberId":817090,"campaigns":[{"id":40718,"amount":10},{"id":40801,"amount":26},{"id":40584,"amount":0},{"id":40685,"amount":0}],"eventTime":1604847624784,"createdAt":"2020-11-09:00:00:25"}

아래와 같은 에러가 나타난다.

Error while compiling statement: FAILED: UDFArgumentException json_tuple()'s arguments have to be string type

그럴땐 Explode함수를 사용하여 Json을 추출한다.


[ 쿼리문 ]

SELECT memberid, ca.id, ca.amount, eventtime

from tablename

LATERAL VIEW EXPLODE(campaigns) campaigns as ca


[ 결과 ]








그외로, 

4. 사용자 지정 SerDe사용

Hive에서는 json, csv뿐 아니라 커스텀으로 만들어 SerDe를 사용할 수 있다.

참조 URL : https://web.archive.org/web/20190217104719/https://blogs.msdn.microsoft.com/bigdatasupport/2014/06/18/how-to-use-a-custom-json-serde-with-microsoft-azure-hdinsight/


5. 프로그래밍

Python, Java를 이용하여 Json파일을 컨트롤 한다.



참조 :

https://docs.microsoft.com/ko-kr/azure/hdinsight/hadoop/using-json-in-hive

댓글 없음:

댓글 쓰기