Как внедрить ClickHouse с помощью нескольких кликов мышью
Глаза боятся, а руки делают или как внедрить ClickHouse с помощью нескольких кликов мышью
ClickHouse – это быстрая колоночная аналитическая СУБД, разработанная компанией Яндекс. Эта open-source система управления базами данных полностью отказоустойчива, при необходимости ее можно масштабировать (линейное масштабирование). В отличие от других NoSQL СУБД, для выполнения аналитических запросов в режиме реального времени ClickHouse использует собственный диалект SQL.
Если Вы пока не знаете, что такое колоночно-ориентированная база данных, не расстраиваетесь. Команда ClickHouse подготовила подробнейший обзор, посвященный этому виду БД. Потратьте несколько минут своего драгоценного времени и ознакомьтесь с соответствующими разделами документации ClickHouse.
В этой статье я расскажу Вам о том, как установить ClickHouse, загрузить в нее несколько образцов данных и выполнить запросы к загруженным наборам данных. Я искренне надеюсь на то, что этот короткий обзор поможет Вам сэкономить уйму времени и запустить новую базу данных OLAP. Статья полностью основана на официальной документации ClickHouse. Если Вам что-то будет непонятно, обратитесь к оригинальному руководству, составленному командой Clickhouse.
Мы будем запускать Clickhouse в Docker.
Шаг 1
Сначала убедитесь в том, что Вы уже установили и правильно настроили Docker (в соответствии с требованиями Вашей ОС).
Шаг 2
Для хранения данных ClickHouse мы будем использовать файловую систему ОС. Все наборы данных, включая метаданные, будут храниться в каталоге, который необходимо создать в хостовой ОС. В моем случае это clickhouse_db_vol . 1
mkdir $HOME/clickhouse_db_vol
Шаг 3
Установите ClickHouse. Используйте следующую команду оболочки:
docker run -d -p 8123:8123 --name some-clickhouse-server --ulimit nofile=262144:262144 --volume=$HOME/clickhouse_db_vol:/var/lib/clickhouse yandex/clickhouse-server
Данная команда загрузит образ Docker и запустит ClickHouse. С помощью этой команды мы также открыли порт 8123, что позволяет нам использовать REST-интерфейс для взаимодействия с ClickHouse Здесь первый 8123 - это порт локальной ОС, а второй 8123 - порт контейнера.
Шаг 4
Теперь, когда ClickHouse готова к работе, мы можем создавать таблицы, импортировать в них данные и анализировать их. Для работы с ClickHouse можно использовать несколько интерфейсов и специализированных инструментов. Мы будем использовать HTTP-интерфейс и ClickHouse Client.
Шаг 5
Для запуска Clickhouse Client на Docker используйте следующую команду оболочки:
docker run -it --rm --link some-clickhouse-server:clickhouse-server yandex/clickhouse-client --host clickhouse-server
Необходимо запустить новый Clickhouse Client, а также подключиться к серверу через порт 9000.
Пока что все идет хорошо. Теперь мы почти готовы к обработке DDL и DML запросов.
Шаг 6
Теперь создадим базу данных. База данных В ClickHouse - это логическая группа таблиц. Выполните следующий SQL-запрос в ClickHouse Client.
CREATE DATABASE IF NOT EXISTS tutorial
Затем выполните следующий запрос:
show databases
Приведенный выше SQL-запрос отобразит все существующие базы данных.
SHOW DATABASES ┌─name─────┐ │ default │ │ system │ │ tutorial │ └──────────┘
Шаг 7
Как уже говорилось ранее, давайте не будем усложнять ситуацию. Создадим таблицу с тремя столбцами с помощью следующего запроса.
CREATE TABLE test(a String, b UInt8, c FixedString(1)) ENGINE = Log'
Затем вставим часть данных. Для того, чтобы вставить данные в таблицу 'TEST', мы будем использовать следующие операторы.
INSERT INTO tutorial.test (a,b,c) values ('user_1',1,'1');
INSERT INTO tutorial.test (a,b,c) values ('user_2',2,'5');
INSERT INTO tutorial.test (a,b,c) values ('user_3',3,'5');
INSERT INTO tutorial.test (a,b,c) values ('user_1',1,'5');
INSERT INTO tutorial.test (a,b,c) values ('user_4',4,'5');
INSERT INTO tutorial.test (a,b,c) values ('user_5',5,'5');
Шаг 8
Теперь выполним запрос к таблице TEST:
Select count(*) from tutorial.test;
Запрос должен вывести следующий результат:
SELECT count(*) FROM tutorial.test ┌─count()─┐ │ 6 │ └─────────┘ 1 rows in set. Elapsed: 0.017 sec.
Вы можете спросить меня, почему я не стал использовать оператор COMMIT. Да потому, что ClickHouse не поддерживает транзакции.
Шаг 9
На этом шаге для взаимодействия с ClickHouse Вы также можете использовать любой REST-инструмент, например Postman. Для тестирования REST API отправьте следующий HTTP-запрос С помощью любого предпочитаемого Вами инструмента:
http://localhost:8123/?query=select * from tutorial.test where a='user_1'
В нашем случае мы отправляем HTTP GET-запрос вместе с SQL-запросом, который должен вернуть следующий результат:
Пока все очень просто. Давайте немного усложним нашу задачу и попробуем загрузить в Clickhouse несколько больших наборов данных и выполнить несколько аналитических запросов.
Шаг 10
Загрузите набор данных, используя следующую ссылку. Я выбрал набор данных, отображающих историю полетов самолетов одного из аэропортов США. Размер моего набора данных составляет около 15 Гб, он содержит примерно 183 миллиона строк.
Шаг 11
Разархивируйте файл в каталог данных ClickHouse, созданный ранее.
tar xvf ontime.tar -C $HOME/clickhouse_db_vol
Шаг 12
Разархивация файлов займет всего несколько минут. После завершения этого процесса в каталоге данных ClickHouse должна появиться структура каталогов вроде этой:
Шаг 13
Здесь "datasets" - это имена баз данных, созданных в ClickHouse. "Ontime" - это наименование таблицы. Теперь перезапустите контейнер Docker и подождите несколько минут, пока ClickHouse создаст базу данных, таблицы и загрузит в них данные. Как правило, это занимает пару минут.
Шаг 14
Выполните запрос show database. С ее помощью Вы сможете убедиться в том, что база данных с именем "datasets" уже создана.
SHOW DATABASES ┌─name─────┐ │ datasets │ │ default │ │ system │ │ tutorial │ └──────────┘ 4 rows in set. Elapsed: 0.005 sec.
Шаг 15
Теперь мы можем выполнить запросы к БД.
SELECT DestCityName, uniqExact(OriginCityName) AS u FROM datasets.ontime WHERE Year >= 2000 and Year <= 2010 GROUP BY DestCityName ORDER BY u DESC LIMIT 10;
Запрос возвращает самые популярные направления по городам с прямым сообщением.
┌─DestCityName──────────┬───u─┐ │ Atlanta, GA │ 193 │ │ Chicago, IL │ 167 │ │ Dallas/Fort Worth, TX │ 161 │ │ Minneapolis, MN │ 138 │ │ Cincinnati, OH │ 138 │ │ Detroit, MI │ 130 │ │ Houston, TX │ 129 │ │ Denver, CO │ 127 │ │ Salt Lake City, UT │ 119 │ │ New York, NY │ 115 │ └───────────────────────┴─────┘ 10 rows in set. Elapsed: 7.373 sec. Processed 72.81 million rows, 3.37 GB (9.88 million rows/s., 457.24 MB/s.)
Выполнение SQL-запроса займет 7,3 секунды. Выполним еще несколько запросов, показанных ниже.
SELECT Year, avg(DepDelay>10)*100 FROM datasets.ontime GROUP BY Year ORDER BY Year;
Результатом будет процентное соотношение рейсов, задержанных более чем на 10 минут, в разные годы.
Заключение
В этой сравнительно короткой статье мы рассказали Вам о том, как запустить ClickHouse в Docker и загрузить в нее несколько больших массивов данных с целью их анализа. Помните, что это только начало. Clickhouse - это достаточно многогранное решение в области работы с аналитическими запросами, чьи функции и возможности не получится описать в одной статье. Поэтому продолжайте копать глубже и в итоге Вы сможете использовать весь потенциал Clickhouse на благо своей компании.








