Pular para o conteúdo principal

Pergunta

Como importar arrays JSON e consultar os objetos internos?

Resposta

Salve este array JSON de 1 linha em sample.json
Confira os dados:
Crie uma tabela para receber as linhas em JSON:
Insira os dados:
Confira como a inferência de dados tratou o tipo de objeto JSON:
Events é um Array de Tuple, cada um contendo os campos eventType String e time String. Este último tipo não é o ideal (o melhor seria DateTime). Vamos ver os dados:
Vamos executar algumas consultas: _id e channel de eventos cujo eventType tem o valor close
Queremos consultar o time , por exemplo, todos os eventos em um determinado intervalo de tempo, mas percebemos que ele foi importado como String:
Então, para tratar esses valores como datas, primeiro vamos convertê-los para DateTime. Para converter um array, usamos a função map:
podemos observar as diferenças usando toTypeName nos dois arrays:
agora vamos obter o id das linhas em que time está dentro de um determinado intervalo. usamos arrayCount para verificar se há uma contagem maior que 0 de itens no array retornado pela função map que correspondem à condição x BETWEEN toDateTime('2021-06-18 11:46:00', 'Europe/Rome') AND toDateTime('2021-06-18 11:50:00', 'Europe/Rome')
⚠️ Lembre-se de que, no momento em que este artigo foi escrito, a implementação atual de JSON é experimental e não é adequada para produção. Este exemplo mostra como importar JSON rapidamente e começar a fazer consultas, além de ilustrar o equilíbrio entre facilidade de uso e modelagem adequada dos dados: aqui, importamos os objetos JSON como tipo JSON, sem precisar definir previamente o esquema. Isso é conveniente para um teste rápido; no entanto, para uso de longo prazo, o ideal é armazenar os dados com os tipos mais apropriados. Assim, no caso deste exemplo, para o campo time, use DateTime em vez de String, a fim de evitar qualquer conversão após a ingestão, como ilustrado acima. Consulte a documentação para saber mais sobre como trabalhar com JSON.
Última modificação em 3 de julho de 2026