命名集合
命名集合提供了一种存储键值对集合的方法,用于配置与外部源的集成。您可以在字典、表、表函数和对象存储中使用命名集合。
命名集合可以通过 DDL 或配置文件进行配置,并在 ClickHouse 启动时应用。它们简化了对象的创建和隐藏凭证,以在没有管理权限的用户面前隐藏信息。
命名集合中的键必须与相应函数、表引擎、数据库等的参数名称匹配。在下方示例中,每种类型的参数列表都有所链接。
可以在 SQL 中重写命名集合中设置的参数,这将在下面的示例中展示。可以使用 [NOT] OVERRIDABLE
关键词和 XML 属性以及/或配置选项 allow_named_collection_override_by_default
限制此功能。
如果允许重写,可能会有没有管理权限的用户识别您试图隐藏的凭证。
如果您使用命名集合的目的是为了隐藏凭证,建议您禁用 allow_named_collection_override_by_default
(该选项默认启用)。
将命名集合存储在系统数据库中
DDL 示例
在上面的示例中:
key_1
可以始终被重写。key_2
不能被重写。url
是否可被重写取决于allow_named_collection_override_by_default
的值。
使用 DDL 创建命名集合的权限
要使用 DDL 管理命名集合,用户必须拥有 named_control_collection
权限。这可以通过将文件添加到 /etc/clickhouse-server/users.d/
来分配。以下示例为用户 default
分配了 access_management
和 named_collection_control
权限:
在上述示例中, password_sha256_hex
值是密码的 SHA256 哈希的十六进制表示。 该用户 default
的配置具有 replace=true
属性,因为默认配置中设置了明文 password
,并且用户不能同时设置明文和 sha256 十六进制密码。
命名集合的存储
命名集合可以存储在本地磁盘或 ZooKeeper/Keeper 中。 默认情况下使用本地存储。
它们也可以使用与 磁盘加密 相同的算法进行加密存储,其中默认使用 aes_128_ctr
。
要配置命名集合存储,您需要指定一个 type
。 这可以是 local
或 keeper
/ zookeeper
。对于加密存储,您可以使用 local_encrypted
或 keeper_encrypted
/ zookeeper_encrypted
。
要使用 ZooKeeper/Keeper,我们还需要在配置文件中为 named_collections_storage
部分设置一个 path
(存储命名集合的 ZooKeeper/Keeper 中的路径)。以下示例使用加密和 ZooKeeper/Keeper:
可选配置参数 update_timeout_ms
默认等于 5000
。
将命名集合存储在配置文件中
XML 示例
在上面的示例中:
key_1
可以始终被重写。key_2
不能被重写。url
是否可被重写取决于allow_named_collection_override_by_default
的值。
修改命名集合
使用 DDL 查询创建的命名集合可以通过 DDL 进行更改或删除。使用 XML 文件创建的命名集合可以通过编辑或删除相应的 XML 进行管理。
更改 DDL 命名集合
更改或添加集合 collection2
的键 key1
和 key3
(这不会更改这些键的 overridable
标志的值):
更改或添加键 key1
并允许其始终被重写:
从 collection2
中删除键 key2
:
更改或添加键 key1
并删除集合 collection2
的键 key3
:
要强制某个键使用 overridable
标志的默认设置,您必须删除并重新添加该键:
删除 DDL 命名集合 collection2
:
用于访问 S3 的命名集合
参数的描述见 s3 表函数。
DDL 示例
XML 示例
s3() 函数和 S3 表命名集合示例
以下两个示例都使用相同的命名集合 s3_mydata
:
s3() 函数
上面 s3()
函数的第一个参数是集合的名称 s3_mydata
。如果没有命名集合,访问密钥 ID、凭证、格式和 URL 都会在每次调用 s3()
函数时传递。
S3 表
用于访问 MySQL 数据库的命名集合
参数的描述见 mysql。
DDL 示例
XML 示例
mysql() 函数、MySQL 表、MySQL 数据库和字典命名集合示例
以下四个示例都使用相同的命名集合 mymysql
:
mysql() 函数
命名集合没有指定 table
参数,因此它在函数调用中指定为 table = 'test'
。
MySQL 表
DDL 覆盖了命名集合设置的连接池大小。
MySQL 数据库
MySQL 字典
用于访问 PostgreSQL 数据库的命名集合
参数的描述见 postgresql。此外,还有别名:
username
作为user
db
作为database
参数 addresses_expr
用于集合中,代替 host:port
。该参数是可选的,因为还有其他可选的参数:host
、hostname
、port
。以下伪代码解释了优先级:
创建示例:
配置示例:
使用命名集合与 postgresql 函数的示例
使用命名集合与 PostgreSQL 引擎的数据库的示例
PostgreSQL 在创建表时会从命名集合中复制数据。对集合的更改不会影响现有表。
使用命名集合与 PostgreSQL 引擎的数据库的示例
使用命名集合与源为 PostgreSQL 的字典的示例
用于访问远程 ClickHouse 数据库的命名集合
参数的描述见 remote。
配置示例:
secure
对于连接并不需要,因为使用了 remoteSecure
,但可以用于字典。
使用命名集合与 remote
/ remoteSecure
函数的示例
使用命名集合与源为 ClickHouse 的字典的示例
用于访问 Kafka 的命名集合
参数的描述见 Kafka。
DDL 示例
XML 示例
使用命名集合与 Kafka 表的示例
以下两个示例都使用相同的命名集合 my_kafka_cluster
:
用于备份的命名集合
参数的描述见 备份和恢复。