我有一个名为“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
有更有效的方法吗?感觉就像是在城市桌子上进行全桌扫描,这是有问题的,因为城市可能是巨大的(让我们假装它可能超过数百万或数十亿的记录)。谢谢你的建议!
答案 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;