要使以下函数正常工作,服务器配置中必须指定获取所有嵌入式字典所需的路径和地址。这些字典会在首次调用其中任一函数时加载。如果无法加载参考列表,则会抛出异常。因此,除非预先完成配置,否则本节中的示例默认会在 ClickHouse Fiddle 以及快速发布版和生产部署中抛出异常。
多个地理库
<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 配置参数定义的间隔,每隔若干秒加载一次;默认情况下为每小时一次) 。不过,可用字典的列表只会在服务器启动时确定一次。
所有用于处理区域的函数在末尾都有一个可选参数——字典键。它称为 geobase。
示例:
regionToName
接受一个区域 ID 和 geobase,返回对应语言的区域名称字符串。如果指定 ID 的区域不存在,则返回空字符串。 语法geobase指定的对应语言的区域名称。String。- 否则为空字符串。
Query
Response
regionToCity
接受 geobase 中的区域 ID。如果该区域是某个城市或某个城市的一部分,则返回对应城市的区域 ID。否则返回 0。 语法- 对应城市的区域 ID (如果存在) 。UInt32。
- 0,如果不存在对应城市。
Query
Response
regionToArea
将区域转换为 area (geobase 中的类型 5) 。除此之外,该函数与 ‘regionToCity’ 相同。 语法- 如果存在,则返回对应区域的区域 ID。UInt32。
- 如果不存在,则返回 0。
Query
Response
regionToDistrict
将区域转换为联邦区 (geobase 中的类型 4) 。除此之外,该函数与 ‘regionToCity’ 完全相同。 语法- 对应城市的区域 ID (如果存在) 。UInt32。
- 如果不存在,则返回 0。
Query
Response
regionToCountry
将区域转换为国家 (geobase 中的类型 3) 。除此之外,此函数与 ‘regionToCity’ 完全相同。 语法- 如果存在,则返回对应国家的区域 ID。UInt32。
- 如果不存在,则返回 0。
Query
Response
regionToContinent
将区域转换为大洲 (即 geobase 中的类型 1) 。除此之外,此函数与 ‘regionToCity’ 相同。 语法- 对应大洲的区域 ID (如果存在) 。UInt32。
- 如果不存在,则返回 0。
Query
Response
regionToTopContinent
返回该地区在层级结构中所属的最高层大洲。 语法- 最高层级大洲的标识符 (即沿区域层级向上追溯后得到的大洲) 。UInt32。
- 如果不存在,则为 0。
Query
Response
regionToPopulation
获取某个区域的人口数量。人口数据可以记录在包含 geobase 的文件中。请参见“字典”一节。如果该区域未记录人口数据,则返回 0。在 geobase 中,人口数据可能记录在子区域中,而父区域中则没有记录。 语法- 该区域的人口。UInt32。
- 如果不存在,则为 0。
Query
Response
regionIn
判断lhs 区域是否属于 rhs 区域。如果属于,则返回值为 1 的 UInt8 数值;如果不属于,则返回 0。
语法
lhs— geobase 中的 lhs 区域 ID。UInt32。rhs— geobase 中的 rhs 区域 ID。UInt32。geobase— 字典键。参见多个地理库。String。可选。
- 如果属于,则返回 1。UInt8。
- 如果不属于,则返回 0。
Query
Response
regionHierarchy
接受一个 UInt32 数值,即 geobase 中的区域 ID。返回一个区域 ID 数组,其中包含传入的区域以及事件链中向上的所有父区域。 语法Query
Response