Настройка Tkhemali Connector 1.X
Для отправки данных из ADB в ClickHouse через Tkhemali Connector 1.X необходимо предварительно выполнить следующие шаги на стороне кластера ADB:
-
Создать внешнюю таблицу writable external table, указав в директиве
LOCATION
протокол PXF с профилемTKH
и опции соединения с ClickHouse. -
Если при отправке данных используется staging-слой (рекомендуемый способ):
-
Вызвать функцию txn, передав в ее аргументах запрос
INSERT
для добавления данных во внешнюю таблицу. -
В случае непредвиденных сбоев (например, обрыва соединения) выполнить очистку промежуточных таблиц.
-
-
Если staging-таблицы не планируется использовать, выполнить запрос
INSERT
к внешней таблице, созданной на шаге 1, напрямую.
Примеры отправки данных из ADB в ADQM с использованием описанных ниже настроек приведены в статье Примеры использования Tkhemali Connector 1.X.
Создание внешней таблицы
Чтобы создать внешнюю таблицу для записи данных, необходимо использовать команду CREATE WRITABLE EXTERNAL TABLE
, базовый синтаксис которой приведен ниже:
CREATE WRITABLE EXTERNAL TABLE <table_name> (
{ <column_name> <data_type> [, ...] | LIKE <other_table> }
)
LOCATION (
'pxf://<clickhouse_table_name>?<pxf_profile>[&<option>=<value> [...]]'
)
FORMAT 'TEXT'
ENCODING 'UTF8';
где:
-
<table_name>
— имя внешней таблицы в ADB. -
<column_name>
— имя столбца. -
<data_type>
— тип данных столбца. -
<other_table>
— исходная таблица, из которой в новую внешнюю таблицу будут скопированы имена столбцов, их типы данных и политика распределения данных. Обратите внимание, что ограничения и значения по умолчанию, указанные в исходной таблице, не копируются, так как они не поддерживаются во внешних таблицах. -
<clickhouse_table_name>
— полное имя целевой таблицы в ClickHouse, включающее имя базы данных. При использовании staging-слоя в опции необходимо указать имя промежуточной (staging) таблицы, добавив к имени целевой таблицы значение параметраending_pattern
(см. таблицу Аргументы функции txn). Например, если имя таблицы в ClickHousedefault.t
, то в директивеLOCATION
следует указатьdefault.t_tmp_$
(если используется значениеending_pattern
по умолчанию). -
<pxf_profile>
— имя профиля PXF, которое можно определить двумя способами:{ PROFILE=TKH | ACCESSOR=io.arenadata.tkh.pxf.TkhAccessor&RESOLVER=io.arenadata.tkh.pxf.TkhResolver }
-
<option>
— параметры, определяющие детали подключения к внешнему источнику данных. Список возможных параметров для Tkhemali-коннектора приведен в таблице Опции внешней таблицы. -
<value>
— значения соответствующих параметров<option>
.
ПРИМЕЧАНИЕ
|
Имя | Тип | Описание | Default | Обязательность |
---|---|---|---|---|
url |
TEXT |
Разделенный запятыми список хостов в ClickHouse, на которых расположена целевая таблица. Заполняется в следующем формате:
|
— |
Да, если |
distribution |
TEXT |
Тип распределения нагрузки между хостами ClickHouse. Возможные значения:
|
LIST |
Нет |
gp_url |
TEXT |
URL Master-хоста ADB для выполнения запроса |
— |
Да, если |
gp_user |
TEXT |
Имя пользователя ADB для выполнения запроса |
— |
Да, если |
gp_password |
TEXT |
Пароль пользователя ADB для выполнения запроса |
— |
Да, если |
gp_request |
TEXT |
Запрос для получения списка хостов ClickHouse, выбор из которого будет производиться с использованием алгоритма round-robin. Формат результата запроса должен быть идентичен указанному выше для опции |
— |
Да, если |
lines_batch_size |
INT |
Максимальное количество строк в батче данных, отправляемых в ClickHouse со стороны коннектора. Для ввода допускаются целые положительные числа |
100000 |
Нет |
bytes_batch_size_mb |
INT |
Максимальный размер батча данных, отправляемых в ClickHouse со стороны коннектора (в МБ). При одновременном указании с параметром Для ввода допускаются целые положительные числа |
— |
Нет |
send_compressed |
BOOL |
Флаг, указывающий на необходимость компрессии данных на стороне коннектора перед отправкой в ClickHouse. Возможные значения:
|
false |
Нет |
send_delay |
INT |
Задержка между запросами со стороны коннектора к ClickHouse (в миллисекундах). Для ввода допускаются целые положительные числа |
300 |
Нет |
insert_distributed_sync |
BOOL |
Включает или отключает режим синхронного добавления данных в распределенные (distributed) таблицы. Возможные значения:
|
true |
Нет |
Использование функции txn
Функция txn
имеет следующее определение:
FUNCTION txn(query TEXT, http_port INT DEFAULT 8123, debug BOOLEAN DEFAULT false, ending_pattern TEXT DEFAULT '_tmp_$')
RETURNS void
Аргументы функции txn
перечислены ниже.
Имя | Тип | Описание | Default | Обязательность |
---|---|---|---|---|
query |
TEXT |
Запрос для вставки данных во внешнюю таблицу. Рекомендуется использовать форму записи |
— |
Да |
http_port |
INT |
HTTP-порт ClickHouse, общий для всех нод, используемых в запросе. В данный момент нет возможности получить это значение с помощью SQL. Необходимо заполнить, если значение отлично от |
8123 |
Нет |
debug |
BOOL |
Флаг, указывающий на необходимость логирования функции |
false |
Нет |
ending_pattern |
TEXT |
Определяет формат наименования staging-таблиц — промежуточного слоя, создаваемого коннектором в ClickHouse перед выполнением вставки данных в целевую таблицу. Подстановочный знак (placeholder) |
'_tmp_$' |
Нет |
Вызов функции txn
осуществляется с помощью запроса SELECT
:
SELECT txn('INSERT INTO <external_table> VALUES(...);');
SELECT txn('INSERT INTO <external_table> SELECT ... FROM ...;');
где <external_table>
— имя предварительно созданной внешней таблицы.
Очистка staging-таблиц
В случае непредвиденных сбоев может потребоваться удаление staging-таблиц на всех нодах кластера ClickHouse. Для этого необходимо выполнить следующие шаги на стороне ADB:
-
Определите уникальный идентификатор, который был автоматически сгенерирован на стороне ADB при отправке данных в ClickHouse для использования в именах staging-таблиц:
SELECT database || '.' || name AS tbl FROM sys_tables('<hostname>', <port>) WHERE database = '<database_name>' and name like '<table_name><postfix>%';
где:
-
<hostname>
— имя одного из хостов ClickHouse, на котором расположена целевая таблица ClickHouse. -
<port>
— номер HTTP-порта для подключения к соответствующему хосту<hostname>
. -
<database_name>
— имя базы данных в ClickHouse. -
<table_name>
— имя целевой таблицы ClickHouse, в которую производилась запись из ADB. -
<postfix>
— постфикс, который добавлялся к имени целевой таблицы в ClickHouse для формирования имени staging-таблиц. Совпадает со значением опцииending_pattern
без подстановочного знака (placeholder)$
(см. Аргументы функции txn выше).
Пример:
SELECT database || '.' || name AS tbl FROM sys_tables('dev-adqm-01', 8123) where database = 'default' and name like 'test_distr_tmp_%';
Результат запроса приведен ниже. Число
59306
— искомый идентификатор.tbl ------------------------------ default.test_distr_tmp_59306 (1 row)
-
-
Используя найденный идентификатор, выполните удаление промежуточных таблиц на всех нодах кластера с помощью функции
drop_staging_tbl_based_on
:WITH ch(h, p) AS (values ('<hostname>', <port>) [, ...]) SELECT drop_staging_tbl_based_on('<database_name>', '<table_name>', ch.h, ch.p, '<user>', '<password>', <debug>, '<postfix><id>') from ch;
где:
-
<hostname>
— имя хоста ClickHouse. Необходимо перечислить все хосты в кластере через запятую. Каждый хост указывается с номером порта<port>
в круглых скобках. -
<port>
— номер HTTP-порта для подключения к соответствующему хосту<hostname>
. -
<database_name>
— имя базы данных в ClickHouse. -
<table_name>
— имя целевой таблицы ClickHouse, в которую производилась запись из ADB. -
<user>
— имя пользователя в ClickHouse. -
<password>
— пароль пользователя в ClickHouse. В случае отсутствия пароля (например, в тестовом окружении) указывается пустая строка. -
<debug>
— флаг, указывающий на необходимость запуска функции в режиме отладки. По умолчаниюfalse
. -
<postfix>
— постфикс, который добавлялся к имени целевой таблицы в ClickHouse для формирования имени staging-таблиц. Совпадает со значением опцииending_pattern
без подстановочного знака (placeholder)$
(см. Аргументы функции txn выше). -
id
— идентификатор, полученный на шаге 1.
Пример:
WITH ch(h, p) AS (values ('dev-adqm-01', 8123), ('dev-adqm-02', 8123), ('dev-adqm-03', 8123), ('dev-adqm-04', 8123)) SELECT drop_staging_tbl_based_on('default', 'test_distr', ch.h, ch.p, 'default', '', false, '_tmp_59306') FROM ch;
Результат:
drop_staging_tbl_based_on --------------------------- (4 rows)
-