Hive JSON SerDe는 일반적으로 이벤트와 같은 JSON 데이터를 처리하는 데 사용됩니다. 이러한 이벤트는 새 줄로 구분된 JSON 인코딩 텍스트의 한 줄 문자열로 표시됩니다. Hive JSON SerDe는 map
또는 struct
키 이름에 중복 키를 허용하지 않습니다.
참고
SerDe는 각 JSON 문서가 레코드의 필드를 구분하는 줄 종료 문자가 없는 한 줄의 텍스트에 있을 것으로 예상합니다. JSON 텍스트가 가독성 좋게 꾸민 형식이면 테이블을 만든 후 쿼리하려고 할 때 HIVE_CURSOR_ERROR: 행이 유효한 JSON 객체가 아님(HIVE_CURSOR_ERROR: Row is not a valid JSON Object)
또는 HIVE_CURSOR_ERROR: JsonParseException: 예기치 않은 입력 종료: OBJECT의 닫기 마커 필요(HIVE_CURSOR_ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT)
같은 오류 메시지가 나타날 수 있습니다. 자세한 내용은 GitHub의 OpenX SerDe 문서에서 JSON 데이터 파일
다음 예제 DDL 문은 Hive JSON SerDe를 사용하여 샘플 온라인 광고 데이터를 기반으로 테이블을 생성합니다. LOCATION
절에서 s3://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions
의 myregion
을, Athena를 실행하는 리전 식별자로 바꿉니다(예: s3://us-west-2.elasticmapreduce/samples/hive-ads/tables/impressions
).
CREATE EXTERNAL TABLE impressions (
requestbegintime string,
adid string,
impressionid string,
referrer string,
useragent string,
usercookie string,
ip string,
number string,
processid string,
browsercookie string,
requestendtime string,
timers struct
<
modellookup:string,
requesttime:string
>,
threadid string,
hostname string,
sessionid string
)
PARTITIONED BY (dt string)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION 's3://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions';
Hive JSON SerDe로 타임스탬프 형식 지정
문자열에서 타임스탬프 값을 구문 분석하려면 ROW FORMAT SERDE
절에 WITH
SERDEPROPERTIES
하위 필드을 추가하고 이를 사용하여 timestamp.formats
파라미터를 지정할 수 있습니다. 파라미터에서 아래 예제와 같이 하나 이상의 타임스탬프 패턴를 쉼표로 구분한 목록을 지정합니다.
...
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
WITH SERDEPROPERTIES ("timestamp.formats"="yyyy-MM-dd'T'HH:mm:ss.SSS'Z',yyyy-MM-dd'T'HH:mm:ss")
...
자세한 내용은 Apache Hive 설명서의 Timestamps
쿼리를 위한 테이블 로드
테이블을 생성한 후 MSCK REPAIR TABLE을 실행하여 테이블을 로드하면 Athena에서 쿼리가 가능합니다.
MSCK REPAIR TABLE impressions
CloudTrail 로그 쿼리
Hive JSON SerDe를 사용하여 CloudTrail 로그를 쿼리할 수 있습니다. 자세한 내용과 예제 CREATE TABLE
문은 AWS CloudTrail 로그 쿼리 단원을 참조하세요.