使用前请参考官网 remote 函数 介绍。
1、简介
remote, remoteSecure
允许您访问远程服务器,而无需创建 Distributed
表。remoteSecure
- 与 remote
相同,但是会使用加密链接。
这两个函数都可以在 SELECT
和 INSERT
查询中使用。
2、语法
remote('addresses_expr', db, table[, 'user'[, 'password'], sharding_key])
remote('addresses_expr', db.table[, 'user'[, 'password'], sharding_key])
remoteSecure('addresses_expr', db, table[, 'user'[, 'password'], sharding_key])
remoteSecure('addresses_expr', db.table[, 'user'[, 'password'], sharding_key])
参数说明:
-
addresses_expr
– 代表远程服务器地址的一个表达式。可以只是单个服务器地址。 服务器地址可以是host:port
或host
。host
可以指定为服务器名称,或是IPV4或IPV6地址。IPv6地址在方括号中指定。port
是远程服务器上的TCP端口。 如果省略端口,则remote
使用服务器配置文件中的 tcp_port (默认情况为,9000),remoteSecure
使用 tcp_port_secure (默认情况为,9440)。IPv6地址需要指定端口。
类型: 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。
3、使用案例
使用方式很简单:
SELECT * FROM remote('addresses_expr', db, table, 'user', 'password') LIMIT 7;
因此,可以借助这个功能实现数据迁移:
INSERT INTO <local_database>.<local_table>
SELECT * FROM remote('remote_clickhouse_addr', <remote_database>, <remote_table>, '<remote_user>', '<remote_password>')
操作流程
- 在源集群的
system.tables
表查询出数据库、表、DDL、分区、表引擎等信息 - 在目标集群上,运行 DDL 创建表,然后运行上述迁移语句复制数据
- 遍历所有表,重复执行第2步骤