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

命名集合

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_control_collection 权限。这可以通过将文件添加到 /etc/clickhouse-server/users.d/ 来分配。以下示例为用户 default 分配了 access_managementnamed_collection_control 权限:

提示

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

命名集合的存储

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

更改或添加集合 collection2 的键 key1key3(这不会更改这些键的 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。该参数是可选的,因为还有其他可选的参数:hosthostnameport。以下伪代码解释了优先级:

创建示例:

配置示例:

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

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

备注

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

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

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

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

参数的描述见 remote

配置示例:

secure 对于连接并不需要,因为使用了 remoteSecure,但可以用于字典。

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

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

用于访问 Kafka 的命名集合

参数的描述见 Kafka

DDL 示例

XML 示例

使用命名集合与 Kafka 表的示例

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

用于备份的命名集合

参数的描述见 备份和恢复

DDL 示例

XML 示例