Clickhouse 表函数介绍
表函数
表函数能够被指定在FROM 语句中,替代数据库和表名称. 表函数仅被应用于如果 ‘readonly’ 没有被设置,表函数与其他函数没有关联.
merge
merge(db_name, 'tables_regexp') 创建了一个临时 Merge 表. 对于更多信息, 请查看章节 “Table engines, Merge”.
表结构取自遇到的第一个与正则表达式匹配的表。
remote
remote('addresses_expr', db, table[, 'user'[, 'password']])
或者
remote('addresses_expr', db.table[, 'user'[, 'password']])
允许访问远程服务器而不创建分布式表。
addresses_expr - 一个表达式,生成远程服务器的地址.
这可能只是一个服务器地址。 服务器地址是主机:端口,或只是主机。 主机可以指定为服务器名称,也可以指定为IPv4或IPv6地址。 IPv6地址在方括号中指定。 该端口是远程服务器上的TCP端口。 如果端口被省略,它将使用服务器配置文件中的tcp_port(默认为9000)。
注意:除指定IPv6地址外,该端口是必需的。
示例:
example01-01-1
example01-01-1:9000
localhost
127.0.0.1
[::]:9000
[2a02:6b8:0:1111::11]:9000
多个地址可以用逗号分隔。 在这种情况下,查询将转到所有指定的地址(如使用不同数据的分片)并使用分布式处理。
例如:
example01-01-1, example01-02-1
部分表达式可以在大括号中指定。 前面的例子可以写成如下:
example01-0{1,2}-1
大括号可以包含由两个点(非负整数)分隔的一系列数字。 在这种情况下,范围被扩展为一组生成碎片地址的值。 如果第一个数字从0开始,那么这些数值将以相同的0对齐方式形成。 前面的例子可以写成如下:
example01-{01..02}-1
如果你有多对大括号,它会生成相应集合的直接产物。
大括号中的地址和片段可以用管道(|)符号分开。 在这种情况下,相应的地址组被解释为副本,查询将被发送到第一个健康副本。 按照“load_balancing”设置中当前设置的顺序评估副本。
示例:
example01-{01..02}-{1|2}
这个例子指定了两个分别有两个副本的分片。
生成的地址数量受常数的限制。 现在这是1000个地址。
使用“远程”表功能不如创建分布式表最佳,因为在这种情况下,将为每个请求重新建立服务器连接。 另外,如果设置了主机名称,名称将被解析,并且在使用各种副本时不会计算错误。 在处理大量查询时,总是提前创建分布式表,而不要使用“远程”表函数。
'远程'表在如下的场景中是有用的:
- 访问特定的服务器进行数据比较,调试和测试。
- 在不同的 ClickHouse 集群之间进行查询,为了研究用途.
- 偶尔分布式的请求是手工的。
- 分布式请求,每次服务器集群都是重新定义的。
用户名可以省略。 在这种情况下,使用“默认”用户名。 密码可以省略。 在这种情况下,使用空密码。