跳到主要内容
跳到主要内容

命名集合

Not supported in ClickHouse Cloud

命名集合提供了一种存储键值对集合的方法,用于配置与外部源的集成。您可以将命名集合与字典、表、表函数和对象存储一起使用。

命名集合可以通过 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_collection_control 权限。可以通过在 /etc/clickhouse-server/users.d/ 中添加文件来分配该权限。示例中为用户 default 赋予了 access_managementnamed_collection_control 权限:

提示

在上面的示例中,password_sha256_hex 值是密码 SHA256 哈希的十六进制表示。用户 default 的此配置具有属性 replace=true,因为默认配置中设置了明文 password,并且不能同时为用户设置明文和 sha256 hex 密码。

命名集合的存储

命名集合可以存储在本地磁盘或 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 示例

在上面的示例中:

  • key_1 始终可以被覆盖。
  • key_2 永远不能被覆盖。
  • url 是否可以被覆盖取决于 allow_named_collection_override_by_default 的值。

修改命名集合

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

修改 DDL 命名集合

更改或添加集合 collection2key1key3 键 (这不会更改这些键的 overridable 标志的值):

更改或添加 key1 并允许其始终被覆盖:

collection2 中移除 key2

更改或添加 key1 并删除集合 collection2key3

要强制一个键使用 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。由于还有其他可选参数:hosthostnameport,该参数是可选的。以下伪代码解释优先级:

创建示例:

配置示例:

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

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

备注

PostgreSQL 在创建表时从命名集合中复制数据。对集合的更改不会影响现有表。

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

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

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

参数描述请参见 remote

配置示例:

secure 在连接中不是必需的,因为使用 remoteSecure,但可以用于字典。

使用 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' 覆盖以选择另一个集合。