Avro SerDe - Amazon Athena

Avro SerDe

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

Nome da biblioteca de serialização

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 na documentação do Apache.

Usar o Avro SerDe

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 (Versões do Apache Avro). Para baixar o Apache Avro Tools diretamente, acesse o repositório do Apache Avro Tools Maven.

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 fornecidos pelo Departamento de Transportes dos EUA, Bureau of Transportation Statistics (Agência de Estatísticas de Transportes). Saturação do original removida.