Перейти к основному содержанию
В этом руководстве вы загрузите 28 миллионов строк данных Hacker News в таблицу ClickHouse из файлов в форматах CSV и Parquet и выполните несколько простых запросов, чтобы изучить эти данные.

CSV

1

Скачать CSV

CSV-версию датасета можно скачать из нашего публичного S3 бакета или с помощью этой команды:
При размере 4,6 ГБ и 28 млн строк загрузка этого сжатого файла должна занять 5–10 минут.
2

Выборка данных

clickhouse-local позволяет быстро обрабатывать локальные файлы без необходимости развёртывать и настраивать сервер ClickHouse.Перед загрузкой данных в ClickHouse давайте сначала сформируем выборку из файла с помощью clickhouse-local. Выполните в консоли:
Затем выполните следующую команду, чтобы просмотреть данные:
Query
Response
В этой команде есть много тонких нюансов. Оператор file позволяет читать файл с локального диска, указав только формат CSVWithNames. Что особенно важно, схема автоматически определяется по содержимому файла. Также обратите внимание, что clickhouse-local умеет читать сжатый файл, определяя формат gzip по расширению. Формат Vertical используется, чтобы удобнее было просматривать данные по каждому столбцу.
3

Загрузите данные с автоматическим определением схемы

Самый простой и мощный инструмент для загрузки данных — clickhouse-client, многофункциональный нативный клиент командной строки. Чтобы загрузить данные, можно снова воспользоваться автоматическим определением схемы и доверить ClickHouse определение типов столбцов.Выполните следующую команду, чтобы создать таблицу и сразу вставить данные из удалённого CSV-файла, обращаясь к его содержимому через функцию url. Схема будет определена автоматически:
Это создаёт пустую таблицу, используя схему, автоматически выведенную из данных. Команда DESCRIBE TABLE позволяет понять, какие типы были назначены.
Query
Response
Чтобы вставить данные в эту таблицу, используйте команду INSERT INTO, SELECT. С помощью функции url данные будут передаваться напрямую по URL:
Вы успешно вставили 28 миллионов строк в ClickHouse одной командой!
4

Изучите данные

Чтобы просмотреть выборку историй Hacker News и отдельных столбцов, выполните следующий запрос:
Query
Response
Хотя автоматическое определение схемы — отличный инструмент для первоначального изучения данных, оно работает по принципу «best effort» и в долгосрочной перспективе не заменяет явного определения оптимальной схемы для ваших данных.
5

Определите схему

Очевидная и простая оптимизация — задать тип для каждого поля. Помимо объявления поля времени с типом DateTime, мы зададим подходящий тип для каждого из перечисленных ниже полей после удаления существующего набора данных. В ClickHouse первичный ключ данных задаётся с помощью предложения ORDER BY.Выбор подходящих типов и определение того, какие столбцы включить в предложение ORDER BY, помогут повысить скорость запросов и улучшить сжатие.Выполните запрос ниже, чтобы удалить старую схему и создать улучшенную схему:
Query
С оптимизированной схемой теперь можно выполнить вставку данных из локального файла. Снова используя clickhouse-client, загрузите файл с помощью предложения INFILE и явного INSERT INTO.
Query
6

Выполнение примеров запросов

Ниже приведены примеры запросов, которые могут послужить отправной точкой для написания собственных запросов.

Насколько часто обсуждается тема «ClickHouse» на Hacker News?

Поле score содержит метрику популярности материалов, тогда как поле id и оператор конкатенации || можно использовать для формирования ссылки на исходную публикацию.
Query
Response
Генерирует ли ClickHouse всё больше шума со временем? Здесь наглядно показана польза от определения поля time как DateTime: использование подходящего типа данных позволяет применять функцию toYYYYMM():
Query
Response
Похоже, что “ClickHouse” со временем набирает популярность.

Кто больше всего комментирует статьи, связанные с ClickHouse?

Query
Response

Какие комментарии вызывают наибольший интерес?

Query
Response

Parquet

Одна из сильных сторон ClickHouse — способность работать с множеством форматов. CSV — почти идеальный сценарий использования, но это не самый эффективный вариант для обмена данными. Далее вы загрузите данные из файла Parquet — эффективного столбцового формата. В Parquet используется минимальный набор типов, который ClickHouse должен учитывать, и информация об этих типах закодирована в самом формате. Вывод типов для файла Parquet неизбежно приведёт к схеме, немного отличающейся от схемы CSV-файла.
1

Вставка данных

Выполните следующий запрос, чтобы снова прочитать те же данные в формате Parquet, используя функцию url для чтения удалённых данных:
Ключи со значением NULL в ParquetИз-за особенностей формата Parquet нужно учитывать, что ключи могут быть NULL, даже если в самих данных их нет.
Выполните следующую команду, чтобы просмотреть автоматически выведенную схему:
Response
Как и в случае с CSV-файлом, вы можете вручную указать схему, чтобы точнее контролировать выбранные типы, и напрямую вставить данные из S3:
2

Добавьте пропускающий индекс, чтобы ускорить запросы

Чтобы узнать, сколько комментариев содержат упоминание “ClickHouse”, выполните следующий запрос:
Query
Response
Далее вы создадите инвертированный индекс по столбцу “comment”, чтобы ускорить этот запрос. Обратите внимание, что комментарии в нижнем регистре будут проиндексированы, чтобы можно было находить термины независимо от регистра.Выполните следующие команды, чтобы создать индекс:
Материализация индекса занимает некоторое время (чтобы проверить, был ли создан индекс, используйте системную таблицу system.data_skipping_indices).После создания индекса снова выполните запрос:
Query
Обратите внимание: теперь запрос с индексом выполняется всего за 0.248 секунды вместо прежних 0.843 секунды без него:
Response
Конструкцию EXPLAIN можно использовать, чтобы понять, почему добавление этого индекса ускорило запрос примерно в 3,4 раза.
Response
Обратите внимание, как индекс позволил пропустить значительное количество гранул, что ускорило выполнение запроса.Теперь также можно эффективно искать по одному или сразу по всем нескольким терминам:
Query
Response
Query
Response
Последнее изменение 1 июля 2026 г.