El SerDe de Avro - Amazon Athena

El SerDe de Avro

Utilice el SerDe de Avro para crear tablas de Athena a partir de los datos de Avro.

Nombre de la biblioteca de serialización

El nombre de la biblioteca de serialización del SerDe de Avro es org.apache.hadoop.hive.serde2.avro.AvroSerDe. Para obtener información técnica, consulte AvroSerDe en la documentación de Apache.

Uso del SerDe de Avro

Por motivos de seguridad, Athena no admite el uso de avro.schema.url para especificar el esquema de la tabla. Utilice avro.schema.literal en su lugar.

Para extraer el esquema de los datos en formato Avro, utilice el archivo avro-tools-<version>.jar de Apache que se encuentra en el subdirectorio java de la versión de Avro instalada. Use el parámetro getschema para devolver un esquema que pueda utilizar en la instrucción WITH SERDEPROPERTIES, como en el siguiente ejemplo.

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

Para descargar Avro, consulte la página que contiene las versiones de Apache Avro. Para descargar Apache Avro Tools directamente, consulte la página del repositorio Maven de Apache Avro Tools.

Una vez obtenido el esquema, utilice una instrucción CREATE TABLE para crear una tabla de Athena basada en los datos de Avro subyacentes almacenados en Amazon S3. Para especificar el SerDe de Avro en la instrucción CREATE TABLE, utilice ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'. Especifique el esquema mediante la cláusula WITH SERDEPROPERTIES, como se muestra en el siguiente ejemplo.

nota

Reemplace myregion en s3://athena-examples-myregion/path/to/data/ por el identificador de región donde se ejecuta Athena, por ejemplo, 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/';

Ejecute la instrucción MSCK REPAIR TABLE en la tabla para actualizar los metadatos de partición.

MSCK REPAIR TABLE flights_avro_example;

Consulte las 10 primeras ciudades de salida en función del número total de salidas.

SELECT origin, count(*) AS total_departures FROM flights_avro_example WHERE year >= '2000' GROUP BY origin ORDER BY total_departures DESC LIMIT 10;
nota

Los datos de la tabla de vuelos provienen de Vuelos proporcionados por la Oficina de Estadísticas del Transporte del Departamento de Transporte de los Estados Unidos. Desaturado del original.