Skip to main content
命名集合提供了一种存储键值对集合的方式, 可用于配置与外部源的集成。您可以将命名集合用于 字典、表、表函数和对象存储。 命名集合可以通过 DDL 或在配置文件中进行配置,并在 ClickHouse 启动时生效。它们可以简化对象的创建,并向 没有管理权限的用户隐藏凭据。 命名集合中的键必须与相应 函数、表引擎、database 等的参数名称匹配。下面的示例中, 每种类型都链接到了对应的参数列表。 在命名集合中设置的参数可以在 SQL 中被覆盖,下面的示例 展示了这一点。可以使用 [NOT] OVERRIDABLE 关键字、XML 属性 和/或配置选项 allow_named_collection_override_by_default 来限制这种能力。
如果允许覆盖,可能会让没有管理权限的用户 推断出您试图隐藏的凭据。 如果您出于这个目的使用命名集合,应禁用 allow_named_collection_override_by_default (默认启用) 。

将命名集合存储在 system 数据库中

DDL 示例

在上述示例中:
  • key_1 始终可以被覆盖。
  • key_2 永远不能被覆盖。
  • url 是否可以被覆盖,取决于 allow_named_collection_override_by_default 的值。

使用 DDL 创建 命名集合 的权限要求

要通过 DDL 管理 命名集合,用户必须具有 named_collection_control 特权。可通过在 /etc/clickhouse-server/users.d/ 中添加文件来授予该权限。以下示例为用户 default 同时授予 access_managementnamed_collection_control 特权:
/etc/clickhouse-server/users.d/user_default.xml
在上述示例中,password_sha256_hex 的值是密码的 SHA256 哈希的十六进制表示。用户 default 的这项配置带有 replace=true 属性,因为默认配置中已经设置了明文 password,而同一用户不能同时设置明文密码和 sha256 十六进制密码。

命名集合的存储

命名集合既可以存储在本地 disk 上,也可以存储在 ZooKeeper/Keeper 中。默认使用本地存储。 它们也可以采用加密存储,并使用与磁盘加密相同的算法, 其中默认使用 aes_128_ctr 要配置命名集合存储,需要指定一个 type。它可以是 localkeeper/zookeeper。对于加密存储, 可以使用 local_encryptedkeeper_encrypted/zookeeper_encrypted 要使用 ZooKeeper/Keeper,还需要在配置文件的 named_collections_storage 部分中设置一个 path (即 ZooKeeper/Keeper 中存储命名集合的路径) 。 下面的示例使用了加密和 ZooKeeper/Keeper:
可选配置参数 update_timeout_ms 的默认值为 5000

在配置文件中存储命名集合

XML 示例

/etc/clickhouse-server/config.d/named_collections.xml
在上述示例中:
  • key_1 始终可以被覆盖。
  • key_2 绝不会被覆盖。
  • url 是否可以被覆盖,取决于 allow_named_collection_override_by_default 的值。

修改命名集合

通过 DDL 查询创建的命名集合,可以使用 DDL 进行修改或删除。通过 XML 文件创建的命名集合,则可以通过编辑或删除相应的 XML 文件来管理。

修改 DDL 命名集合

修改或添加集合 collection2 中的键 key1key3 (这不会更改这些键的 overridable 标志值) :
更改或添加键 key1,并允许始终覆盖它:
collection2 中删除键 key2
修改或新增集合 collection2 的键 key1,并删除键 key3
要强制某个键在 overridable 标志上使用默认设置,你必须 先删除该键,然后重新添加。

删除名为 collection2 的 DDL 命名集合:

用于访问 S3 的命名集合

参数说明请参见 S3 表函数

DDL 示例

XML 示例

s3() 函数和 S3 表的命名集合示例

以下两个示例都使用相同的命名集合 s3_mydata

s3() 函数

上述 s3() 函数的第一个参数是集合名称,即 s3_mydata。如果不使用命名集合,那么每次调用 s3() 函数时,都需要传入访问密钥 ID、密钥、格式和 URL。

S3 表

用于访问 MySQL 数据库的命名集合

参数说明请参见 mysql

DDL 示例

XML 示例

mysql() 函数、MySQL 表、MySQL 数据库和字典的命名集合示例

以下四个示例使用的是同一个命名集合 mymysql

mysql() 函数

该 命名集合 未指定 table 参数,因此需在函数调用中指定 table = 'test'

MySQL 表

DDL 会覆盖命名集合中的 connection_pool_size 设置。

MySQL 数据库

MySQL 字典

用于访问 PostgreSQL 数据库的命名集合

参数说明请参见 postgresql。此外,还有以下别名:
  • usernameuser 的别名
  • dbdatabase 的别名。
在集合中,参数 addresses_expr 用于替代 host:port。该参数是可选的,因为还可以使用其他可选参数:hosthostnameport。以下伪代码说明了优先级:
创建示例:
配置示例:

使用命名集合的 postgresql 函数示例

在 PostgreSQL 引擎数据库中使用命名集合的示例

PostgreSQL 会在创建表时从命名集合中复制数据。此后,即使命名集合发生变化,也不会影响现有表。

将命名集合用于 PostgreSQL 引擎数据库的示例

在源为 POSTGRESQL 的字典中使用命名集合的示例

用于访问远程 ClickHouse 数据库的命名集合

参数说明见 remote 配置示例:
由于使用的是 remoteSecure,因此连接无需 secure,但它可用于字典。

结合命名集合使用 remote/remoteSecure 函数的示例

使用源为 ClickHouse 的字典和命名集合的示例

用于访问 Kafka 的命名集合

有关参数的说明,请参见 Kafka

DDL 示例

XML 示例

使用命名集合的 Kafka 表示例

以下两个示例都使用同一个命名集合 my_kafka_cluster

用于备份的命名集合

有关参数的说明,请参见 备份与恢复

DDL 示例

XML 示例

用于访问 MongoDB 表和字典的命名集合

有关参数的说明,请参阅 mongodb

DDL 示例

XML 示例

MongoDB 表

DDL 会覆盖 命名集合 中这些选项的配置。

MongoDB 字典

该命名集合将 my_collection 指定为集合名称。在函数调用中,可通过 collection = 'my_dict' 将其覆盖,以选择另一个集合。
最后修改于 2026年7月3日