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
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-
do Apache localizado no subdiretório <version>
.jarjava
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
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-
pelo identificador da região onde o Athena é executado, por exemplo, 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/';
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