Функция таблицы 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— Ключ шардирования для поддержки распределения данных между узлами. Например: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.