Набор данных Hacker News
В этом руководстве вы загрузите в таблицу ClickHouse 28 миллионов строк данных Hacker News из форматов CSV и Parquet и выполните несколько простых запросов, чтобы изучить данные.
CSV
Просмотр данных
clickhouse-local позволяет выполнять быструю обработку локальных файлов без необходимости развёртывания и настройки сервера ClickHouse.
Перед сохранением данных в ClickHouse давайте просмотрим файл с помощью clickhouse-local. Выполните в консоли:
Далее выполните следующую команду для просмотра данных:
В этой команде реализовано множество полезных возможностей.
Оператор file позволяет читать файл с локального диска, указывая только формат CSVWithNames.
Что особенно важно — схема автоматически определяется из содержимого файла.
Обратите также внимание, что clickhouse-local может читать сжатые файлы, определяя формат gzip по расширению.
Формат Vertical используется для более удобного просмотра данных по столбцам.
Загрузка данных с выводом схемы
Самым простым и мощным инструментом для загрузки данных является clickhouse-client — многофункциональный нативный клиент командной строки.
Для загрузки данных можно снова воспользоваться автоматическим определением схемы, доверив ClickHouse определение типов столбцов.
Выполните следующую команду, чтобы создать таблицу и вставить данные напрямую из удалённого CSV-файла, обращаясь к его содержимому через функцию url.
Схема определяется автоматически:
Это создает пустую таблицу, используя схему, автоматически определенную из данных.
Команда DESCRIBE TABLE позволяет просмотреть назначенные типы данных.
Для вставки данных в эту таблицу используйте команду INSERT INTO, SELECT.
В сочетании с функцией url данные будут передаваться напрямую из URL:
Вы успешно добавили 28 миллионов строк в ClickHouse одной командой!
Изучение данных
Получите выборку историй Hacker News и определённых столбцов, выполнив следующий запрос:
Хотя автоматический вывод схемы является полезным инструментом для первоначального исследования данных, он работает по принципу «наилучшей попытки» и не может служить долгосрочной заменой явному определению оптимальной схемы для ваших данных.
Определите схему
Очевидная оптимизация — определить тип для каждого поля.
Помимо объявления поля времени как типа DateTime, определим соответствующий тип для каждого из полей ниже после удаления существующего набора данных.
В ClickHouse первичный ключ для данных определяется с помощью конструкции ORDER BY.
Выбор подходящих типов данных и столбцов для включения в конструкцию ORDER BY поможет повысить скорость выполнения запросов и улучшить сжатие данных.
Выполните следующий запрос, чтобы удалить старую схему и создать улучшенную:
После оптимизации схемы можно загрузить данные из локальной файловой системы.
Снова используя clickhouse-client, загрузите файл с помощью конструкции INFILE с явным указанием INSERT INTO.
Выполните примеры запросов
Ниже представлены примеры запросов для вдохновения при написании собственных запросов.
Насколько распространена тема «ClickHouse» на Hacker News?
Поле score предоставляет метрику популярности для историй, а поле id и оператор конкатенации || можно использовать для формирования ссылки на исходную публикацию.
Генерирует ли ClickHouse больше шума со временем? Здесь демонстрируется преимущество определения поля time
как DateTime, так как использование правильного типа данных позволяет использовать функцию toYYYYMM():
Похоже, что популярность ClickHouse со временем растёт.
Кто чаще всего комментирует статьи о ClickHouse?
Какие комментарии вызывают наибольший интерес?
Parquet
Одно из сильных качеств ClickHouse — его способность работать с произвольным количеством форматов. CSV представляет собой довольно удобный вариант использования, но при этом не является наиболее эффективным форматом для обмена данными.
Далее вы загрузите данные из файла Parquet, который является эффективным колоночным форматом хранения данных.
В Parquet есть минимальный набор типов, который ClickHouse должен учитывать, и информация о типах закодирована в самом формате. Автоматическое определение типов для файла Parquet неизбежно приведёт к слегка отличающейся схеме по сравнению со схемой для файла CSV.
Вставьте данные
Выполните следующий запрос для чтения тех же данных в формате Parquet, используя функцию url для чтения удалённых данных:
В силу особенностей формата Parquet необходимо учитывать, что ключи могут принимать значение NULL,
даже если в самих данных они таковыми не являются.
Выполните следующую команду для просмотра выведенной схемы:
Как и в случае с CSV-файлом, вы можете указать схему вручную для более точного контроля над выбранными типами и вставить данные напрямую из S3:
Добавьте индекс пропуска для ускорения запросов
Чтобы узнать, сколько комментариев упоминают «ClickHouse», выполните следующий запрос:
Далее создайте инвертированный индекс для столбца "comment", чтобы ускорить выполнение этого запроса. Обратите внимание, что комментарии будут индексироваться в нижнем регистре для поиска терминов независимо от регистра.
Выполните следующие команды для создания индекса:
Материализация индекса занимает некоторое время (чтобы проверить, создан ли индекс, используйте системную таблицу system.data_skipping_indices).
Выполните запрос повторно после создания индекса:
Обратите внимание, что теперь запрос выполнился всего за 0,248 секунды с индексом — по сравнению с 0,843 секунды без него:
Оператор EXPLAIN можно использовать, чтобы понять, почему добавление этого индекса
ускорило выполнение запроса примерно в 3,4 раза.
Обратите внимание, как индекс позволил пропустить значительное количество гранул для ускорения выполнения запроса.
Теперь также можно эффективно выполнять поиск по одному или всем из нескольких терминов: