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_CURSOR_ERROR: Row is not a valid JSON Object
(HIVE_CURSOR_ERROR: a linha não é um objeto JSON válido) ou HIVE_CURSOR_ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT
(HIVE_CURSOR_ERROR: 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
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
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
Carregamento de tabela para consulta
Após criar a tabela, execute MSCK REPAIR TABLE para carregá-la e torná-la consultável no Athena:
MSCK REPAIR TABLE impressions
Consulta a logs do CloudTrail
É 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.