

# El SerDe JSON de Hive
<a name="hive-json-serde"></a>

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\$1CURSOR\$1ERROR: la fila no es un objeto JSON válido o HIVE\$1CURSOR\$1ERROR: 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](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files) 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
<a name="hive-json-serde-timestamp-formats"></a>

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](https://cwiki.apache.org/confluence/display/hive/languagemanual+types#LanguageManualTypes-TimestampstimestampTimestamps) en la documentación de Apache Hive.

## Carga de la tabla para consultas
<a name="hive-json-serde-loading-the-table"></a>

Después de crear la tabla, ejecute [MSCK REPAIR TABLE](msck-repair-table.md) para cargar la tabla y hacerla consultable desde Athena:

```
MSCK REPAIR TABLE impressions
```

## Consulta de registros de CloudTrail
<a name="hive-json-serde-querying-cloud-trail-logs"></a>

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](cloudtrail-logs.md).