Amazon Athena
ユーザーガイド

Avro SerDe

SerDe 名

Avro SerDe

ライブラリ名

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

Athena では、セキュリティ上の理由から、avro.schema.url を使用したテーブルスキーマの指定はサポートしていません。avro.schema.literal を使用します。Avro ファイルからスキーマを抽出するには、Apache の avro-tools-<version>.jargetschema パラメータを使用できます。これによって返されるスキーマを WITH SERDEPROPERTIES ステートメントで使用できます。以下に例を示します。

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

avro-tools-<version>.jar ファイルは、インストールした Avro リリースの java サブディレクトリにあります。Avro をダウンロードするには、Apache Avro リリースを参照してください。Apache Avro Tools を直接ダウンロードするには、Apache Avro Tools を参照してください。

スキーマを取得したら、CREATE TABLE ステートメントを使用して、Amazon S3 に保存されている基となる Avro データに基づいて Athena テーブルを作成します。ROW FORMAT で、Avro SerDe を次のように指定します: ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'SERDEPROPERTIES で、以下の例に示すように、スキーマを指定します。

注記

Athena を実行するリージョン以外のリージョンのデータをクエリすることができます。Athena の標準料金に加えて、Amazon S3 の標準のリージョン間データ転送料金が適用されます。データ転送料金を削減するには、s3://athena-examples-myregion/path/to/data/myregion を、たとえば、s3://athena-examples-us-east-1/path/to/data/ のように Athena を実行するリージョン識別子に置き換えます。

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;

注記

フライトテーブルのデータは、米国 Department of Transportation、Bureau of Transportation Statistics が提供する Flights に基づいています。オリジナルからの不飽和。

このページの内容: