Clickhouse 词典:为什么 CREATE DICTIONARY 需要数据库?
Clickhouse Dictionaries: why CREATE DICTIONARY needs a database?
ClickHouse 中的 new CREATE DICTIONARY 习惯用法将在数据库中创建字典:
CREATE DICTIONARY [IF NOT EXISTS] [db.]dictionary_name [ON CLUSTER cluster]
XML 文件创建的字典被创建为空字符串数据库:
<dictionaries>
<dictionary>
<name>rates</name>
<source>
...
</dictionaries>
他们在 system.dictionaries 上生成一个条目,如下所示:
:) select * from system.dictionaries \G
...
Row 4:
──────
database:
name: rates
这是一个空字符串数据库,理解为一个全局字典,可以不带数据库前缀来引用。
然而,使用 CREATE DICTIONARY
SQL 习惯用法,如果未指定 db
,则在 default
数据库中创建 DICTIONARY,而不是作为全局字典:
:) CREATE DICTIONARY IF NOT EXISTS rates (...)
:) select * from system.dictionaries \G
Row 2:
──────
database: default
name: rates
问题:有没有办法通过SQL成语创建全局字典?
DDL 字典不能驻留在全局范围内,因为它在 DDL 方面不存在。
据我了解,您的问题是向后不兼容 xml-based 字典和 DDL 字典,因此解决它的唯一方法是添加 database-prefix(例如,如果它定义在 table 架构需要应用 ALTER TABLE MODIFY COLUMN-语句)。
为了轻松地从 xml- 迁移到 DDL-based 字典需要临时托管两种类型的字典(xml 和 DDL)并将所有消费者一一切换到 DDL 字典。
DDL 字典比 xml-based 字典更易于维护和灵活,因为:
- 无需触摸即可轻松管理它们(添加、删除等)xml-files
- ON CLUSTER-子句允许在指定集群的所有服务器上执行某些操作
- 管理访问权限privileges
- 从 v20.4.2.9, 2020-05-12 dictionary can be efficiently used in JOIN-clause instead of dictGet (see Altinity: Clickhouse Dictionaries Reloaded)
开始
- 作为序数使用它 tables
ClickHouse 中的 new CREATE DICTIONARY 习惯用法将在数据库中创建字典:
CREATE DICTIONARY [IF NOT EXISTS] [db.]dictionary_name [ON CLUSTER cluster]
XML 文件创建的字典被创建为空字符串数据库:
<dictionaries>
<dictionary>
<name>rates</name>
<source>
...
</dictionaries>
他们在 system.dictionaries 上生成一个条目,如下所示:
:) select * from system.dictionaries \G
...
Row 4:
──────
database:
name: rates
这是一个空字符串数据库,理解为一个全局字典,可以不带数据库前缀来引用。
然而,使用 CREATE DICTIONARY
SQL 习惯用法,如果未指定 db
,则在 default
数据库中创建 DICTIONARY,而不是作为全局字典:
:) CREATE DICTIONARY IF NOT EXISTS rates (...)
:) select * from system.dictionaries \G
Row 2:
──────
database: default
name: rates
问题:有没有办法通过SQL成语创建全局字典?
DDL 字典不能驻留在全局范围内,因为它在 DDL 方面不存在。
据我了解,您的问题是向后不兼容 xml-based 字典和 DDL 字典,因此解决它的唯一方法是添加 database-prefix(例如,如果它定义在 table 架构需要应用 ALTER TABLE MODIFY COLUMN-语句)。 为了轻松地从 xml- 迁移到 DDL-based 字典需要临时托管两种类型的字典(xml 和 DDL)并将所有消费者一一切换到 DDL 字典。
DDL 字典比 xml-based 字典更易于维护和灵活,因为:
- 无需触摸即可轻松管理它们(添加、删除等)xml-files
- ON CLUSTER-子句允许在指定集群的所有服务器上执行某些操作
- 管理访问权限privileges
- 从 v20.4.2.9, 2020-05-12 dictionary can be efficiently used in JOIN-clause instead of dictGet (see Altinity: Clickhouse Dictionaries Reloaded) 开始
- 作为序数使用它 tables