Как установить и использовать ClickHouse на Debian 9

Автор выбрал Free и Open Source Fund, чтобы получить пожертвование как часть Write for DOnations program.

Вступление

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

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

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

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

Предпосылки

  • Один сервер Debian 9 с включенным + sudo + пользователем без полномочий root и настройкой брандмауэра. Вы можете выполнить первоначальную настройку сервера tutorial, чтобы создать пользователя и настроить брандмауэр.

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

Шаг 1 - Установка ClickHouse

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

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

ssh @

+ dirmngr + - сервер для управления сертификатами и ключами. Требуется для добавления и проверки ключей удаленного репозитория, установите его, выполнив:

sudo apt-get install -y dirmngr

Яндекс поддерживает 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 <[email protected]>" 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 +, чтобы этот вывод мог распечатать файл, принадлежащий корню.

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

sudo apt-get update

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

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

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

Шаг 2 - Запуск службы

Пакет + clickhouse-server +, который вы установили в предыдущем разделе, создает службу + systemd +, которая выполняет такие действия, как запуск, остановка и перезапуск сервера базы данных. https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files [+ systemd +] - это система инициализации Linux для инициализации и управления службами. В этом разделе вы запустите службу и убедитесь, что она работает успешно.

Запустите сервис + clickhouse-server +, выполнив:

sudo service clickhouse-server start

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

sudo service clickhouse-server status

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

Output
●  - ClickHouse Server (analytic DBMS for big data)
  Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: enabled)
  Active:  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 и теперь сможете использовать CLI-программу + clickhouse-client + для подключения к серверу.

Шаг 3 - Создание баз данных и таблиц

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

clickhouse-client

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

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

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

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

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

CREATE DATABASE ;

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

Output
CREATE DATABASE

Ok.

0 rows in set. Elapsed: 0.003 sec.

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

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

CREATE TABLE
(
    ,
    ,
   ...
) 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 +.

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

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

USE ;

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

Output
USE

Ok.

0 rows in set. Elapsed: 0.001 sec.

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

Создайте таблицу ++ с помощью этой команды:

CREATE TABLE  (
,
,
,

) ENGINE =
PRIMARY KEY
ORDER BY ;

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

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

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

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

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

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

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

После определения столбца вы определите другие параметры уровня таблицы. Предложение + 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 - Вставка, обновление и удаление данных и столбцов

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

INSERT INTO  VALUES (, );

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

INSERT INTO  VALUES ();
INSERT INTO  VALUES ();
INSERT INTO  VALUES ();
INSERT INTO  VALUES ();

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

Output
INSERT INTO  VALUES

Ok.

1 rows in set. Elapsed: 0.004 sec.

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

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

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

ALTER TABLE  ADD COLUMN ;

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

ALTER TABLE  ADD COLUMN ;

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

OutputALTER TABLE
   ADD COLUMN
   location String


Ok.

0 rows in set. Elapsed: 0.014 sec.

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

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

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

ALTER TABLE  UPDATE  WHERE ;

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

ALTER TABLE  UPDATE url = '' WHERE ;

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

Output
ALTER TABLE
   UPDATE url = '' WHERE duration < 15


Ok.

0 rows in set. Elapsed: 0.003 sec.

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

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

ALTER TABLE  DELETE WHERE ;

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

ALTER TABLE  DELETE WHERE ;

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

Output
ALTER TABLE
   DELETE WHERE duration < 5


Ok.

0 rows in set. Elapsed: 0.003 sec.

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

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

ALTER TABLE  DROP COLUMN ;

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

ALTER TABLE  DROP COLUMN ;

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

OutputALTER TABLE
   DROP COLUMN
   location String


Ok.

0 rows in set. Elapsed: 0.010 sec.

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

Шаг 5 - Запрос данных

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

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

SELECT  FROM  WHERE ;

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

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

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

OutputSELECT
   url,
   duration
FROM
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  FROM ;

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

Output
SELECT
FROM

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

1 rows in set. Elapsed: 0.010 sec.

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

SELECT  FROM ;

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

OutputSELECT topK(2)(url)
FROM visits

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

1 rows in set. Elapsed: 0.010 sec.

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

Шаг 6 - Удаление таблиц и баз данных

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

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

DROP TABLE ;

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

DROP TABLE ;

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

outputDROP TABLE

Ok.

0 rows in set. Elapsed: 0.005 sec.

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

DROP DATABASE ;

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

Output
DROP DATABASE

Ok.

0 rows in set. Elapsed: 0.003 sec.

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

Шаг 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

...
<interserver_http_host>example.yandex.ru</interserver_http_host>
   -->

   <!-- Listen specified host. use :: (wildcard IPv6 address), if you want to accept connections both with IPv4 and IPv6 from everywhere. -->
   <!-- <listen_host>::</listen_host> -->
   <!-- Same for hosts with disabled ipv6: -->


   <!-- Default values - try listen localhost on ipv4 and ipv6: -->
   <!--
   <listen_host>::1</listen_host>
   <listen_host>127.0.0.1</listen_host>
   -->
...

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

sudo service clickhouse-server restart

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

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

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

OutputRule added

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

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

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

clickhouse-client --host

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

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

:)

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

Заключение

Вы успешно настроили экземпляр базы данных ClickHouse на своем сервере и создали базу данных и таблицу, добавили данные, выполнили запросы и удалили базу данных. В документации ClickHouse вы можете прочитать об их benchmarks по отношению к другим базам данных с открытым исходным кодом и коммерческой аналитикой и общей ссылке documents. Далее features Предложения ClickHouse включают распределенную обработку запросов по нескольким серверам для повышения производительности и защиты от потери данных путем хранения данных на различных https: //www.digitalocean. ком / сообщество / учебники / понимание-базы данных шардинга [осколки].

Related