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 に基づいています。オリジナルからの不飽和。

このページの内容: