不平等加入蜂巢

时间:2014-11-13 09:30:42

标签: sql hadoop hive bigdata geospatial

我正在尝试在hive上模拟SQL查询,我从两个表中获取具有公共字段的数据。

这两个表是几何的(GeoHive),一个包含一堆点(每个记录一个),另一个包含一个网格(每个记录一个单元格)。目标是计算每个细胞内适合的点数。

enter image description here

两个表之间的连接条件是几何函数本身。这就是我在PostGIS中的做法:

SELECT g.geom, count(t.geom) AS cnt
   FROM grid g, points t
WHERE st_contains(g.geom,t.geom) GROUP BY g.geom

Hive不接受多重选择,因此我必须执行连接。我认为这样的事情可行:

SELECT count(1) FROM grid JOIN points WHERE   
 ST_Contains(grid.geom,points.geom) GROUP BY grid.geom;

,但是hive silently ignores my condition

" Hive不支持非平等条件的连接条件,因为很难表达诸如map / reduce作业之类的条件"

任何人都有关于如何在Hive上重构此类查询的想法?

1 个答案:

答案 0 :(得分:1)

我将回答我自己的问题,说明我的查询尝试是正确的:由于其他原因失败,这与语法无关。

SELECT count(grid.geom) as ptcnt FROM grid JOIN points WHERE
ST_Contains(grid.geom,points.geom) GROUP BY grid.geom;

这实际上相当于写作:

SELECT count(grid.geom) as ptcnt FROM grid JOIN points ON(TRUE) WHERE
ST_Contains(grid.geom,points.geom) GROUP BY grid.geom;

Hive实际上不支持非平等连接,因此我将连接条件设置为" TRUE",并在" WHERE"上过滤我的结果。条款。

显然,这是空间连接的一种非常标准的行为,因为您可以阅读here

相关问题