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
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-
de Apache que se encuentra en el subdirectorio <version>
.jarjava
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
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-
por el identificador de región donde se ejecuta Athena, por ejemplo, myregion
/path/to/data/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