跳到主要内容
跳到主要内容

嵌入式字典的操作函数

备注

为了使以下函数正常工作,服务器配置必须指定获取所有嵌入式字典的路径和地址。字典在首次调用任何这些函数时加载。如果无法加载参考列表,则会抛出异常。

因此,本节中所示的示例将在默认情况下在 ClickHouse Fiddle 以及快速发布和生产部署中抛出异常,除非首先进行配置。

有关创建参考列表的信息,请参见"字典"部分。

多个地理基础

ClickHouse 支持同时处理多个替代地理基础(区域层次结构),以支持对某些地区属于哪些国家的不同视角。

'clickhouse-server' 配置指定了区域层次结构的文件:

<path_to_regions_hierarchy_file>/opt/geo/regions_hierarchy.txt</path_to_regions_hierarchy_file>

除了该文件,它还会搜索附近具有 _ 标识符并在文件扩展名前附加任意后缀的文件。 例如,如果存在,它也会找到文件 /opt/geo/regions_hierarchy_ua.txt。这里的 ua 被称为字典键。对于没有后缀的字典,键是空字符串。

在运行时,所有字典都会被重新加载(每隔一定秒数,如 builtin_dictionaries_reload_interval 配置参数中定义,或每小时一次,默认情况下)。但是,可用字典的列表在服务器启动时会被定义一次。

所有用于处理区域的函数在末尾都有一个可选参数 – 字典键。称之为地理基础。

示例:

regionToName

接受区域 ID 和地理基础,并返回对应语言的区域名称字符串。如果指定 ID 的区域不存在,则返回空字符串。

语法

参数

返回值

  • 对应于 geobase 指定的语言的区域名称。 String
  • 否则,返回空字符串。

示例

查询:

结果:

regionToCity

接受一个来自地理基础的区域 ID。如果该区域是城市或城市的一部分,则返回适当城市的区域 ID。否则,返回 0。

语法

参数

返回值

  • 如果存在,返回适当城市的区域 ID。 UInt32
  • 如果没有则返回 0。

示例

查询:

结果:

regionToArea

将地区转换为区域(类型 5)。在其他所有方面,此函数与 'regionToCity' 相同。

语法

参数

返回值

  • 如果存在,返回适当区域的区域 ID。 UInt32
  • 如果没有则返回 0。

示例

查询:

结果:

regionToDistrict

将区域转换为联邦区(类型 4)。在其他所有方面,此函数与 'regionToCity' 相同。

语法

参数

返回值

  • 如果存在,返回适当城市的区域 ID。 UInt32
  • 如果没有则返回 0。

示例

查询:

结果:

regionToCountry

将区域转换为国家(类型 3)。在其他所有方面,此函数与 'regionToCity' 相同。

语法

参数

返回值

  • 如果存在,返回适当国家的区域 ID。 UInt32
  • 如果没有则返回 0。

示例

查询:

结果:

regionToContinent

将区域转换为大陆(类型 1)。在其他所有方面,此函数与 'regionToCity' 相同。

语法

参数

返回值

  • 如果存在,返回适当大陆的区域 ID。 UInt32
  • 如果没有则返回 0。

示例

查询:

结果:

regionToTopContinent

查找区域层次结构中最高的大陆。

语法

参数

返回值

  • 顶级大陆的标识符(当你沿着区域层次结构向上攀爬时)。 UInt32
  • 如果没有则返回 0。

示例

查询:

结果:

regionToPopulation

获取一个区域的人口。人口数据可以记录在地理基础的文件中。请参见"字典"部分。如果该区域的人口没有记录,则返回 0。 在地理基础中,子区域可能记录人口,但父区域可能没有记录。

语法

参数

返回值

  • 该区域的人口。 UInt32
  • 如果没有则返回 0。

示例

查询:

结果:

regionIn

检查 lhs 区域是否属于 rhs 区域。如果属于,则返回等于 1 的 UInt8 数字,如果不属于,则返回 0。

语法

参数

  • lhs — 地理基础中的左侧区域 ID。 UInt32
  • rhs — 地理基础中的右侧区域 ID。 UInt32
  • geobase — 字典键。参见 多个地理基础String。可选。

返回值

  • 如果属于则返回 1。 UInt8
  • 如果不属于则返回 0。

实现细节

关系具有自反性 – 任何区域也属于自己。

示例

查询:

结果:

regionHierarchy

接受一个 UInt32 数字 – 来自地理基础的区域 ID。返回一个区域 ID 的数组,包括传递的区域及其所有父区域。

语法

参数

返回值

  • 由传递的区域及其所有父区域组成的区域 ID 数组。 Array(UInt32)。

示例

查询:

结果: