Табличная функция remote, remoteSecure
Табличная функция remote
позволяет получать доступ к удалённым серверам на лету, т.е. без создания распределенной таблицы. Табличная функция 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
— Ключ шarding для поддержки распределения данных между узлами. Например:insert into remote('127.0.0.1:9000,127.0.0.2', db, table, 'default', rand())
. Тип: UInt32.
Аргументы также могут быть переданы с использованием именованных коллекций.
Возвращаемое значение
Таблица, расположенная на удаленном сервере.
Использование
Поскольку табличные функции remote
и remoteSecure
восстанавливают соединение для каждого запроса, рекомендуется использовать распределенную
таблицу вместо этого. Также, если установлены имена хостов, они разрешаются, и ошибки не учитываются при работе с различными репликами. При обработке большого количества запросов всегда создавайте распределенную
таблицу заранее и не используйте табличную функцию 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.