Как установить и использовать ClickHouse в Ubuntu 18.04

Автор выбралFree and Open Source Fund для получения пожертвования в рамках программыWrite for DOnations.

Вступление

ClickHouse - это аналитическая база данных с открытым исходным кодом, ориентированная на столбцы, созданнаяYandex дляOLAP и сценариев использования больших данных. Поддержка ClickHouse для обработки запросов в режиме реального времени делает его подходящим для приложений, которые требуют аналитических результатов за доли секунды. Язык запросов ClickHouse - это диалект SQL, который обеспечивает мощные возможности декларативных запросов, предлагая знакомство и меньшую кривую обучения для конечного пользователя.

Базы данныхColumn-oriented хранят записи в блоках, сгруппированных по столбцам, а не по строкам. Не загружая данные для столбцов, отсутствующих в запросе, ориентированные на столбцы базы данных тратят меньше времени на чтение данных при выполнении запросов. В результате эти базы данных могут вычислять и возвращать результаты намного быстрее, чем традиционные системы на основе строк для определенных рабочих нагрузок, таких как OLAP.

СистемыOnline Analytics Processing (OLAP) позволяют организовывать большие объемы данных и выполнять сложные запросы. Они способны управлять петабайтами данных и быстро возвращать результаты запроса. Таким образом, OLAP полезен для работы в таких областях, как наука о данных и бизнес-аналитика.

В этом руководстве вы установите сервер базы данных ClickHouse и клиент на свой компьютер. Вы будете использовать СУБД для выполнения типичных задач и при желании включить удаленный доступ с другого сервера, чтобы иметь возможность подключаться к базе данных с другого компьютера. Затем вы протестируете ClickHouse, смоделировав и запросив пример данных о посещении веб-сайта.

Предпосылки

  • Один сервер Ubuntu 18.04 с включенным пользователем без полномочий rootsudo и настройкой брандмауэра. Вы можете выполнить начальную настройку сервераtutorial, чтобы создать пользователя и настроить брандмауэр.

  • (Необязательно) Вторичный сервер Ubuntu 18.04 с включенным пользователем без полномочий rootsudo и настройкой брандмауэра. Вы можете следить за начальной настройкой сервераtutorial.

[[step-1 -—- install-clickhouse]] == Шаг 1. Установка ClickHouse

В этом разделе вы установите сервер и клиентские программы ClickHouse, используяapt-get.

Во-первых, SSH на ваш сервер, запустив:

ssh sammy@your_server_ip

Яндекс поддерживает APT-репозиторий с последней версией ClickHouse. Добавьте ключ GPG хранилища, чтобы вы могли безопасно загружать проверенные пакеты ClickHouse:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4

Вы увидите вывод, похожий на следующий:

Output
Executing: /tmp/apt-key-gpghome.JkkcKnBAFY/gpg.1.sh --keyserver keyserver.ubuntu.com --recv E0C56BD4

gpg: key C8F1E19FE0C56BD4: public key "ClickHouse Repository Key " imported
gpg: Total number processed: 1
gpg:               imported: 1

Вывод подтверждает, что он успешно проверен и добавлен ключ.

Добавьте репозиторий в свой список репозиториев APT, выполнив:

echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" | sudo tee /etc/apt/sources.list.d/clickhouse.list

Здесь вы направили выводecho вsudo tee, чтобы этот вывод можно было распечатать в файл, принадлежащий root.

Теперь запуститеapt-get update, чтобы обновить свои пакеты:

sudo apt-get update

Пакетыclickhouse-server иclickhouse-client теперь доступны для установки. Установите их с помощью:

sudo apt-get install -y clickhouse-server clickhouse-client

Вы успешно установили сервер и клиент ClickHouse. Теперь вы готовы запустить службу базы данных и убедиться, что она работает правильно.

[[step-2 -—- start-the-service]] == Шаг 2 - Запуск службы

Пакетclickhouse-server, который вы установили в предыдущем разделе, создает службуsystemd, которая выполняет такие действия, как запуск, остановка и перезапуск сервера базы данных. systemd - это система инициализации Linux для инициализации служб и управления ими. В этом разделе вы запустите службу и убедитесь, что она работает успешно.

Запустите службуclickhouse-server, запустив:

sudo service clickhouse-server start

Предыдущая команда не будет отображать никаких выходных данных. Чтобы убедиться, что служба работает успешно, выполните:

sudo service clickhouse-server status

Вы увидите вывод, похожий на следующий:

Output
● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
   Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-12-22 07:23:20 UTC; 1h 9min ago
 Main PID: 27101 (ClickHouse-serv)
    Tasks: 34 (limit: 1152)
   CGroup: /system.slice/ClickHouse-server.service
           └─27101 /usr/bin/ClickHouse-server --config=/etc/ClickHouse-server/config.xml

Вывод означает, что сервер работает.

Вы успешно запустили сервер ClickHouse и теперь можете использовать программу CLIclickhouse-client для подключения к серверу.

[[шаг-3 -—- создание-баз данных-и-таблиц]] == Шаг 3 - Создание баз данных и таблиц

В ClickHouse вы можете создавать и удалять базы данных, выполняя операторы SQL непосредственно в интерактивной подсказке базы данных. Операторы состоят из команд, следующих определенному синтаксису, которые сообщают серверу базы данных выполнить запрошенную операцию вместе с любыми необходимыми данными. Вы создаете базы данных, используя синтаксисCREATE DATABASE table_name. Чтобы создать базу данных, сначала запустите сеанс клиента, выполнив следующую команду:

clickhouse-client

Эта команда зарегистрирует вас в командной строке клиента, где вы можете запустить SQL-операторы ClickHouse для выполнения таких действий, как:

  • Создание, обновление и удаление баз данных, таблиц, индексов, разделов и представлений.

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

На этом шаге с клиентом ClickHouse, готовым для вставки данных, вы собираетесь создать базу данных и таблицу. Для целей этого руководства вы создадите базу данных с именемtest, а внутри нее вы создадите таблицу с именемvisits, которая отслеживает продолжительность посещения веб-сайта.

Теперь, когда вы находитесь в командной строке ClickHouse, создайте базу данныхtest, выполнив:

CREATE DATABASE test;

Вы увидите следующий вывод, который показывает, что вы создали базу данных:

Output
CREATE DATABASE test

Ok.

0 rows in set. Elapsed: 0.003 sec.

Таблица ClickHouse похожа на таблицы в других реляционных базах данных; он содержит коллекцию связанных данных в структурированном формате. Вы можете указать столбцы вместе с их типами, добавить строки данных и выполнить различные виды запросов к таблицам.

Синтаксис для создания таблиц в ClickHouse соответствует структуре этого примера:

CREATE TABLE table_name
(
    column_name1 column_type [options],
    column_name2 column_type [options],
    ...
) ENGINE = engine

Значенияtable_name иcolumn_name могут быть любыми допустимыми идентификаторами ASCII. ClickHouse поддерживает широкий спектр типов столбцов; некоторые из самых популярных:

  • UInt64: используется для хранения целочисленных значений в диапазоне от 0 до 18446744073709551615.

  • Float64: используется для хранения чисел с плавающей запятой, таких как 2039.23, 10.5 и т. д.

  • String: используется для хранения символов переменной длины. Для него не требуется атрибут максимальной длины, поскольку он может хранить произвольную длину.

  • Date: используется для хранения дат, следующих в форматеYYYY-MM-DD.

  • DateTime: используется для хранения дат вместе со временем и соответствует форматуYYYY-MM-DD HH:MM:SS.

После определения столбца вы указываете механизм, используемый для таблицы. В ClickHouseEngines определяют физическую структуру базовых данных, возможности запросов к таблице, ее режимы одновременного доступа и поддержку индексов. Различные типы двигателей подходят для различных требований применения. Наиболее часто используемый и широко применяемый тип двигателя -MergeTree.

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

USE test;

Вы увидите следующий вывод, показывающий, что вы переключились на базу данныхtest из базы данныхdefault:

Output
USE test

Ok.

0 rows in set. Elapsed: 0.001 sec.

В оставшейся части этого руководства предполагается, что вы выполняете операторы в контексте этой базы данных.

Создайте свою таблицуvisits, выполнив эту команду:

CREATE TABLE visits (
 id UInt64,
 duration Float64,
 url String,
 created DateTime
) ENGINE = MergeTree()
PRIMARY KEY id
ORDER BY id;

Вот разбивка того, что делает команда. Вы создаете таблицу с именемvisits с четырьмя столбцами:

  • id: столбец первичного ключа. Как и в других системах РСУБД, столбец первичного ключа в ClickHouse уникально идентифицирует строку; каждая строка должна иметь уникальное значение для этого столбца.

  • duration: столбец с плавающей запятой, используемый для хранения продолжительности каждого посещения в секундах. Столбцыfloat могут хранить десятичные значения, например 12,50.

  • url: строковый столбец, в котором хранится посещенный URL, напримерhttp://example.com.

  • created: столбец даты и времени, в котором отслеживается, когда произошло посещение.

После определений столбцов вы указываетеMergeTree в качестве механизма хранения для таблицы. МеханизмMergeTree family рекомендуется для производственных баз данных из-за его оптимизированной поддержки больших вставок в реальном времени, общей надежности и поддержки запросов. Кроме того, механизмы MergeTree поддерживают сортировку строк по первичному ключу, разбиение строк, а также репликацию и выборку данных.

Если вы собираетесь использовать ClickHouse для архивации данных, которые не запрашиваются часто, или для хранения временных данных, вы можете использоватьLog familyмеханизмов для оптимизации для этого варианта использования.

После определения столбца вы определите другие параметры уровня таблицы. ПредложениеPRIMARY KEY устанавливаетid в качестве столбца первичного ключа, а предложениеORDER BY будет хранить значения, отсортированные по столбцуid. Первичный ключ уникально идентифицирует строку и используется для эффективного доступа к одной строке и эффективного размещения строк.

При выполнении оператора create вы увидите следующий вывод:

OutputCREATE TABLE visits
(
    id UInt64,
    duration Float64,
    url String,
    created DateTime
)
ENGINE = MergeTree()
PRIMARY KEY id
ORDER BY id

Ok.

0 rows in set. Elapsed: 0.010 sec.

В этом разделе вы создали базу данных и таблицу для отслеживания данных о посещениях веб-сайта. На следующем шаге вы вставите данные в таблицу, обновите существующие данные и удалите эти данные.

[[шаг-4 -—- вставка-обновление-и-удаление-данных-и-столбцов]] == Шаг 4 - Вставка, обновление и удаление данных и столбцов

На этом этапе вы будете использовать таблицуvisits для вставки, обновления и удаления данных. Следующая команда является примером синтаксиса для вставки строк в таблицу ClickHouse:

INSERT INTO table_name VALUES (column_1_value, column_2_value, ....);

Теперь вставьте несколько строк примеров данных о посещении веб-сайта в таблицуvisits, выполнив каждое из следующих операторов:

INSERT INTO visits VALUES (1, 10.5, 'http://example.com', '2019-01-01 00:01:01');
INSERT INTO visits VALUES (2, 40.2, 'http://example1.com', '2019-01-03 10:01:01');
INSERT INTO visits VALUES (3, 13, 'http://example2.com', '2019-01-03 12:01:01');
INSERT INTO visits VALUES (4, 2, 'http://example3.com', '2019-01-04 02:01:01');

Вы увидите следующий вывод, повторяющийся для каждого оператора вставки.

Output
INSERT INTO visits VALUES

Ok.

1 rows in set. Elapsed: 0.004 sec.

Вывод для каждой строки показывает, что вы успешно вставили ее в таблицуvisits.

Теперь вы добавите дополнительный столбец в таблицуvisits. При добавлении или удалении столбцов из существующих таблиц ClickHouse поддерживает синтаксисALTER.

Например, основной синтаксис для добавления столбца в таблицу выглядит следующим образом:

ALTER TABLE table_name ADD COLUMN column_name column_type;

Добавьте столбец с именемlocation, в котором будут храниться данные о посещениях веб-сайта, выполнив следующую инструкцию:

ALTER TABLE visits ADD COLUMN location String;

Вы увидите вывод, похожий на следующий:

OutputALTER TABLE visits
    ADD COLUMN
    location String


Ok.

0 rows in set. Elapsed: 0.014 sec.

Вывод показывает, что вы успешно добавили столбецlocation.

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

Следующий синтаксис является примером для массового обновления строк:

ALTER TABLE table_name UPDATE  column_1 = value_1, column_2 = value_2 ...  WHERE  filter_conditions;

Вы запустите следующий оператор, чтобы обновить столбецurl всех строк, в которыхduration меньше 15. Введите его в приглашение базы данных для выполнения:

ALTER TABLE visits UPDATE url = 'http://example2.com' WHERE duration < 15;

Результат массового обновления будет выглядеть следующим образом:

Output
ALTER TABLE visits
    UPDATE url = 'http://example2.com' WHERE duration < 15


Ok.

0 rows in set. Elapsed: 0.003 sec.

Вывод показывает, что ваш запрос на обновление завершен успешно. 0 rows in set в выводе означает, что запрос не вернул никаких строк; это будет иметь место для любых запросов на обновление и удаление.

Пример синтаксиса массового удаления строк аналогичен обновлению строк и имеет следующую структуру:

ALTER TABLE table_name DELETE WHERE filter_conditions;

Чтобы проверить удаление данных, выполните следующую инструкцию, чтобы удалить все строки, для которыхduration меньше 5:

ALTER TABLE visits DELETE WHERE duration < 5;

Вывод оператора массового удаления будет похож на:

Output
ALTER TABLE visits
    DELETE WHERE duration < 5


Ok.

0 rows in set. Elapsed: 0.003 sec.

Выходные данные подтверждают, что вы удалили строки продолжительностью менее пяти секунд.

Чтобы удалить столбцы из таблицы, синтаксис должен соответствовать следующей структуре примера:

ALTER TABLE table_name DROP COLUMN column_name;

Удалите столбецlocation, который вы добавили ранее, выполнив следующее:

ALTER TABLE visits DROP COLUMN location;

ВыводDROP COLUMN, подтверждающий, что вы удалили столбец, будет следующим:

OutputALTER TABLE visits
    DROP COLUMN
    location String


Ok.

0 rows in set. Elapsed: 0.010 sec.

Теперь, когда вы успешно вставили, обновили и удалили строки и столбцы в своей таблицеvisits, вы перейдете к запросу данных на следующем шаге.

[[step-5 -—- querying-data]] == Шаг 5 - Запрос данных

Язык запросов ClickHouse - это пользовательский диалект SQL с расширениями и функциями, подходящими для рабочих нагрузок аналитики. На этом этапе вы запустите запросы выбора и агрегирования, чтобы получить данные и результаты из таблицыvisits.

Запросы выбора позволяют извлекать строки и столбцы данных, отфильтрованных по указанным вами условиям, а также такие параметры, как количество возвращаемых строк. Вы можете выбирать строки и столбцы данных, используя синтаксисSELECT. Базовый синтаксис запросовSELECT:

SELECT func_1(column_1), func_2(column_2) FROM table_name WHERE filter_conditions row_options;

Выполните следующую инструкцию, чтобы получить значенияurl иduration для строк, гдеurl равноhttp://example.com.

SELECT url, duration FROM visits WHERE url = 'http://example2.com' LIMIT 2;

Вы увидите следующий вывод:

OutputSELECT
    url,
    duration
FROM visits
WHERE url = 'http://example2.com'
LIMIT 2

┌─url─────────────────┬─duration─┐
│ http://example2.com │     10.5 │
└─────────────────────┴──────────┘
┌─url─────────────────┬─duration─┐
│ http://example2.com │       13 │
└─────────────────────┴──────────┘

2 rows in set. Elapsed: 0.013 sec.

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

Запросы агрегации - это запросы, которые работают с набором значений и возвращают единичные выходные значения. В базах данных аналитики эти запросы выполняются часто и хорошо оптимизируются базой данных. Некоторые агрегатные функции, поддерживаемые ClickHouse:

  • count: возвращает количество строк, соответствующих указанным условиям.

  • sum: возвращает сумму выбранных значений столбца.

  • avg: возвращает среднее значение выбранных значений столбца.

Некоторые специфичные для ClickHouse агрегатные функции включают в себя:

  • uniq: возвращает приблизительное количество сопоставленных отдельных строк.

  • topK: возвращает массив наиболее частых значений определенного столбца с использованием алгоритма аппроксимации.

Чтобы продемонстрировать выполнение запросов агрегирования, вы рассчитаете общую продолжительность посещений, выполнив запросsum:

SELECT SUM(duration) FROM visits;

Вы увидите вывод, похожий на следующий:

Output
SELECT SUM(duration)
FROM visits

┌─SUM(duration)─┐
│          63.7 │
└───────────────┘

1 rows in set. Elapsed: 0.010 sec.

Теперь вычислите два верхних URL, выполнив:

SELECT topK(2)(url) FROM visits;

Вы увидите вывод, похожий на следующий:

OutputSELECT topK(2)(url)
FROM visits

┌─topK(2)(url)──────────────────────────────────┐
│ ['http://example2.com','http://example1.com'] │
└───────────────────────────────────────────────┘

1 rows in set. Elapsed: 0.010 sec.

Теперь, когда вы успешно запросили таблицуvisits, на следующем шаге вы удалите таблицы и базы данных.

[[шаг-6 -—- удаление-таблиц-и-баз данных]] == Шаг 6 - Удаление таблиц и баз данных

В этом разделе вы удалите свою таблицуvisits и базу данныхtest.

Синтаксис для удаления таблиц следует этому примеру:

DROP TABLE table_name;

Чтобы удалить таблицуvisits, выполните следующую инструкцию:

DROP TABLE visits;

Вы увидите следующий вывод о том, что вы успешно удалили таблицу:

outputDROP TABLE visits

Ok.

0 rows in set. Elapsed: 0.005 sec.

Вы можете удалять базы данных, используя синтаксисDROP database table_name. Чтобы удалить базу данныхtest, выполните следующую инструкцию:

DROP DATABASE test;

Полученный результат показывает, что вы успешно удалили базу данных.

Output
DROP DATABASE test

Ok.

0 rows in set. Elapsed: 0.003 sec.

На этом этапе вы удалили таблицы и базы данных. Теперь, когда вы создали, обновили и удалили базы данных, таблицы и данные в своем экземпляре ClickHouse, вы включите удаленный доступ к вашему серверу баз данных в следующем разделе.

[[step-7 -—- setting-up-firewall-rules-optional]] == Шаг 7. Настройка правил брандмауэра (необязательно)

Если вы намерены использовать ClickHouse только локально с приложениями, работающими на том же сервере, или на вашем сервере не включен брандмауэр, вам не нужно заполнять этот раздел. Если вместо этого вы будете подключаться к серверу баз данных ClickHouse удаленно, выполните этот шаг.

В настоящее время на вашем сервере включен брандмауэр, который запрещает доступ вашего публичного IP-адреса ко всем портам. Чтобы разрешить удаленный доступ, выполните следующие два шага:

  • Измените конфигурацию ClickHouse и разрешите ему прослушивать все интерфейсы.

  • Добавьте правило брандмауэра, разрешающее входящие подключения к порту8123, который является HTTP-портом, на котором работает сервер ClickHouse.

Если вы находитесь внутри приглашения базы данных, выйдите из него, набравCTRL+D.

Отредактируйте файл конфигурации, выполнив:

sudo nano /etc/clickhouse-server/config.xml

Затем раскомментируйте строку, содержащую<!-- <listen_host>0.0.0.0</listen_host> -->, как в следующем файле:

/etc/clickhouse-server/config.xml

...
 example.yandex.ru
    -->

    
    
    
    0.0.0.0

    
    
...

Сохраните файл и выйдите изnano. Для применения новой конфигурации перезапустите службу, запустив:

sudo service clickhouse-server restart

Вы не увидите вывод этой команды. Сервер ClickHouse прослушивает порт8123 для соединений HTTP и порт9000 для соединений отclickhouse-client. Разрешите доступ к обоим портам для IP-адреса вашего второго сервера с помощью следующей команды:

sudo ufw allow from second_server_ip/32 to any port 8123
sudo ufw allow from second_server_ip/32 to any port 9000

Вы увидите следующий вывод для обеих команд, который показывает, что вы включили доступ к обоим портам:

OutputRule added

ClickHouse теперь будет доступен с IP-адреса, который вы добавили. Не стесняйтесь добавлять дополнительные IP-адреса, такие как адрес вашего локального компьютера, если это необходимо.

Чтобы убедиться, что вы можете подключиться к серверу ClickHouse с удаленного компьютера, сначала выполните действия, описанные в шаге 1 этого руководства, на втором сервере и убедитесь, что на нем установленыclickhouse-client.

Теперь, когда вы вошли на второй сервер, запустите сеанс клиента, выполнив:

clickhouse-client --host your_server_ip

Вы увидите следующий вывод, который показывает, что вы успешно подключились к серверу:

OutputClickHouse client version 19.3.6.
Connecting to your_server_ip:9000 as user default.
Connected to ClickHouse server version 19.3.6 revision 54415.

hostname :)

На этом этапе вы включили удаленный доступ к серверу базы данных ClickHouse, изменив правила брандмауэра.

Заключение

Вы успешно настроили экземпляр базы данных ClickHouse на своем сервере и создали базу данных и таблицу, добавили данные, выполнили запросы и удалили базу данных. В документации ClickHouse вы можете прочитать об ихbenchmarks по сравнению с другими базами данных с открытым исходным кодом и коммерческими аналитическими базами данных, а также об общих ссылках наdocuments. Дополнительные возможностиfeatures ClickHouse включают распределенную обработку запросов на нескольких серверах для повышения производительности и защиты от потери данных за счет хранения данных на разныхshards.

Related