

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

Normalmente, o Hive JSON SerDe é usado para processar dados JSON como eventos. Esses eventos são representados como strings em uma só linha codificadas em JSON separadas por uma nova linha. O Hive JSON SerDe não permite chaves duplicadas nos nomes de chaves `map` ou `struct`.

**nota**  
O SerDe espera que cada documento JSON esteja em uma única linha de texto, sem caracteres de terminação de linha separando os campos no registro. Se o texto JSON estiver formatado para impressão, você poderá receber uma mensagem de erro como HIVE\$1CURSOR\$1ERROR: Row is not a valid JSON Object (HIVE\$1CURSOR\$1ERROR: a linha não é um objeto JSON válido) ou HIVE\$1CURSOR\$1ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (HIVE\$1CURSOR\$1ERROR: JSONParseException: Fim de entrada inesperado: marcador de fechamento esperado para OBJECT) quando tentar consultar a tabela após criá-la. Para obter mais informações, consulte [JSON Data Files](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files) na documentação do OpenX SerDe no GitHub. 

A instrução DDL de exemplo a seguir usa o Hive JSON SerDe para criar uma tabela com base em dados de publicidade online de exemplo. Na cláusula `LOCATION`, substitua *myregion* em `s3://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions` pela região onde o Athena é executado (por exemplo, `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';
```

## Especificação de formatos de carimbo de data/hora com o Hive JSON SerDe
<a name="hive-json-serde-timestamp-formats"></a>

Para analisar valores de carimbo de data/hora da string, você pode adicionar o subcampo `WITH SERDEPROPERTIES` à cláusula `ROW FORMAT SERDE` e usá-lo para especificar o parâmetro `timestamp.formats`. No parâmetro, especifique uma lista separada por vírgula de um ou mais padrões de carimbo de data/hora, como no seguinte exemplo:

```
...
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 obter mais informações, consulte [Carimbos de data/hora](https://cwiki.apache.org/confluence/display/hive/languagemanual+types#LanguageManualTypes-TimestampstimestampTimestamps) na documentação do Apache Hive.

## Carregamento de tabela para consulta
<a name="hive-json-serde-loading-the-table"></a>

Após criar a tabela, execute [MSCK REPAIR TABLE](msck-repair-table.md) para carregá-la e torná-la consultável no Athena:

```
MSCK REPAIR TABLE impressions
```

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

É possível usar o Hive JSON SerDe para consultar os logs do CloudTrail. Para obter mais informações e instruções `CREATE TABLE` de exemplo, consulte [Consultar logs do AWS CloudTrail](cloudtrail-logs.md).