用于空间连接的有效HIVE方法&相交

时间:2018-03-19 15:51:46

标签: hive hiveql esri spatial-query

我有一个名为“favoriteshop”(shopname,wkt)的HIVE表,有10个位置及其wkt(众所周知的文本)。我还有另一张名为“city”(cityname,wkt)的桌子,所有城市和城市都是完整的。我想对2个表做空间连接,看它们是否在空间上相互交叉。以下是我的询问:

SELECT a.shopname, a.wkt, b.cityname
FROM favoriteshop a, city b
WHERE ST_Intersects(ST_GeomFromText(a.wkt), ST_GeomFromText(b.wkt)) = true

有更有效的方法吗?感觉就像是在城市桌子上进行全桌扫描,这是有问题的,因为城市可能是巨大的(让我们假装它可能超过数百万或数十亿的记录)。谢谢你的建议!

1 个答案:

答案 0 :(得分:0)

在子查询中计算ST_GeomFromText并将条件移动到ON子句:

SELECT a.shopname, a.wkt, b.cityname
  FROM ( select a.shopname, a.wkt, ST_GeomFromText(a.wkt) Geom from favoriteshop a ) a
     INNER JOIN 
       (selectb.cityname, ST_GeomFromText(b.wkt) Geom from  city b ) b
               on ST_Intersects(a.Geom, b.Geom) = true;