El SerDe JSON de Hive - Amazon Athena

El SerDe JSON de Hive

SerDe JSON de Hive se usa normalmente para procesar datos JSON como eventos. Estos eventos se representan como cadenas de una sola línea de texto con codificación JSON separados por una línea nueva. SerDe JSON de Hive no permite claves duplicadas en map ni nombres de claves struct.

nota

El SerDe espera que cada documento JSON esté en una sola línea de texto sin caracteres de terminación de línea que separen los campos del registro. Si el texto JSON está en formato de impresión, puede recibir un mensaje de error como HIVE_CURSOR_ERROR: la fila no es un objeto JSON válido o HIVE_CURSOR_ERROR: JsonParseException: fin de entrada inesperado: marcador de cierre esperado para OBJECT cuando intenta consultar la tabla después de crearla. Para obtener más información, consulte los Archivos de datos JSON en la documentación de OpenX SerDE en GitHub.

La instrucción DDL de ejemplo que se muestra a continuación, utiliza SerDe JSON de Hive para crear una tabla en función de los datos de publicidad en línea de ejemplo. En la cláusula LOCATION, reemplace myregion en s3://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions por el identificador de región donde se ejecuta Athena (por ejemplo, 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';

Especificación de formatos de marca de tiempo con SerDe JSON de Hive

Para analizar los valores de marca de tiempo de una cadena, se puede agregar el subcampo WITH SERDEPROPERTIES a la cláusula ROW FORMAT SERDE y utilizarla para especificar el parámetro timestamp.formats. En el parámetro, se debe especificar una lista separada por comas de uno o más patrones de marca de tiempo, como en el siguiente ejemplo:

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

Para obtener más información, consulte Timestamps en la documentación de Apache Hive.

Carga de la tabla para consultas

Después de crear la tabla, ejecute MSCK REPAIR TABLE para cargar la tabla y hacerla consultable desde Athena:

MSCK REPAIR TABLE impressions

Consulta de registros de CloudTrail

Puede usar los SerDe JSON de Hive para consultar los registros de CloudTrail. Para obtener más información y ejemplos de las instrucciones CREATE TABLE, consulte Consulta de registros de AWS CloudTrail.