Avro SerDe
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
스키마를 얻은 후 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;