remote, remoteSecure 表函数
表函数 remote
允许按需访问远程服务器,即无需创建一个分布式表。表函数 remoteSecure
与 remote
相同,但通过安全连接进行。
这两个函数可以在 SELECT
和 INSERT
查询中使用。
语法
参数
-
addresses_expr
— 远程服务器地址或生成多个远程服务器地址的表达式。格式:host
或host:port
。host
可以指定为服务器名称或 IPv4 或 IPv6 地址。IPv6 地址必须用方括号括起来。port
是远程服务器上的 TCP 端口。如果省略端口,将为表函数remote
使用服务器配置文件中的tcp_port(默认值为 9000),为表函数remoteSecure
使用tcp_port_secure(默认值为 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
表函数在以下情况下可能会很有用:
- 从一个系统向另一个系统的一次性数据迁移
- 访问特定服务器以进行数据比较、调试和测试,即临时连接。
- 研究目的的各种 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设置。