Pular para o conteúdo principal
Nos exemplos anteriores de carregamento de dados JSON, pressupõe-se o uso de JSONEachRow (NDJSON). Esse formato interpreta as chaves em cada linha JSON como colunas. Por exemplo:
Embora esse seja, em geral, o formato mais comum para JSON, você encontrará outros formatos ou precisará ler o JSON como um único objeto. Abaixo, fornecemos exemplos de leitura e carregamento de JSON em outros formatos comuns.

Lendo JSON como um objeto

Nossos exemplos anteriores mostram como JSONEachRow lê JSON delimitado por quebras de linha, com cada linha sendo lida como um objeto separado, mapeado para uma linha da tabela, e cada chave para uma coluna. Isso é ideal para casos em que o JSON é previsível, com um único tipo para cada coluna. Em contraste, JSONAsObject trata cada linha como um único objeto JSON e o armazena em uma única coluna, do tipo JSON, o que o torna mais adequado para payloads JSON aninhados e casos em que as chaves são dinâmicas e podem ter mais de um tipo. Use JSONEachRow para inserts linha a linha e JSONAsObject ao armazenar dados JSON flexíveis ou dinâmicos. Compare o exemplo acima com a consulta a seguir, que lê os mesmos dados como um objeto JSON por linha:
JSONAsObject é útil para inserir linhas em uma tabela usando uma única coluna do tipo objeto JSON, por exemplo.
O formato JSONAsObject também pode ser útil para ler JSON delimitado por quebras de linha nos casos em que a estrutura dos objetos é inconsistente. Por exemplo, se uma chave varia de tipo entre as linhas (às vezes pode ser uma string, mas em outras, um objeto). Nesses casos, o ClickHouse não consegue inferir um esquema estável usando JSONEachRow, e JSONAsObject permite que os dados sejam ingeridos sem impor tipos rígidos, armazenando cada linha JSON inteira em uma única coluna. Por exemplo, observe como JSONEachRow falha no exemplo a seguir:
Por outro lado, JSONAsObject pode ser usado neste caso, pois o tipo JSON aceita vários tipos para a mesma subcoluna.

Array de objetos JSON

Uma das formas mais comuns de dados JSON é ter uma lista de objetos JSON em um array JSON, como neste exemplo:
Vamos criar uma tabela para esse tipo de dado:
Para importar uma lista de objetos JSON, podemos usar o formato JSONEachRow (inserindo os dados do arquivo list.json):
Usamos uma cláusula FROM INFILE para carregar os dados de um arquivo local, e podemos ver que a importação foi bem-sucedida:

Chaves de objetos JSON

Em alguns casos, a lista de objetos JSON pode ser codificada como propriedades do objeto em vez de elementos do array (consulte objects.json, por exemplo):
O ClickHouse pode carregar dados a partir desse tipo de dado usando o formato JSONObjectEachRow:

Especificando valores de chave de objetos pai

Digamos que também queremos salvar na tabela os valores das chaves de objetos pai. Nesse caso, podemos usar a opção a seguir para definir o nome da coluna em que queremos salvar os valores das chaves:
Agora, podemos verificar quais dados serão carregados do arquivo JSON original com a função file():
Observe como a coluna id foi preenchida corretamente com os valores das chaves.

Arrays JSON

Às vezes, para economizar espaço, os arquivos JSON são codificados como arrays em vez de objetos. Nesse caso, lidamos com uma lista de arrays JSON:
Nesse caso, o ClickHouse carregará esses dados e atribuirá cada valor à coluna correspondente com base em sua ordem no array. Para isso, usamos o formato JSONCompactEachRow:

Importando colunas individuais de arrays JSON

Em alguns casos, os dados podem ser codificados em colunas em vez de em linhas. Nesse caso, um objeto JSON pai contém colunas com valores. Veja o arquivo a seguir:
O ClickHouse usa o formato JSONColumns para analisar dados formatados desta forma:
Um formato mais compacto também é compatível ao trabalhar com um array de colunas em vez de um objeto, usando o formato JSONCompactColumns:

Salvando objetos JSON em vez de analisá-los

Há casos em que você pode querer salvar objetos JSON em uma única coluna String (ou JSON) em vez de analisá-los. Isso pode ser útil ao lidar com uma lista de objetos JSON com estruturas diferentes. Vamos usar este arquivo como exemplo, em que temos vários objetos JSON diferentes dentro de uma lista principal:
Queremos salvar os objetos JSON originais na tabela abaixo:
Agora podemos carregar dados do arquivo nesta tabela usando o formato JSONAsString para preservar os objetos JSON em vez de interpretá-los:
Também podemos usar funções JSON para consultar objetos salvos:
Observe que JSONAsString funciona perfeitamente bem em casos em que temos arquivos formatados com um objeto JSON por linha (geralmente usados com o formato JSONEachRow).

Esquema para objetos aninhados

Nos casos em que lidamos com objetos JSON aninhados, também podemos definir um esquema explícito e usar tipos complexos (Array, JSON ou Tuple) para carregar dados:

Acessando objetos JSON aninhados

Podemos nos referir às chaves JSON aninhadas ativando a seguinte opção de configuração:
Isso nos permite referenciar as chaves de objetos JSON aninhados usando notação de ponto (lembre-se de colocá-las entre crases para que funcione):
Dessa forma, podemos desaninhar objetos JSON aninhados ou usar alguns valores aninhados para salvá-los em colunas separadas.

Ignorando colunas desconhecidas

Por padrão, o ClickHouse ignora colunas desconhecidas ao importar dados JSON. Vamos tentar importar o arquivo original para a tabela sem a coluna month:
Ainda podemos inserir os dados JSON originais, com 3 colunas, nesta tabela:
O ClickHouse ignorará colunas desconhecidas durante a importação. Isso pode ser desativado com a opção de configuração input_format_skip_unknown_fields:
O ClickHouse gerará exceções em casos de inconsistência entre o JSON e a estrutura de colunas da tabela.

BSON

O ClickHouse permite exportar dados para arquivos codificados em BSON e importá-los deles. Esse formato é usado por alguns SGBDs, como o banco de dados MongoDB. Para importar dados em BSON, usamos o formato BSONEachRow. Vamos importar dados deste arquivo BSON:
Também é possível exportar para arquivos BSON usando o mesmo formato:
Depois disso, nossos dados serão exportados para o arquivo out.bson.
Última modificação em 2 de julho de 2026