可以在部分 ClickHouse Cloud 服务上启用通过 DDL 创建的命名集合。请联系 Support 确认可用性。由于用户无法修改 ClickHouse Cloud 中的服务器配置文件,因此无法使用在配置文件中定义的命名集合。
[NOT] OVERRIDABLE 关键字、XML 属性
和/或配置选项 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_management 和 named_collection_control 特权:
/etc/clickhouse-server/users.d/user_default.xml
named_collection_control 允许用户创建、修改和删除 命名集合,但不允许读取其中已存储的值。读取值属于另一项独立特权 SHOW NAMED COLLECTIONS SECRETS,由 show_named_collections_secrets 设置启用。用户只能授予自身已拥有的特权,因此在 show_named_collections_secrets 处于禁用状态时,该用户并不具备完整的特权集合,执行 GRANT ALL ON *.* TO another_user WITH GRANT OPTION 会被拒绝,并提示 (Missing permissions: SHOW NAMED COLLECTIONS SECRETS ON *)。
命名集合的存储
命名集合既可以存储在本地 disk 上,也可以存储在 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。
您可以通过 system.server_settings 和 getServerSetting 查看当前存储类型:
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 中的键 key1 和 key3
(这不会更改这些键的 overridable 标志值) :
key1,并允许始终覆盖它:
collection2 中删除键 key2:
collection2 的键 key1,并删除键 key3:
overridable 标志上使用默认设置,你必须
先删除该键,然后重新添加。
删除名为 collection2 的 DDL 命名集合:
用于访问 S3 的命名集合
参数说明请参见 S3 表函数。DDL 示例
XML 示例
s3() 函数和 S3 表的命名集合示例
以下两个示例都使用相同的命名集合s3_mydata:
s3() 函数
S3 表
用于访问 MySQL 数据库的命名集合
参数说明请参见 mysql。DDL 示例
XML 示例
mysql() 函数、MySQL 表、MySQL 数据库和字典的命名集合示例
以下四个示例使用的是同一个命名集合 mymysql:
mysql() 函数
该 命名集合 未指定
table 参数,因此需在函数调用中指定 table = 'test'。MySQL 表
DDL 会覆盖命名集合中的 connection_pool_size 设置。
MySQL 数据库
MySQL 字典
用于访问 PostgreSQL 数据库的命名集合
参数说明请参见 postgresql。此外,还有以下别名:username是user的别名db是database的别名。
postgresql_connection_pool_size 以及其他 postgresql_* 设置) 也可以存储在集合中,或以 key = value overrides 的形式传递。它们适用于 PostgreSQL 表引擎、postgresql 表函数以及 PostgreSQL 数据库引擎;表上的显式 SETTINGS clause 的优先次序高于集合中的配置值。
在集合中,参数 addresses_expr 用于替代 host:port。该参数是可选的,因为还可以使用其他可选参数:host、hostname、port。以下伪代码说明了优先级:
使用命名集合的 postgresql 函数示例
在 PostgreSQL 引擎数据库中使用命名集合的示例
PostgreSQL 会在创建表时从命名集合中复制数据。此后,即使命名集合发生变化,也不会影响现有表。
将命名集合用于 PostgreSQL 引擎数据库的示例
在源为 POSTGRESQL 的字典中使用命名集合的示例
用于访问远程 ClickHouse 数据库的命名集合
参数说明见 remote。 配置示例:remoteSecure,因此连接无需 secure,但它可用于字典。
结合命名集合使用 remote/remoteSecure 函数的示例
使用源为 ClickHouse 的字典和命名集合的示例
用于访问 Kafka 的命名集合
有关参数的说明,请参见 Kafka。DDL 示例
XML 示例
OAUTHBEARER/OIDC 身份验证
OAUTHBEARER 选项属于扩展的 librdkafka 设置,因此必须嵌套在每个命名集合内的 <kafka> 元素下。顶层的 kafka_* 键则用于配置 Kafka 表引擎。ClickHouse 会先将嵌套 XML 元素名称中的下划线转换为点号,再将其传递给 librdkafka。
以下示例为 Azure Event Hubs 命名空间配置 OAuth 客户端凭证:
/etc/clickhouse-server/config.d/named_collections.xml
ENGINE = Kafka(eventhub_one) 使用命名集合时,ClickHouse 不会合并全局服务器的 <kafka> 配置。如果各 Event Hubs 命名空间的 broker 地址或 OAuth scope 不同,请为每个命名空间分别创建一个集合,并在该集合中包含所有必需的 OIDC 属性。
本示例中的 from_env 属性适用于通过 XML 定义的命名集合,会从 ClickHouse 服务器进程的环境变量中读取值。有关部署及默认值的详细信息,请参阅通过环境变量进行替换;如需在预处理后的配置文件中保护机密信息,请参阅加密和隐藏配置。
使用命名集合的 Kafka 表示例
以下两个示例都使用同一个命名集合my_kafka_cluster:
用于备份的命名集合
有关参数的说明,请参见 备份与恢复。DDL 示例
XML 示例
用于访问 MongoDB 表和字典的命名集合
有关参数的说明,请参阅 mongodb。DDL 示例
XML 示例
MongoDB 表
DDL 会覆盖 命名集合 中这些选项的配置。
MongoDB 字典
该命名集合将
my_collection 指定为集合名称。在函数调用中,可通过 collection = 'my_dict' 将其覆盖,以选择另一个集合。