多边形字典
polygon(POLYGON)字典针对点在多边形内的查询进行了优化,本质上是一种"反向地理编码"查找。
给定一个坐标(纬度/经度),它能高效地从多个多边形(如国家或地区边界)中找出包含该点的多边形/区域。
它非常适合将位置坐标映射到其所属区域。
配置多边形字典的示例:
提示
如果你在 ClickHouse Cloud 中使用字典,请使用 DDL 查询方式来创建字典,并使用用户 default 创建字典。
另外,请在 Cloud Compatibility 指南 中核对受支持的字典数据源列表。
- DDL
- 配置文件
配置多边形字典时,键必须为以下两种类型之一:
- 一个简单多边形。用一个点的数组表示。
- MultiPolygon。它是一个多边形数组。每个多边形都是一个由点组成的二维数组。该数组的第一个元素是多边形的外部边界,后续元素表示需要从该多边形中排除的区域。
点可以用坐标数组或元组来表示。当前实现仅支持二维点。
用户可以上传 ClickHouse 所支持的任意格式的数据。
共有 3 种内存存储类型:
| 布局 | 描述 |
|---|---|
POLYGON_SIMPLE | 朴素实现:对于每个查询,线性遍历所有多边形,在没有额外索引的情况下检查其是否属于该多边形。 |
POLYGON_INDEX_EACH | 为每个多边形单独构建一个索引,在大多数情况下都能快速进行成员关系判断(针对地理区域进行了优化)。在该区域上叠加一个网格,递归地将单元划分为 16 个相等部分。当递归深度达到 MAX_DEPTH,或某个单元与不超过 MIN_INTERSECTIONS 个多边形相交时,划分停止。 |
POLYGON_INDEX_CELL | 还会使用相同的选项创建上述网格。对于每个叶单元格,会在位于该单元格的所有多边形片段上构建索引,从而能够快速响应查询。 |
POLYGON | POLYGON_INDEX_CELL 的同义词。 |
字典查询使用标准的函数进行操作。 一个重要的区别在于,此处的键是您希望查找其所在多边形的点。
示例
以下是使用上述字典的示例:
对 'points' 表中的每个点执行上述最后一条命令后,系统将找到包含该点的最小面积多边形,并输出所请求的属性。
示例
你可以通过 SELECT 查询从多边形字典中读取列,只需在字典配置或相应的 DDL 查询中启用 store_polygon_key_column = 1。