Табличные функции remote, remoteSecure
Табличная функция remote позволяет получать доступ к удалённым серверам «на лету», то есть без создания таблицы Distributed. Табличная функция remoteSecure аналогична remote, но использует защищённое соединение.
Обе функции могут использоваться в запросах SELECT и INSERT.
Синтаксис
Параметры
| Аргумент | Описание |
|---|---|
addresses_expr | Адрес удалённого сервера или выражение, генерирующее несколько адресов удалённых серверов. Формат: host или host:port.host может быть указан как имя сервера либо как IPv4- или IPv6-адрес. Адрес IPv6 должен быть указан в квадратных скобках.port — это TCP-порт на удалённом сервере. Если порт опущен, используется значение tcp_port из конфигурационного файла сервера для табличной функции remote (по умолчанию 9000) и tcp_port_secure для табличной функции remoteSecure (по умолчанию 9440).Для IPv6-адресов указание порта обязательно. Если указан только параметр addresses_expr, по умолчанию для db и table используется system.one.Тип: String. |
db | Имя базы данных. Тип: String. |
table | Имя таблицы. Тип: String. |
user | Имя пользователя. Если не указано, используется default. Тип: String. |
password | Пароль пользователя. Если не указан, используется пустой пароль. Тип: String. |
sharding_key | Ключ шардирования для распределения данных по узлам. Например: insert into remote('127.0.0.1:9000,127.0.0.2', db, table, 'default', rand()). Тип: UInt32. |
Аргументы также могут передаваться с помощью именованных коллекций.
Возвращаемое значение
Таблица, расположенная на удалённом сервере.
Использование
Поскольку табличные функции remote и remoteSecure заново устанавливают соединение для каждого запроса, рекомендуется вместо них использовать таблицу Distributed. Кроме того, если заданы имена хостов, они разрешаются, и ошибки разрешения имён не учитываются при работе с различными репликами. При обработке большого числа запросов всегда создавайте таблицу Distributed заранее и не используйте табличную функцию remote.
Табличная функция remote может быть полезна в следующих случаях:
- Одноразовая миграция данных из одной системы в другую.
- Доступ к конкретному серверу для сравнения данных, отладки и тестирования, то есть ad-hoc-подключения.
- Запросы между различными кластерами ClickHouse в исследовательских целях.
- Редкие распределённые запросы, выполняемые вручную.
- Распределённые запросы, для которых набор серверов каждый раз задаётся заново.
Адреса
Несколько адресов можно указать через запятую. В этом случае ClickHouse будет использовать распределённую обработку и отправит запрос на все указанные адреса (как на шарды с различными данными). Пример:
Примеры
Выборка данных с удалённого сервера:
Или с использованием именованных коллекций:
Вставка данных в таблицу на удалённом сервере:
Миграция таблиц из одной системы в другую:
В этом примере используется одна таблица из демонстрационного набора данных. База данных — imdb, таблица — actors.
В исходной системе ClickHouse (системе, которая в данный момент хранит данные)
-
Проверьте исходную базу данных и имя таблицы (
imdb.actors) -
Получите инструкцию CREATE TABLE из исходной системы:
Ответ
На целевой системе ClickHouse
-
Создайте целевую базу данных:
-
Используя оператор CREATE TABLE из исходной системы, создайте целевую таблицу:
Затем на исходном развертывании
Вставьте данные в новую базу данных и таблицу, созданные на удалённой системе. Вам понадобятся хост, порт, имя пользователя, пароль, целевая база данных и целевая таблица.
Глоббинг
Шаблоны в фигурных скобках { } используются для генерации набора шардов и для указания реплик. Если фигурных скобок несколько пар, генерируется декартово произведение соответствующих наборов.
Поддерживаются следующие типы шаблонов.
{a,b,c}— представляет любую из альтернативных строкa,bилиc. Шаблон заменяется наaв адресе первого шарда, наb— во втором и так далее. Например,example0{1,2}-1генерирует адресаexample01-1иexample02-1.{N..M}— диапазон чисел. Этот шаблон генерирует адреса шардов с увеличивающимися индексами отNдоMвключительно. Например,example0{1..2}-1генерируетexample01-1иexample02-1.{0n..0m}— диапазон чисел с ведущими нулями. Этот шаблон сохраняет ведущие нули в индексах. Например,example{01..03}-1генерируетexample01-1,example02-1иexample03-1.{a|b}— произвольное количество вариантов, разделённых символом|. Шаблон задаёт реплики. Например,example01-{1|2}генерирует репликиexample01-1иexample01-2.
Запрос будет отправлен на первую «здоровую» реплику. Однако для remote реплики перебираются в порядке, который в данный момент задан настройкой load_balancing.
Число сгенерированных адресов ограничено настройкой table_function_remote_max_addresses.