Hive JSON SerDe - Amazon Athena

Hive JSON SerDe

Il SerDe JSON Hive è comunemente usato per elaborare dati JSON come eventi. Questi eventi sono rappresentati come stringhe su una sola riga di testo con codifica JSON separati da una nuova riga. il SerDe JSON Hive non consente chiavi duplicate nei nomi di chiavi map o struct.

Nota

SerDe prevede che ogni documento JSON sia su una singola riga di testo senza caratteri di terminazione riga che separano i campi nel registro. Se il testo JSON è formattato, quando si prova a eseguire una query sulla tabella dopo averla creata, è possibile che venga visualizzato un messaggio di errore come HIVE_CURSOR_ERROR: Row is not a valid JSON Object (HIVE_CURSOR_ERROR: la riga non è un oggetto JSON valido) o HIVE_CURSOR_ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (HIVE_CURSOR_ERROR: JSONParseException: fine di input imprevisto: indicatore di chiusura previsto per OBJECT). Per ulteriori informazioni, consulta File di dati JSON nella documentazione OpenX SerDe su GitHub.

L'istruzione DDL di esempio seguente utilizza SerDe JSON Hive per creare una tabella basata su dati pubblicitari online di esempio. Nella clausola LOCATION, sostituire myregion in s3://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions con l'identificativo della Regione in cui si esegue Athena (ad esempio, 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';

Specificare i formati di marcatura temporale con Hive JSON SerDe

Per analizzare i valori del timestamp dalla stringa, è possibile aggiungere il sottocampo WITH SERDEPROPERTIES per la clausola ROW FORMAT SERDE e usarla per specificare il parametro timestamp.formats. Nel parametro specifica un elenco separato da virgole di uno o più modelli di timestamp, come nell'esempio seguente:

... 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") ...

Per ulteriori informazioni, consulta Marche temporali nella documentazione di Apache Hive.

Caricare la tabella per l'esecuzione di query

Dopo aver creato la tabella, eseguire MSCK REPAIR TABLE per caricare la tabella e renderla eseguibile da Athena:

MSCK REPAIR TABLE impressions

Eseguire query sui log di CloudTrail

Puoi utilizzare Hive JSON SerDe per eseguire query sui log di CloudTrail. Per ulteriori informazioni ed esempi delle istruzioni CREATE TABLE, consulta la pagina Log AWS CloudTrail delle query.