使用嵌入式字典的函数
为了使下面的函数能够工作,服务器配置必须指定获取所有嵌入式字典的路径和地址。这些字典在第一次调用这些函数时加载。如果无法加载参考列表,则会抛出异常。
因此,本节中所示的示例在ClickHouse Fiddle和快速发布与生产部署中默认会抛出异常,除非首先进行配置。
有关创建参考列表的信息,请参见"字典"部分。
多个地理基础
ClickHouse支持同时使用多个替代地理基础(地区层级),以支持对某些地区所属国家的不同视角。
'clickhouse-server'配置指定了包含地区层级的文件:
<path_to_regions_hierarchy_file>/opt/geo/regions_hierarchy.txt</path_to_regions_hierarchy_file>
Besides this file, it also searches for files nearby that have the _
symbol and any suffix appended to the name (before the file extension).
For example, it will also find the file /opt/geo/regions_hierarchy_ua.txt
, if present. Here ua
is called the dictionary key. For a dictionary without a suffix, the key is an empty string.
All the dictionaries are re-loaded during runtime (once every certain number of seconds, as defined in the builtin_dictionaries_reload_interval
config parameter, or once an hour by default). However, the list of available dictionaries is defined once, when the server starts.
All functions for working with regions have an optional argument at the end – the dictionary key. It is referred to as the geobase.
Example:
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数组。
语法
参数
返回值
示例
查询:
结果: