Avro SerDe - Amazon Athena

Avro SerDe

SerDe 이름

Avro SerDe

라이브러리 이름

org.apache.hadoop.hive.serde2.avro.AvroSerDe

예제

보안상의 이유로 Athena에서는 avro.schema.url을 이용해 테이블 스키마를 지정할 수 없습니다. avro.schema.literal를 사용합니다. Avro 형식의 데이터에서 스키마를 추출하려면 getschema 파라미터와 함께 Apache avro-tools-<version>.jar을(를) 사용할 수 있습니다. 그러면 WITH SERDEPROPERTIES 문 내에서 사용할 수 있는 스키마가 반환됩니다. 다음 예를 참조하세요.

java -jar avro-tools-1.8.2.jar getschema my_data.avro

avro-tools-<version>.jar 파일은 설치된 Avro 버전의 java 하위 디렉터리에 있습니다. Avro를 다운로드하려면 Apache Avro releases(Apache Avro 릴리스)를 참조하세요. Apache Avro Tools를 직접 다운로드하려면 Apache Avro tools Maven repository(Apache Avro Tools Maven 리포지토리)를 참조하세요.

스키마를 얻은 후 CREATE TABLE 문을 이용해 Amazon S3에 저장된 기본 Avro 데이터를 기반으로 Athena 테이블을 생성합니다. Avro SerDe를 지정하려면 ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'를 사용합니다. 다음 예제에 설명된 대로 테이블에 대한 열 이름 및 해당 데이터 유형을 지정하는 것 외에도 WITH SERDEPROPERTIES 절을 사용하여 스키마를 지정해야 합니다.

참고

s3://athena-examples-myregion/path/to/data/myregion을, Athena를 실행하는 리전 식별자로 바꿉니다(예: s3://athena-examples-us-west-1/path/to/data/).

CREATE EXTERNAL TABLE flights_avro_example ( yr INT, flightdate STRING, uniquecarrier STRING, airlineid INT, carrier STRING, flightnum STRING, origin STRING, dest STRING, depdelay INT, carrierdelay INT, weatherdelay INT ) PARTITIONED BY (year STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' WITH SERDEPROPERTIES ('avro.schema.literal'=' { "type" : "record", "name" : "flights_avro_subset", "namespace" : "default", "fields" : [ { "name" : "yr", "type" : [ "null", "int" ], "default" : null }, { "name" : "flightdate", "type" : [ "null", "string" ], "default" : null }, { "name" : "uniquecarrier", "type" : [ "null", "string" ], "default" : null }, { "name" : "airlineid", "type" : [ "null", "int" ], "default" : null }, { "name" : "carrier", "type" : [ "null", "string" ], "default" : null }, { "name" : "flightnum", "type" : [ "null", "string" ], "default" : null }, { "name" : "origin", "type" : [ "null", "string" ], "default" : null }, { "name" : "dest", "type" : [ "null", "string" ], "default" : null }, { "name" : "depdelay", "type" : [ "null", "int" ], "default" : null }, { "name" : "carrierdelay", "type" : [ "null", "int" ], "default" : null }, { "name" : "weatherdelay", "type" : [ "null", "int" ], "default" : null } ] } ') STORED AS AVRO LOCATION 's3://athena-examples-myregion/flight/avro/';

테이블에서 MSCK REPAIR TABLE 문을 실행해 파티션 메타데이터를 새로 고칩니다.

MSCK REPAIR TABLE flights_avro_example;

총 출발 횟수로 상위 10개 출발 도시를 쿼리합니다.

SELECT origin, count(*) AS total_departures FROM flights_avro_example WHERE year >= '2000' GROUP BY origin ORDER BY total_departures DESC LIMIT 10;
참고

비행 테이블 데이터의 출처는 미국 운수부 운송통계국에서 제공한 항공편입니다. 원본에서 채도를 낮췄습니다.