嵌入式字典的操作函数
为了使以下函数正常工作,服务器配置必须指定获取所有嵌入式字典的路径和地址。字典在首次调用任何这些函数时加载。如果无法加载参考列表,则会抛出异常。
因此,本节中所示的示例将在默认情况下在 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。
语法
参数
返回值
- 如果属于则返回 1。 UInt8。
- 如果不属于则返回 0。
实现细节
关系具有自反性 – 任何区域也属于自己。
示例
查询:
结果:
regionHierarchy
接受一个 UInt32 数字 – 来自地理基础的区域 ID。返回一个区域 ID 的数组,包括传递的区域及其所有父区域。
语法
参数
返回值
示例
查询:
结果: