Набор данных Hacker News
В этом руководстве вы вставите 28 миллионов строк данных Hacker News в таблицу ClickHouse из форматов 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 первичный ключ id для данных определяется черезClause ORDER BY
.
Выбор соответствующих типов и определение, какие колонки включить вClause ORDER BY
поможет улучшить скорость запросов и сжатие.
Выполните запрос ниже, чтобы удалить старую схему и создать улучшенную схему:
С оптимизированной схемой теперь можно вставить данные из локальной файловой системы.
Снова с помощью clickhouse-client
вставьте файл, используяClause 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 раза.
Обратите внимание, как индекс позволил пропустить значительное количество гранул для ускорения запроса.
Теперь также можно эффективно искать один или все из нескольких терминов: