Avro SerDe - Amazon Athena

Avro SerDe

Avro SerDe を使用して、Avro データから Athena テーブルを作成します。

シリアル化ライブラリ名

Avro SerDe のシリアル化ライブラリ名は org.apache.hadoop.hive.serde2.avro.AvroSerDe です。技術情報については、Apache ドキュメントの「AvroSerDe」を参照してください。

Avro SerDe を使用する

セキュリティ上の理由から、At​​hena はテーブルスキーマを指定するために avro.schema.url を使用することをサポートしていません。代わりに avro.schema.literal を使用してください。

Avro 形式のデータからスキーマを抽出するには、インストールされている Avro リリースの java サブディレクトリにある Apache avro-tools-<version>.jar ファイルを使用します。次の例のように、getschema パラメータを使用して、WITH SERDEPROPERTIES ステートメントで使用できるスキーマを返します。

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

Avro をダウンロードする場合は、Apache Avro リリースを参照してください。Apache Avro Tools を直接ダウンロードする場合は、Apache Avro tools Maven リポジトリを参照してください。

スキーマを取得したら、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;
注記

フライトテーブルデータは、米国運輸省の運輸統計局が提供する Flights からのものです。オリジナルを白黒に変換しています。