SerDe Avro
Utilisez le SerDe Avro pour créer des tables Athena à partir de données Avro.
Nom de la bibliothèque de sérialisation
La bibliothèque de sérialisation du SerDe Avro est nommée org.apache.hadoop.hive.serde2.avro.AvroSerDe. Pour plus d’informations techniques, consultez AvroSerDe
Utilisation du SerDe Avro
Pour des raisons de sécurité, Athena ne permet pas de spécifier le schéma de table à l’aide de avro.schema.url. Il est recommandé d’utiliser avro.schema.literal.
Pour extraire le schéma de données au format Avro, utilisez le fichier Apache avro-tools- qui se trouve dans le sous-répertoire <version>.jarjava de votre version d’Avro. Utilisez le paramètre getschema pour renvoyer un schéma que vous pourrez utiliser dans votre instruction WITH SERDEPROPERTIES, comme illustré dans l’exemple suivant.
java -jar avro-tools-1.8.2.jar getschema my_data.avro
Pour télécharger Avro, consultez les versions d'Apache Avro
Après avoir obtenu le schéma, utilisez une instruction CREATE TABLE pour créer une table Athena à partir des données Avro sous-jacentes stockées dans Amazon S3. Pour spécifier le SerDe Avro dans votre instruction CREATE TABLE, utilisez ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.avro.AvroSerDe'. Spécifiez le schéma à l’aide de la clause WITH SERDEPROPERTIES, comme illustré dans l’exemple suivant.
Note
Remplacez myregion dans s3://athena-examples- par l'identifiant de région dans lequel vous exécutez Athena, par exemple, 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/';
Exécutez l'instruction MSCK REPAIR TABLE sur la table pour actualiser les métadonnées de la partition.
MSCK REPAIR TABLE flights_avro_example;
Recherchez les 10 principales villes de départ par nombre total de départs.
SELECT origin, count(*) AS total_departures FROM flights_avro_example WHERE year >= '2000' GROUP BY origin ORDER BY total_departures DESC LIMIT 10;
Note
Les données du tableau des vols proviennent des Vols