

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Data Firehose에서 입력 데이터 형식 변환
<a name="record-format-conversion"></a>

Amazon Data Firehose는 Amazon S3에 데이터를 저장하기 전에 입력 데이터의 형식을 JSON에서 [Apache Parquet](https://parquet.apache.org/) 또는 [Apache ORC](https://orc.apache.org/)로 변환할 수 있습니다. Parquet 및 ORC는 공간을 절약하고 JSON 같은 행 기준 형식과 비교할 때 쿼리 속도가 더 빠른 열 방식 데이터 형식입니다. 쉼표로 구분된 값(CSV) 또는 구조화된 텍스트와 같은 JSON 이외의 입력 형식을 변환하려는 경우 AWS Lambda 를 사용하여 먼저 JSON으로 변환할 수 있습니다. 자세한 내용은 [Amazon Data Firehose에서 소스 데이터 변환](data-transformation.md) 단원을 참조하십시오.

Amazon Data Firehose로 레코드를 전송하기 전에 레코드를 집계하는 경우에도 데이터 형식을 변환할 수 있습니다.

Amazon Data Firehose가 레코드 데이터 형식을 변환하려면 다음 3가지 요소가 필요합니다.

## Deserializer
<a name="record-format-conversion-deserializer"></a>

Amazon Data Firehose는 입력 데이터의 JSON을 읽으려면 해제자(Deserializer)가 필요합니다. 다음 해제자 두 유형 중 하나를 선택할 수 있습니다.

여러 JSON 문서를 같은 레코드로 결합하는 경우 지원되는 JSON 형식에서 입력이 여전히 표시되는지 확인하세요. JSON 문서 배열은 유효한 입력이 아닙니다.

예를 들어 올바른 입력은 `{"a": 1}{"b": 1}`이고 잘못된 입력은 `[{"a":1}, {"a":2}]`입니다.
+ [Apache Hive JSON SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-JSON)
+ [OpenX JSON SerDe](https://github.com/rcongiu/Hive-JSON-Serde)

### JSON 해제자 선택
<a name="record-format-conversion-deserializers"></a>

입력 JSON에 다음과 같은 형식의 타임스탬프가 포함된 경우 [OpenX JSON SerDe](https://github.com/rcongiu/Hive-JSON-Serde)를 선택하세요.
+  yyyy-MM-dd'T'HH:mm:ss[.S]'Z', 이 부분은 최대 9자리로 구성될 수 있음 - 예: `2017-02-07T15:13:01.39256Z`.
+  yyyy-[M]M-[d]d HH:mm:ss[.S], 이 부분은 최대 9자리로 구성될 수 있음 - 예: `2017-02-07 15:13:01.14`.
+  Epoch 초 – 예: `1518033528`.
+  Epoch 밀리초 – 예: `1518033528123`.
+  부동 소수점 epoch 초 – 예: `1518033528.123`.

OpenX JSON SerDe는 마침표(`.`)를 밑줄(`_`)로 변환할 수 있습니다. 또한 JSON 키를 deserializing하기 전에 소문자로 변환할 수 있습니다. Amazon Data Firehose에서 이 해제자(Deserialzer)에 사용할 수 있는 옵션에 대한 자세한 내용은 [OpenXJsonSerDe](https://docs.aws.amazon.com/firehose/latest/APIReference/API_OpenXJsonSerDe.html)를 참조하세요.

어떤 해제자를 선택해야 할지 모르겠으면 OpenX JSON SerDe를 사용하세요. 단, 이 해제자가 지원하지 않는 타임스탬프가 없어야 합니다.

위에 나열한 형식 외의 타임스탬프가 있는 경우 [Apache Hive JSON SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-JSON)를 사용하세요. 이 deserializer를 선택하면, 사용할 타임스탬프 형식을 지정할 수 있습니다. Joda-Time `DateTimeFormat` 형식 문자열의 패턴 구문에 따라 타임스탬프 형식을 지정하세요. 자세한 내용은 [DateTimeFormat 클래스](https://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html)를 참조하세요.

특수 값 `millis`를 사용하여 epoch 밀리초 단위의 타임스탬프를 구문분석할 수 있습니다. 형식을 지정하지 않으면 Amazon Data Firehose는 기본적으로 `java.sql.Timestamp::valueOf`를 사용합니다.

Hive JSON SerDe는 다음을 허용하지 않습니다.
+ 열 이름의 마침표(`.`).
+ `uniontype` 형식의 필드.
+ 스키마에 숫자 형식이 있지만 문자열은 JSON인 필드. 예를 들어 스키마가 (an int)인 경우 JSON이 `{"a":"123"}`이면 Hive SerDe에서 오류가 발생합니다.

Hive SerDe는 중첩된 JSON을 문자열로 변환하지 않습니다. 예를 들어 `{"a":{"inner":1}}`가 있으면 `{"inner":1}`을 문자열로 처리하지 않습니다.

## 스키마
<a name="record-format-conversion-schema"></a>

Amazon Data Firehose에는 해당 데이터를 해석하는 방법을 결정하는 스키마가 필요합니다. [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)를 사용하여 AWS Glue Data Catalog에서 스키마를 생성합니다. 그러면 Amazon Data Firehose는 이 스키마를 참조한 다음 이를 사용하여 입력 데이터를 해석합니다. 동일한 스키마를 사용하여 Amazon Data Firehose와 분석 소프트웨어를 모두 구성할 수 있습니다. 자세한 내용은 *AWS Glue 개발자 안내서*[의 AWS Glue 데이터 카탈로그 채우기를](https://docs.aws.amazon.com/glue/latest/dg/populate-data-catalog.html) 참조하세요.

**참고**  
 AWS Glue 데이터 카탈로그에서 생성된 스키마는 입력 데이터 구조와 일치해야 합니다. 그렇지 않으면 변환된 데이터가 스키마에 지정되지 않은 속성을 포함할 수 없습니다. 중첩된 JSON을 사용하는 경우 JSON 데이터의 구조를 반영하는 스키마의 STRUCT 유형을 사용하세요. STRUCT 유형의 중첩된 JSON을 처리하는 방법은 [이 예시](https://docs.aws.amazon.com/athena/latest/ug/openx-json-serde.html#nested-json-serde-example)를 참조하세요.

**중요**  
크기 제한이 지정되지 않은 데이터 유형의 경우 한 행의 모든 데이터에 대한 실제 제한은 32 MB입니다.  
`CHAR` 또는 `VARCHAR`의 길이를 지정하면 Firehose는 입력 데이터를 읽을 때 지정된 길이로 문자열을 잘라냅니다. 기본 데이터 문자열이 더 긴 경우 변경되지 않습니다.

## Serializer
<a name="record-format-conversion-serializer"></a>

**Firehose에는 데이터를 대상 열 방식 저장 형식(Parquet 또는 ORC)으로 변환하는 시리얼 설정자 필요** - 다음 두 유형 중 하나를 선택할 수 있습니다.
+ [ORC SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC)
+ [Parquet SerDe](https://cwiki.apache.org/confluence/display/Hive/Parquet)

### 시리얼 설정자 선택
<a name="record-format-conversion-serializers"></a>

어떤 serializer를 선택하느냐는 비즈니스 요구 사항에 달라집니다. 두 가지 serializer 옵션에 대한 자세한 내용은 [ORC SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC)와 [Parquet SerDe](https://cwiki.apache.org/confluence/display/Hive/Parquet)를 참조하세요.