【问题标题】:How to join 2 hive tables by point and corresponding polygon?如何按点和相应的多边形连接 2 个蜂巢表?
【发布时间】:2018-01-18 16:07:01
【问题描述】:

我有 2 个 Hive 表。表 1 在 2 列中有经度和纬度,第 2 个表有 WKT 格式的多边形信息,如下所示:

POLYGON ((6.93614 79.842882, 6.950198 79.856958, 6.943638 79.877815, 6.931795 79.877129, 6.92566 79.861507, 6.919184 79.861507, 6.917906 79.847603, 6.93614 79.842882)) 

我想找出表 1 中的哪些点属于哪些多边形。我正在尝试将 ST_Geometric 库用于 hadoop (https://github.com/Esri/spatial-framework-for-hadoop/wiki/UDF-Documentation) 来执行此操作。由于 2 个表中的数据我必须加入它们。我尝试使用

ST_Contains(polygon, point)

连接两个表的功能。但我做不到。有人知道这样做的方法吗?

【问题讨论】:

    标签: hadoop hive gis hiveql


    【解决方案1】:

    ST_Contains 在单个多边形和单个点上运行,而不是完整的表格。

    您需要进行完整的笛卡尔积连接(无条件的内连接),然后在 where 子句中应用 ST_Contains:

     select * from polygonTable a,pointsTable b where ST_Contains(a.polygon,b.point); 
    

    请注意,做笛卡尔乘积效率低下,并且在大表上可能需要大量时间。

    【讨论】:

    • 如果表很大并且您需要避免笛卡尔积,可以使用四叉树索引编写自定义 map-reduce 查询,而不是 Hive 查询 - github.com/Esri/gis-tools-for-hadoop/tree/master/samples/…
    • 是的,问题是笛卡尔积。我使用交叉连接。你知道任何关于自定义 map-reduce 查询的适合初学者的文档吗?
    猜你喜欢
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多