Avro SerDe를 사용하여 Avro 데이터에서 Athena 테이블을 생성합니다.
직렬화 라이브러리 이름
Avro SerDe의 직렬화 라이브러리 이름은 org.apache.hadoop.hive.serde2.avro.AvroSerDe
입니다. 기술 정보는 Apache 설명서의 AvroSerDe
Avro SerDe 사용
보안상의 이유로 Athena에서는 avro.schema.url
을 이용해 테이블 스키마를 지정할 수 없습니다. 대신 avro.schema.literal
을 사용합니다.
Avro 형식의 데이터에서 스키마를 추출하려면 설치된 Avro 릴리스의 java
하위 디렉토리에 있는 Apache avro-tools-
파일을 사용합니다. 다음 예제와 같이 <version>
.jargetschema
파라미터를 사용하면 WITH SERDEPROPERTIES
문에 사용할 수 있는 스키마가 반환됩니다.
java -jar avro-tools-1.8.2.jar getschema my_data.avro
Avro를 다운로드하려면 Apache Avro releases
스키마를 얻은 후 CREATE TABLE
문을 이용해 Amazon S3에 저장된 기본 Avro 데이터를 기반으로 Athena 테이블을 생성합니다. CREATE TABLE
문에서 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;