El SerDe de Avro
Nombre del SerDe
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. Use 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
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.
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;
Los datos de la tabla de vuelos provienen de Vuelos