Как установить clickhouse на ubuntu

Обновлено: 07.07.2024

Пакеты с клиентом и сервером Clickhouse имеются в официальных репозиториях Debian Buster. Для их установки можно воспользоваться следующей командой: Для работы серверу Clickhouse требуется поддержка дополнительных процессорных инструкций SSE 4.2. Чтобы проверить наличие поддержки этих инструкций и пересобрать Clickhouse, если они не поддерживаются, обратитесь к статье Пересборка Clickhouse для процессоров без поддержки SSE 4.2.

  • display_name - отображаемое в клиенте имя сервера,
  • max_connections - максимальное количество подключений от клиентов,
  • max_concurrent_queries - максимальное количество одновременно обрабатываемых запросов. Т.к. каждый запрос обслуживается конвейером из нескольких потоков, то каждый запрос порождает нагрузку как минимум на одно процессорное ядро. Лучше всего будет выполнять одновременно количество запросов, не превышающее количество процессорных ядер сервера или виртуальной машины.
  • uncompressed_cache_size задаёт размер кэша несжатых данных в байтах. Если предполагается, что на сервере часто будут выполняться короткие запросы, этот кэш поможет снизить нагрузку на дисковую подсистему. Обратите внимание, что в настройках пользователя должно быть разрешено использование кэша несжатых данных в опции use_uncompressed_cache.
  • mark_cache_size - кэш меток. Метки являются своего рода индексами данных. Сервер Clickhouse не хочет запускаться, если значение этой настройки меньше 5 гигабайт. Хорошая новость в том, что память под этот кэш будет выделяться по мере необходимости.
  • path - путь к файлам базы данных,
  • default_database - имя базы данных, с которой будут работать клиенты, не указавшие какую-то определённую базу данных,
  • timezone - часовой пояс сервера.
  • users - пользователи базы данных. Каждый пользователь содержит ссылку на профиль и квоту,
  • profiles - профили содержат настройки пользователей,
  • quotas - квоты содержат ограничения на выполнение запросов от пользователей.
  • max_memory_usage - максимальный объём памяти, который сервер может выделить пользователю для обработки его запросов, в примере настроено ограничение в 2 гигабайта,
  • max_query_size - максимальный размер одного запроса, по умолчанию - 256 килобайт, в примере - 1 мегабайт,
  • max_ast_elements - максимальное количество элементов в дереве синтаксического разбора, по умолчанию - 50 тысяч элементов, в примере - 1 миллион элементов,
  • use_uncompressed_cache - значение этой опции разрешает или запрещает использование кэша несжатых данных, в примере значение 1 разрешает его использование,
  • readonly - значение этой опции разрешает или запрещает запросы на изменение данных, в примере значение 0 разрешает изменение данных.

Включим автозапуск сервера: Запустим сервер:

Решение проблем

This file contains the maximum number of memory map areas a process may have. Memory map areas are used as a side-effect of calling malloc, directly by mmap and mprotect, and also when loading shared libraries.

While most applications need less than a thousand maps, certain programs, particularly malloc debuggers, may consume lots of them, e.g., up to one or two maps per allocation.

The default value is 65536.

Этот файл содержит максимальное количество участков памяти, которое может иметь процесс. Участки памяти косвенно создаются при вызове malloc, а напрямую - при вызове mmap и mprotect, а также при загрузке разделяемых библиотек.

Хотя большинству приложений требуется меньше тысячи участков, некоторые программы, в частности отладчики malloc, могут потреблять значительное их количество, от одного до двух участков при каждом выделении памяти.

ClickHouse – это аналитическая колоночная база данных с открытым исходным кодом, разработанная компанией Yandex для OLAP и работы с big data. Благодаря обработке запросов в режиме реального времени ClickHouse подходит для приложений, которым нужно получать аналитические данные за доли секунды. Язык запросов ClickHouse – это диалект SQL, который предоставляет возможности декларативных запросов.

Колоночные базы данных хранят записи в блоках, сгруппированных по столбцам, а не по строкам. Поскольку такая БД не загружает данные для столбцов, которых нет в запросе, она тратит меньше времени на чтение данных при выполнении запросов. Потому колоночные базы данных могут вычислять и возвращать результаты для определенных рабочих нагрузок, таких как OLAP, намного быстрее, чем традиционные строчные системы.

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

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

Требования

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

1: Установка ClickHouse

Подключитесь к своему серверу по SSH:

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

Executing: /tmp/apt-key-gpghome.JkkcKnBAFY/gpg.1.sh --keyserver keyserver.ubuntu.com --recv E0C56BD4
gpg: key C8F1E19FE0C56BD4: public key "ClickHouse Repository Key <milovidov@yandex-team.ru>" 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. Теперь можно запустить сервис базы данных и убедиться, что он работает правильно.

2: Запуск сервиса ClickHouse

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

Запустите сервис clickhouse-server:

sudo service clickhouse-server start

Эта команда не возвращает вывод. Чтобы убедиться, что сервис работает, введите:

sudo service clickhouse-server status

Вы должны увидеть:

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

Теперь вы сможете использовать программу CLI clickhouse-client для подключения к серверу.

3: Создание баз данных и таблиц

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

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

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

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

Находясь в командной строке ClickHouse, создайте БД test:

CREATE DATABASE test;

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

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.

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

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

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

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, которая состоит из 4 столбцов:

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

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

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

Запустив оператор для создания таблицы, вы увидите такой вывод:

CREATE 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: Вставка, обновление и удаление данных и столбцов

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

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

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

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

INSERT INTO visits VALUES
Ok.
1 rows in set. Elapsed: 0.004 sec.

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

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

ALTER TABLE table_name ADD COLUMN column_name column_type;

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

ALTER TABLE visits ADD COLUMN location String;

Вы увидите такой вывод:

ALTER 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 всех строк, длительность которых не превышает 15.

Вы получите такой вывод:

Вывод показывает, что ваш запрос на обновление завершен успешно. Строка «0 rows in set» сообщает, что запрос не вернул ни одной строки; это всегда происходит для любых запросов на обновление и удаление.

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

ALTER TABLE table_name DELETE WHERE filter_conditions;
Для примера используйте следующий оператор, чтобы удалить все строки, duration которых менее 5:
ALTER TABLE visits DELETE WHERE duration < 5;
ALTER TABLE visits
DELETE WHERE duration < 5
Ok.
0 rows in set. Elapsed: 0.003 sec.

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

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

ALTER TABLE table_name DROP COLUMN column_name;

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

ALTER TABLE visits DROP COLUMN location;

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

ALTER TABLE visits
DROP COLUMN
location String
Ok.
0 rows in set. Elapsed: 0.010 sec.

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

5: Запрос данных

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

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

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

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

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

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

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

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

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

SELECT SUM(duration) FROM visits;
SELECT SUM(duration)
FROM visits
┌─SUM(duration)─┐
│ 63.7 │
└───────────────┘
1 rows in set. Elapsed: 0.010 sec.

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

6: Удаление таблиц и баз данных

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

Синтаксис для удаления таблиц выглядит так:

DROP TABLE table_name;

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

DROP TABLE visits;

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

DROP TABLE visits
Ok.
0 rows in set. Elapsed: 0.005 sec.

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

DROP DATABASE test;

Вы увидите следующий вывод, если БД удалена успешно:

DROP DATABASE test
Ok.
0 rows in set. Elapsed: 0.003 sec.

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

7: Настройка брандмауэра (опционально)

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

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

Если вы находитесь в командной строке базы данных, выйдите из нее, набрав CTRL+D.

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

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

Сохраните и закройте файл.

Чтобы обновить конфигурацию, перезапустите сервис:

sudo service clickhouse-server restart

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

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

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

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

Войдите на второй сервер, запустите сеанс клиента:

clickhouse-client --host your_server_ip

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

ClickHouse 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 вы можете найти сравнения с другими открытыми и аналитическими базами данных, а также общую справку. В качестве дополнительных функций ClickHouse предлагает распределенную обработку запросов на нескольких серверах для повышения производительности и защиты от потери данных путем хранения их на разных сегментах.


ClickHouse — это колоночная база данных, разработанная Яндексом для обработки аналитических запросов, которая идеально подходит для решения задач интернет-маркетинга.

Мы подготовили данное руководство, чтобы облегчить начало работы с ClickHouse digital-аналитикам.

Unfortunately, the navigation through the article could not be displayed. Check if JavaScript is enabled in your browser К сожалению, не удалось отобразить навигацию по статье. Проверьте, включен ли в вашем браузере JavaScript

Видеоинструкция

Покупка сервера для установки ClickHouse

Чтобы установить ClickHouse, необходимо купить виртуальную машину, которая работает на операционной системе Ubuntu.

В качестве примера рассмотрим покупку сервера на DigitalOcean.
После регистрации выберите Create Droplets:


После чего откроется страница конфигурации сервера. Выберите следующие настройки:

  1. Операционную систему Ubuntu.
    Версия: 18.04.
  2. Местоположение сервера — Амстердам.
  3. Укажите размер виртуальной машины: 3 GB Memory, 1 vCPU и 60 GB SSD.

По мере постепенного увеличения объема данных вам понадобится более производительный сервер. DigitalOcean поддерживает масштабирование сервера, что позволяет комфортно увеличить технические характеристики.

После создания виртуальной машины на почту приходит письмо с SSH-доступом к серверу.

Установка ClickHouse

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

SSH-клиент — это программа, позволяющая управлять сервером через командную строку.

Подойдет любое приложение, например:

Запустите SSH-клиент.
Для подключения к серверу укажите IP-адрес сервера, логин, а после авторизации задайте пароль.

Далее следуйте инструкции, подготовленной нашей командой.

Для этого копируйте команды из Google Docs или последовательно вставляйте указанные команды ниже в консоль SSH-клиента:

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

После чего выполните тестовый запрос к ClickHouse:

Если всё в порядке, то в качестве ответа запрос вернет 1 (единицу). Выйдите из клиента и приступайте к завершающему этапу: настройке ClickHouse.

Настройка ClickHouse

Для обеспечения дальнейшей безопасной и комфортной работы ClickHouse нужно настроить:

  • Открыть подключение по IP.
    Непосредственно после установки ClickHouse закрыт для подключения.
  • Установить Tabix.
    Работать с ClickHouse удобнее через графический клиент Tabix, который является редактором select-запросов.
  • Создать учетную запись.
    Необходимо создать учетную запись, под которой будет осуществляться доступ к ClickHouse. По умолчанию в ClickHouse не установлен пароль.

Открыть подключение по IP


Где вместо 0.0.0.0 следует указать IP-адрес вашего сервера. В ClickHouse по умолчанию создана учетная запись с логином default. Воспользуйтесь ею, чтобы войти в Tabix:

Пароль отсутствует. Чтобы поставить ограничение по паролю, следуйте инструкции ниже.

Установка Tabix (графический клиент)


Где вместо 0.0.0.0 следует указать IP-адрес вашего сервера. В ClickHouse по умолчанию создана учетная запись с логином default. Воспользуйтесь ею, чтобы войти в Tabix:

Пароль отсутствует. Чтобы поставить ограничение по паролю, следуйте инструкции ниже.

Создание учетной записи

По умолчанию ClickHouse создает пользователя с логином default без пароля. Пароль можно задать в открытом или закодированном виде (SHA-256).

Не следует рассматривать такие пароли как защиту от потенциального злоумышленника. Скорее, они нужны для защиты от сотрудников.

Сгенерировать пароль можно командой:

Где вместо testPasword укажите необходимый пароль.

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

Для этого выполните команду:

Откроется файл с настройками пользователей ClickHouse:


Где укажем для пользователя default сгенерированный пароль:

<password_sha256_hex>f501c3dc6d2bb6949f593a90c93eb9</password_sha256_hex> .

Также можно указать пароль в открытом виде:

Не забудьте сохранить изменения. С этого момента, чтобы подключиться к Tabix, необходимо задать логин и пароль.

Загрузка данных в ClickHouse

Renta позволяет загружать данные в ClickHouse из различных рекламных источников, систем аналитики и баз данных, например, из Google AdWords или Яндекс.Директ.

Полный список коннекторов и процесс настройки описан в документации.

Также доступен стриминг сырых данных Google Analytics c автоматическим объединением данных из рекламных источников, CRM-системы.

Подключение Power BI к ClickHouse

Для этого в Power BI выберите в качестве источника данных Web:

И укажите следующие данные:

  • адрес сервера и порт,
  • доступы к ClickHouse,
  • select-запрос (который вернет необходимые данные),
  • указать формат выгрузки: TSV или CSV.

Например, в Power BI необходимо подтянуть количество сессий по рекламным источникам. Допустим, что запрос к ClickHouse выглядит следующим образом:

Готовим URL, который вернет результат запроса в виде СSV-файла.
Структура URL должна выглядеть следующим образом:

Чтобы перевести запрос в формат URL-a, воспользуйтесь любым decoder-ом.

Настройка обновления в Power BI Online

Power BI Online требует установку gateway для обновления отчетов в облаке. Но это можно обойти, если к серверу, на котором установлен ClickHouse, подвязать домен.

В настройках домена создайте поддомен, а в качестве A-записи укажите IP-адрес сервера.

Настройка происходит на стороне хостинга, к которому подвязан домен.

В результате, в качестве источника данных вместо IP-адреса указывайте домен.

При использовании поддомена установка gateway не требуется.

Остались вопросы?

Если у вас остались вопросы — задавайте их в комментариях.
Мы с удовольствием подготовим на них ответы.

Сегодня внутренняя разработка компании Яндекс — аналитическая СУБД ClickHouse, стала доступна каждому. Исходники опубликованы на GitHub под лицензией Apache 2.0.




ClickHouse позволяет выполнять аналитические запросы в интерактивном режиме по данным, обновляемым в реальном времени. Система способна масштабироваться до десятков триллионов записей и петабайт хранимых данных. Использование ClickHouse открывает возможности, которые раньше было даже трудно представить: вы можете сохранять весь поток данных без предварительной агрегации и быстро получать отчёты в любых разрезах. ClickHouse разработан в Яндексе для задач Яндекс.Метрики — второй по величине системы веб-аналитики в мире.

В этой статье мы расскажем, как и для чего ClickHouse появился в Яндексе и что он умеет; сравним его с другими системами и покажем, как его поднять у себя с минимальными усилиями.

Зачем кому-то может понадобиться использовать ClickHouse, когда есть много других технологий для работы с большими данными?

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

Есть отдельные области, в которых могут быть использованы другие системы. Их можно классифицировать следующим образом:

    Коммерческие OLAP СУБД для использования в собственной инфраструктуре.
    Примеры: HP Vertica, Actian Vector, Actian Matrix, EXASol, Sybase IQ и другие.
    Наши отличия: мы сделали технологию открытой и бесплатной.

  • в отличие от Hadoop, ClickHouse позволяет обслуживать аналитические запросы даже в рамках массового сервиса, доступного публично, такого как Яндекс.Метрика;
  • для функционирования ClickHouse не требуется разворачивать Hadoop инфраструктуру, он прост в использовании, и подходит даже для небольших проектов;
  • ClickHouse позволяет загружать данные в реальном времени и самостоятельно занимается их хранением и индексацией;
  • в отличие от Hadoop, ClickHouse работает в географически распределённых датацентрах.



Карта кликов в Яндекс.Метрике и соответствующий запрос в ClickHouse

Изначально мы разрабатывали ClickHouse исключительно для задач Яндекс.Метрики — чтобы строить отчёты в интерактивном режиме по неагрегированным логам пользовательских действий. В связи с тем, что система является полноценной СУБД и обладает весьма широкой функциональностью, уже в начале использования в 2012 году, была написана подробная документация. Это отличает ClickHouse от многих типичных внутренних разработок — специализированных и встраиваемых структур данных для решения конкретных задач, таких как, например, Metrage и OLAPServer, о которых я рассказывал в предыдущей статье.

Развитая функциональность и наличие детальной документации привели к тому, что ClickHouse постепенно распространился по многим отделам Яндекса. Неожиданно оказалось, что система может быть установлена по инструкции и работает «из коробки», то есть не требует привлечения разработчиков. ClickHouse стал использоваться в Директе, Маркете, Почте, AdFox, Вебмастере, в мониторингах и в бизнес-аналитике. ClickHouse позволял либо решать задачи, для которых раньше не было подходящих инструментов, либо решать задачи на порядки эффективнее, чем другие системы.

Постепенно возник спрос на использование ClickHouse не только во внутренних продуктах Яндекса. Например, в 2013 году, ClickHouse применялся для анализа метаданных о событиях эксперимента LHCb в CERN. Система могла бы использоваться более широко, но в то время этому мешал закрытый статус. Другой пример: open-source технология Яндекс.Танк внутри Яндекса использует ClickHouse для хранения данных телеметрии, тогда как для внешних пользователей в качестве базы данных был доступен только MySQL, который плохо подходит для данной задачи.

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

Расширение пользовательской базы позволяет рассматривать примеры использования, которые без этого едва ли пришли бы в голову. Также это позволяет быстрее находить баги и неудобства, которые имеют значение в том числе и для основного применения ClickHouse — в Метрике. Без сомнения, всё это повышает качество продукта. Поэтому нам выгодно сделать ClickHouse открытым сегодня.

Данные можно также скачать из первоисточника. Как это сделать, написано здесь.

Для начала, установим ClickHouse на один сервер. Ниже также будет показано, как установить ClickHouse на кластер с шардированием и репликацией.

На Ubuntu и Debian Linux вы можете установить ClickHouse из готовых пакетов. На других Linux-системах, можно собрать ClickHouse из исходников и установить его самостоятельно.

Пакет clickhouse-client содержит программу clickhouse-client — клиент ClickHouse для работы в интерактивном режиме. Пакет clickhouse-server-base содержит бинарник clickhouse-server, а clickhouse-server-common — конфигурационные файлы к серверу.

Конфигурационные файлы сервера находятся в /etc/clickhouse-server/. Главное, на что следует обратить внимание перед началом работы — элемент path — место хранения данных. Необязательно модифицировать непосредственно файл config.xml — это не очень удобно при обновлении пакетов. Вместо этого можно переопределить нужные элементы в файлах в config.d директории.
Также имеет смысл обратить внимание на настройки прав доступа.

Сервер не запускается самостоятельно при установке пакета и не перезапускается сам при обновлении.
Для запуска сервера, выполните:

Для подключения к серверу, используйте программу clickhouse-client.

Работа в интерактивном режиме:

Включить многострочные запросы:

Выполнение запросов в batch режиме:

Вставка данных в заданном формате:

Создаём таблицу для тестовых данных

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

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

Загружаем данные в таблицу

Запрос INSERT в ClickHouse позволяет загружать данные в любом поддерживаемом формате. При этом на загрузку данных расходуется O(1) памяти. На вход запроса INSERT можно передать любой объём данных. Вставлять данные всегда следует пачками не слишком маленького размера. При этом вставка блоков данных размера до max_insert_block_size (= 1 048 576 строк по умолчанию), является атомарной: блок данных либо целиком вставится, либо целиком не вставится. В случае разрыва соединения в процессе вставки, вы можете не знать, вставился ли блок данных. Для достижения exactly-once семантики, для реплицированных таблиц, поддерживается идемпотентность: вы можете вставить один и тот же блок данных повторно, возможно на другую реплику, и он будет вставлен только один раз. В данном примере мы вставляем данные из localhost, поэтому мы не беспокоимся о формировании пачек и exactly-once семантике.

Запрос INSERT в таблицы типа MergeTree является неблокирующим, равно как и SELECT. После загрузки данных или даже во время процесса загрузки мы уже можем выполнять SELECT-ы.

В данном примере некоторая неоптимальность состоит в том, что в таблице используется тип данных String тогда, когда подошёл бы Enum или числовой тип. Если множество разных значений строк заведомо небольшое (пример: название операционной системы, производитель мобильного телефона), то для максимальной производительности, мы рекомендуем использовать Enum-ы или числа. Если множество строк потенциально неограничено (пример: поисковый запрос, URL), то используйте тип данных String.

Во-вторых, отметим, что в рассматриваемом примере структура таблицы содержит избыточные столбцы Year, Quarter, Month, DayOfMonth, DayOfWeek, тогда как достаточно одного FlightDate. Скорее всего, это сделано для эффективной работы других СУБД, в которых функции для манипуляций с датой и временем, могут работать недостаточно быстро. В случае ClickHouse в этом нет необходимости, так как соответствующие функции хорошо оптимизированы. Впрочем, лишние столбцы не проблема: так как ClickHouse — это столбцовая СУБД, вы можете позволить себе иметь в таблице достаточно много столбцов. Сотни столбцов — это нормально для ClickHouse.

Читайте также: