【问题标题】:Clickhouse Dictionaries: why CREATE DICTIONARY needs a database?Clickhouse 词典:为什么 CREATE DICTIONARY 需要数据库?
【发布时间】:2020-10-01 15:43:07
【问题描述】:

ClickHouse 中的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 成语创建全局字典?

【问题讨论】:

    标签: clickhouse


    【解决方案1】:

    DDL 字典不能驻留在全局范围内,因为它在 DDL 方面不存在。

    据我了解,您的问题是基于 xml 的字典和 DDL 的向后不兼容,因此修复它的唯一方法是添加数据库前缀(例如,如果它在表模式中定义,则需要应用 @987654321 @-陈述)。 要从基于 xml 的字典轻松迁移到基于 DDL 的字典,需要临时托管两种类型的字典(xml 和 DDL),并将所有消费者一一切换到 DDL 字典。


    DDL 字典比基于 xml 的字典更易于维护和灵活,因为:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      相关资源
      最近更新 更多