Почти любой JSON-формат, используемый для импорта, можно использовать и для экспорта. Самый популярный — JSONEachRow:
SELECT * FROM sometable FORMAT JSONEachRow
{"path":"Bob_Dolman","month":"2016-11-01","hits":245}
{"path":"1-krona","month":"2017-01-01","hits":4}
{"path":"Ahmadabad-e_Kalij-e_Sofla","month":"2017-01-01","hits":3}
Или можно использовать JSONCompactEachRow, чтобы сэкономить место на диске, не записывая имена столбцов:
SELECT * FROM sometable FORMAT JSONCompactEachRow
["Bob_Dolman", "2016-11-01", 245]
["1-krona", "2017-01-01", 4]
["Ahmadabad-e_Kalij-e_Sofla", "2017-01-01", 3]
Переопределение типов данных в строки
ClickHouse учитывает типы данных и экспортирует JSON в соответствии со стандартами. Но если нужно, чтобы все значения кодировались как строки, можно использовать формат JSONStringsEachRow:
SELECT * FROM sometable FORMAT JSONStringsEachRow
{"path":"Bob_Dolman","month":"2016-11-01","hits":"245"}
{"path":"1-krona","month":"2017-01-01","hits":"4"}
{"path":"Ahmadabad-e_Kalij-e_Sofla","month":"2017-01-01","hits":"3"}
Теперь числовой столбец hits кодируется как строка. Экспорт в виде строк поддерживается для всех форматов JSON* — просто посмотрите форматы JSONStrings\* и JSONCompactStrings\*:
SELECT * FROM sometable FORMAT JSONCompactStringsEachRow
["Bob_Dolman", "2016-11-01", "245"]
["1-krona", "2017-01-01", "4"]
["Ahmadabad-e_Kalij-e_Sofla", "2017-01-01", "3"]
Формат JSON, широко используемый в приложениях, экспортирует не только результирующие данные, но и типы столбцов и статистику запроса:
SELECT * FROM sometable FORMAT JSON
{
"meta":
[
{
"name": "path",
"type": "String"
},
...
],
"data":
[
{
"path": "Bob_Dolman",
"month": "2016-11-01",
"hits": 245
},
...
],
"rows": 3,
"statistics":
{
"elapsed": 0.000497457,
"rows_read": 3,
"bytes_read": 87
}
}
Формат JSONCompact выведет те же метаданные, но сами данные будут представлены в компактной форме:
SELECT * FROM sometable FORMAT JSONCompact
{
"meta":
[
{
"name": "path",
"type": "String"
},
...
],
"data":
[
["Bob_Dolman", "2016-11-01", 245],
["1-krona", "2017-01-01", 4],
["Ahmadabad-e_Kalij-e_Sofla", "2017-01-01", 3]
],
"rows": 3,
"statistics":
{
"elapsed": 0.00074981,
"rows_read": 3,
"bytes_read": 87
}
}
Рассмотрите варианты JSONStrings или JSONCompactStrings, чтобы представлять все значения в виде строк.
Компактный способ экспортировать JSON-данные и их структуру
Более эффективный способ получить данные вместе с их структурой — использовать формат JSONCompactEachRowWithNamesAndTypes:
SELECT * FROM sometable FORMAT JSONCompactEachRowWithNamesAndTypes
["path", "month", "hits"]
["String", "Date", "UInt32"]
["Bob_Dolman", "2016-11-01", 245]
["1-krona", "2017-01-01", 4]
["Ahmadabad-e_Kalij-e_Sofla", "2017-01-01", 3]
При этом будет использоваться компактный JSON-формат с двумя строками заголовка в начале: с именами столбцов и их типами. Затем этот формат можно использовать для загрузки данных в другой экземпляр ClickHouse (или другие приложения).
Чтобы сохранить экспортированные данные JSON в файл, можно использовать конструкцию INTO OUTFILE:
SELECT * FROM sometable INTO OUTFILE 'out.json' FORMAT JSONEachRow
36838935 rows in set. Elapsed: 2.220 sec. Processed 36.84 million rows, 1.27 GB (16.60 million rows/s., 572.47 MB/s.)
ClickHouse потребовалось всего 2 секунды, чтобы экспортировать почти 37 миллионов записей в JSON‑файл. Экспорт также можно выполнить с помощью предложения COMPRESSION, чтобы включить сжатие на лету:
SELECT * FROM sometable INTO OUTFILE 'out.json.gz' FORMAT JSONEachRow
36838935 rows in set. Elapsed: 22.680 sec. Processed 36.84 million rows, 1.27 GB (1.62 million rows/s., 56.02 MB/s.)
Это занимает больше времени, но позволяет получить гораздо меньший сжатый файл:
2.2G out.json
576M out.json.gz
Последнее изменение 10 июня 2026 г.