Avro SerDe - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Avro SerDe

SerDe 名称

Avro SerDe

库名称

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

Examples

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 工具,请参阅 Apache Avro 工具 Maven 存储库

获取模式后,请使用CREATE TABLE语句根据在 Amazon S3 中存储的底层 AVRO 数据创建 Athena 表。要指定 Avro SerDe,请使用ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'. 如以下示例所示,除了为表指定列名和相应的数据类型之外,还必须使用 WITH SERDEPROPERTIES 子句指定架构。

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由美国交通运输部提供,交通统计局. 从原来的脱饱和。