命名集合
命名集合提供了一种存储键值对集合的方法,用于配置与外部源的集成。您可以将命名集合与字典、表、表函数和对象存储一起使用。
命名集合可以通过 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_management
和 named_collection_control
权限:
在上面的示例中,password_sha256_hex
值是密码 SHA256 哈希的十六进制表示。用户 default
的此配置具有属性 replace=true
,因为默认配置中设置了明文 password
,并且不能同时为用户设置明文和 sha256 hex 密码。
命名集合的存储
命名集合可以存储在本地磁盘或 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
。
在配置文件中存储命名集合
XML 示例
在上面的示例中:
key_1
始终可以被覆盖。key_2
永远不能被覆盖。url
是否可以被覆盖取决于allow_named_collection_override_by_default
的值。
修改命名集合
使用 DDL 查询创建的命名集合可以用 DDL 修改或删除。使用 XML 文件创建的命名集合可以通过编辑或删除相应的 XML 文件进行管理。
修改 DDL 命名集合
更改或添加集合 collection2
的 key1
和 key3
键
(这不会更改这些键的 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
。由于还有其他可选参数:host
、hostname
、port
,该参数是可选的。以下伪代码解释优先级:
创建示例:
配置示例:
使用 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'
覆盖以选择另一个集合。