Перейти к основному содержимому
Перейти к основному содержимому

Функция таблицы 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.