Carregando JSON estruturado
NDJSON (JSON delimitado por nova linha), conhecido como JSONEachRow no ClickHouse, e bem estruturados, ou seja, os nomes e tipos das colunas são fixos. O NDJSON é o formato preferido para carregamento de JSON devido à sua concisão e uso eficiente de espaço, mas outros formatos são suportados tanto para entrada quanto para saída.
Considere o seguinte exemplo de JSON, que representa uma linha do Python PyPI dataset:
Prefira esquemas estáticos sempre que possívelNos casos em que suas colunas têm nomes e tipos fixos, e não se espera a criação de novas colunas, sempre prefira um esquema definido estaticamente em produção.O tipo JSON é preferível para dados altamente dinâmicos, em que os nomes e tipos das colunas podem mudar. Esse tipo também é útil para prototipagem e exploração de dados.
Chaves de ordenaçãoSelecionamos aqui uma chave de ordenação por meio da cláusula
ORDER BY. Para mais detalhes sobre chaves de ordenação e como escolhê-las, consulte aqui.*.json.gz no bucket. O ClickHouse infere automaticamente que o formato é JSONEachRow (ndjson) com base na extensão e no conteúdo do arquivo. Um formato pode ser especificado manualmente por meio de funções de parâmetro caso o ClickHouse não consiga detectá-lo automaticamente.
Arquivos compactadosOs arquivos acima também são compactados. O ClickHouse detecta e processa isso automaticamente.
INSERT INTO SELECT:
FORMAT, por exemplo.
JSONEachRow. Também há suporte a outros formatos JSON comuns, com exemplos de carregamento disponíveis aqui.
Carregando JSON semiestruturado
JSON específico.
Considere o exemplo a seguir de uma versão estendida do Python PyPI dataset mencionado acima. Aqui, adicionamos uma coluna tags arbitrária com pares aleatórios de chave-valor.
tags aqui é imprevisível e, portanto, impossível de modelar. Para carregar esses dados, podemos usar nosso esquema anterior, mas incluir uma coluna adicional tags do tipo JSON:
Quando usar o tipo JSON
- Têm chaves imprevisíveis que podem mudar ao longo do tempo.
- Contêm valores com tipos diferentes (por exemplo, um caminho pode às vezes conter uma string e, em outras, um número).
- Exigem flexibilidade de schema quando a tipagem estrita não é viável.
- Uma estrutura plana com chaves conhecidas: use tipos de coluna padrão, por exemplo, String.
- Aninhamento previsível: use os tipos Tuple, Array ou Nested para essas estruturas.
- Estrutura previsível com tipos variados: considere usar os tipos Dynamic ou Variant.