SerDe JSON Hive
Le SerDe JSON Hive est couramment utilisé pour traiter des données JSON telles que des événements. Ces événements sont représentés sous forme de chaînes sur une ligne de texte codées en JSON et séparées par une nouvelle ligne. Le SerDe JSON Hive n'autorise pas les clés en double dans les noms de clé map ou struct.
Note
Le SerDe s'attend à ce que chaque document JSON soit sur une seule ligne de texte, sans caractères de fin de ligne pour séparer les champs de l'enregistrement. Si le texte JSON est au format d'impression, vous pouvez recevoir un message d'erreur similaire à HIVE_CURSOR_ERROR : Row is not a valid JSON Object (La ligne n'est pas un JSON valide) ou HIVE_CURSOR_ERROR : JSONParseException : Unexpected end-of-input: expected close marker for OBJECT (Fin d'entrée inattendue : marqueur de fermeture attendu pour OBJECT) lorsque vous tentez d'interroger la table après l'avoir créée. Pour de plus amples informations, consultez la section Fichiers de données JSON
L'exemple d'instruction DDL suivant utilise le SerDe JSON Hive pour créer une table basée sur des exemples de données publicitaires en ligne. Dans la clause LOCATION, remplacez myregion dans s3://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions par l'identifiant de la région où vous exécutez Athena (par exemple, s3://us-west-2.elasticmapreduce/samples/hive-ads/tables/impressions).
CREATE EXTERNAL TABLE impressions ( requestbegintime string, adid string, impressionid string, referrer string, useragent string, usercookie string, ip string, number string, processid string, browsercookie string, requestendtime string, timers struct < modellookup:string, requesttime:string >, threadid string, hostname string, sessionid string ) PARTITIONED BY (dt string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION 's3://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions';
Spécification des formats d’horodatage avec le SerDe JSON Hive
Pour analyser les valeurs de l'horodatage à partir d'une chaîne, vous pouvez ajouter le sous-champ WITH
SERDEPROPERTIES à la clause ROW FORMAT SERDE et l'utiliser pour spécifier le paramètre timestamp.formats. Dans le paramètre, spécifiez une liste séparée par des virgules d'un ou plusieurs modèles d'horodatage, comme dans l'exemple suivant :
... ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' WITH SERDEPROPERTIES ("timestamp.formats"="yyyy-MM-dd'T'HH:mm:ss.SSS'Z',yyyy-MM-dd'T'HH:mm:ss") ...
Pour en savoir plus, consultez la rubrique Horodatage
Chargement de la table pour interrogation
Après avoir créé la table, exécutez MSCK REPAIR TABLE pour charger la table et la rendre interrogeable à partir d'Athena :
MSCK REPAIR TABLE impressions
Interrogation des journaux CloudTrail
Vous pouvez utiliser le SerDe JSON de Hive pour interroger les journaux CloudTrail. Pour plus d'informations et des exemples d'instructions CREATE TABLE, voir Interrogation des journaux AWS CloudTrail.