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