我正在尝试在hive上模拟SQL查询,我从两个表中获取不具有公共字段的数据。
这两个表是几何的(GeoHive),一个包含一堆点(每个记录一个),另一个包含一个网格(每个记录一个单元格)。目标是计算每个细胞内适合的点数。
两个表之间的连接条件是几何函数本身。这就是我在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上重构此类查询的想法?
答案 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。