Skip to main content
命名集合提供了一种存储键值对集合的方式, 可用于配置与外部源的集成。您可以将命名集合用于 字典、表、表函数和对象存储。
可以在部分 ClickHouse Cloud 服务上启用通过 DDL 创建的命名集合。请联系 Support 确认可用性。由于用户无法修改 ClickHouse Cloud 中的服务器配置文件,因此无法使用在配置文件中定义的命名集合。
命名集合可以通过 DDL 或在配置文件中进行配置,并在 ClickHouse 启动时生效。它们可以简化对象的创建,并向 没有管理权限的用户隐藏凭据。 命名集合中的键必须与相应 函数、表引擎、数据库等的参数名称匹配。下面的示例中, 每种类型都链接到了对应的参数列表。 在命名集合中设置的参数可以在 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 您可以通过 system.server_settingsgetServerSetting 查看当前存储类型:
更改存储类型需要重启 server;SYSTEM RELOAD CONFIG 不会更改当前使用的 backend。

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

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 的别名。
PostgreSQL table engine 的连接池设置 (postgresql_connection_pool_size 以及其他 postgresql_* 设置) 也可以存储在集合中,或以 key = value overrides 的形式传递。它们适用于 PostgreSQL 表引擎、postgresql 表函数以及 PostgreSQL 数据库引擎;表上的显式 SETTINGS clause 的优先次序高于集合中的配置值。 在集合中,参数 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年8月26日