

# El SerDe de Avro
<a name="avro-serde"></a>

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

## Nombre de la biblioteca de serialización
<a name="avro-serde-library-name"></a>

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](https://cwiki.apache.org/confluence/display/Hive/AvroSerDe) en la documentación de Apache. 

## Uso del SerDe de Avro
<a name="avro-serde-using"></a>

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](http://avro.apache.org/releases.html#Download). Para descargar Apache Avro Tools directamente, consulte la página del [repositorio Maven de Apache Avro Tools](https://mvnrepository.com/artifact/org.apache.avro/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](http://www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&amp;DB_Short_Name=On-Time) proporcionados por la [Oficina de Estadísticas del Transporte](http://www.transtats.bts.gov/) del Departamento de Transporte de los Estados Unidos. Desaturado del original.