El SerDe de Avro - Amazon Athena

El SerDe de Avro

Nombre del SerDe

El SerDe de Avro

Nombre de la biblioteca

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

Ejemplos

Por motivos de seguridad, Athena no es compatible con el uso de avro.schema.url para especificar el esquema de la tabla. Utilice avro.schema.literal. Para extraer el esquema de datos en formato Avro, puede utilizar el avro-tools-<version>.jar de Apache con el parámetro getschema. Esto devuelve un esquema que puede utilizar en su instrucción WITH SERDEPROPERTIES. Por ejemplo:

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

El archivo avro-tools-<version>.jar se encuentra en el subdirectorio java de la versión de Avro que tiene instalada. 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, utilice ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'. Como se demuestra en el ejemplo siguiente, debe especificar el esquema mediante la cláusula WITH SERDEPROPERTIES además de especificar los nombres de columna y los tipos de datos correspondientes para la tabla.

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.