Help wanted!

The following content of this documentation page has been machine-translated. But unlike other websites, it is not done on the fly. This translated text lives on GitHub repository alongside main ClickHouse codebase and waits for fellow native speakers to make it more human-readable. You can also use the original English version as a reference.

Help ClickHouse documentation by editing this page

字典键和字段

<structure> 子句描述可用于查询的字典键和字段。

XML描述:

  1. <dictionary>
  2. <structure>
  3. <id>
  4. <name>Id</name>
  5. </id>
  6. <attribute>
  7. <!-- Attribute parameters -->
  8. </attribute>
  9. ...
  10. </structure>
  11. </dictionary>

属性在元素中描述:

DDL查询:

  1. CREATE DICTIONARY dict_name (
  2. Id UInt64,
  3. -- attributes
  4. )
  5. PRIMARY KEY Id
  6. ...

查询正文中描述了属性:

  • PRIMARY KEY键列
  • AttrName AttrType数据列. 可以有多个属性。

ClickHouse支持以下类型的键:

  • 数字键。 UInt64. 在定义 <id> 标记或使用 PRIMARY KEY 关键字。
  • 复合密钥。 组不同类型的值。 在标签中定义 <key>PRIMARY KEY 关键字。

Xml结构可以包含 <id><key>. DDL-查询必须包含单个 PRIMARY KEY.

警告

不能将键描述为属性。

数字键

类型: UInt64.

配置示例:

  1. <id>
  2. <name>Id</name>
  3. </id>

配置字段:

  • name – The name of the column with keys.

对于DDL-查询:

  1. CREATE DICTIONARY (
  2. Id UInt64,
  3. ...
  4. )
  5. PRIMARY KEY Id
  6. ...
  • PRIMARY KEY – The name of the column with keys.

复合密钥

关键可以是一个 tuple 从任何类型的字段。 该 布局 在这种情况下,必须是 complex_key_hashedcomplex_key_cache.

提示

复合键可以由单个元素组成。 例如,这使得可以使用字符串作为键。

键结构在元素中设置 <key>. 键字段的格式与字典的格式相同 属性. 示例:

  1. <structure>
  2. <key>
  3. <attribute>
  4. <name>field1</name>
  5. <type>String</type>
  6. </attribute>
  7. <attribute>
  8. <name>field2</name>
  9. <type>UInt32</type>
  10. </attribute>
  11. ...
  12. </key>
  13. ...

  1. CREATE DICTIONARY (
  2. field1 String,
  3. field2 String
  4. ...
  5. )
  6. PRIMARY KEY field1, field2
  7. ...

对于查询 dictGet* 函数中,一个元组作为键传递。 示例: dictGetString('dict_name', 'attr_name', tuple('string for field1', num_for_field2)).

属性

配置示例:

  1. <structure>
  2. ...
  3. <attribute>
  4. <name>Name</name>
  5. <type>ClickHouseDataType</type>
  6. <null_value></null_value>
  7. <expression>rand64()</expression>
  8. <hierarchical>true</hierarchical>
  9. <injective>true</injective>
  10. <is_object_id>true</is_object_id>
  11. </attribute>
  12. </structure>

  1. CREATE DICTIONARY somename (
  2. Name ClickHouseDataType DEFAULT '' EXPRESSION rand64() HIERARCHICAL INJECTIVE IS_OBJECT_ID
  3. )

配置字段:

标签产品描述必填项
name列名称。
typeClickHouse数据类型。
ClickHouse尝试将字典中的值转换为指定的数据类型。 例如,对于MySQL,该字段可能是 TEXT, VARCHAR,或 BLOB 在MySQL源表中,但它可以上传为 String 在克里克豪斯
可为空 不支持。
null_value非现有元素的默认值。
在示例中,它是一个空字符串。 你不能使用 NULL 在这个领域。
expression表达式 ClickHouse对该值执行。
表达式可以是远程SQL数据库中的列名。 因此,您可以使用它为远程列创建别名。

默认值:无表达式。
非也。
hierarchical如果 true,该属性包含当前键的父键值。 看 分层字典.

默认值: false.
非也。
injective标志,显示是否 id -> attribute 图像是 注射.
如果 true,ClickHouse可以自动放置后 GROUP BY 子句注入字典的请求。 通常它显着减少了这种请求的数量。

默认值: false.
非也。
is_object_id显示是否通过以下方式对MongoDB文档执行查询的标志 ObjectID.

默认值: false.
非也。

另请参阅

原始文章