

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

Use o Avro SerDe para criar tabelas do Athena a partir dos dados do Avro.

## Nome da biblioteca de serialização
<a name="avro-serde-library-name"></a>

O nome da biblioteca de serialização do Avro SerDe é `org.apache.hadoop.hive.serde2.avro.AvroSerDe`. Para obter informações técnicas, consulte [AvroSerDe](https://cwiki.apache.org/confluence/display/Hive/AvroSerDe) na documentação do Apache. 

## Usar o Avro SerDe
<a name="avro-serde-using"></a>

Por motivos de segurança, o Athena não oferece suporte ao uso de `avro.schema.url` para especificação do esquema de tabela; use `avro.schema.literal` em vez disso. 

Para extrair o esquema dos dados no formato Avro, use o arquivo `avro-tools-<version>.jar` do Apache localizado no subdiretório `java` da sua versão instalada do Avro. Use o parâmetro `getschema` para retornar um esquema que você possa usar em sua instrução `WITH SERDEPROPERTIES`, como no exemplo a seguir.

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

Para baixar o Avro, acesse [Apache Avro releases](http://avro.apache.org/releases.html#Download) (Versões do Apache Avro). Para baixar o Apache Avro Tools diretamente, acesse o [repositório do Apache Avro Tools Maven](https://mvnrepository.com/artifact/org.apache.avro/avro-tools).

Depois de obter o esquema, use uma instrução `CREATE TABLE` para criar uma tabela do Athena com base nos dados subjacentes do Avro armazenados no Amazon S3. Para especificar o Avro SerDe na sua instrução `CREATE TABLE`, use `ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'`. Especifique o esquema usando a cláusula `WITH SERDEPROPERTIES`, conforme mostrado no exemplo a seguir.

**nota**  
Substitua *myregion* em `s3://athena-examples-myregion/path/to/data/` pelo identificador da região onde o Athena é executado, por exemplo, `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/';
```

Execute a instrução `MSCK REPAIR TABLE` na tabela para atualizar metadados da partição.

```
MSCK REPAIR TABLE flights_avro_example;
```

Consulte as 10 principais cidades de partida pelo número total de partidas.

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

**nota**  
Os dados da tabela de voos foram extraídos dos [Voos](http://www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&amp;DB_Short_Name=On-Time) fornecidos pelo Departamento de Transportes dos EUA, [Bureau of Transportation Statistics](http://www.transtats.bts.gov/) (Agência de Estatísticas de Transportes). Saturação do original removida.