Неравноправие Присоединиться к улей

Я пытаюсь эмулировать SQL-запрос на hive, где я беру данные из двух таблиц, которые не имеют общего поля.

Две таблицы являются геометрическими (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?

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;

Улей на самом деле не поддерживает объединения без равенства, поэтому я устанавливаю условие соединения на "ИСТИНА" и фильтрует свои результаты в предложении "ГДЕ".

По-видимому, это довольно стандартное поведение для пространственных объединений, как вы можете прочитать здесь.

licensed under cc by-sa 3.0 with attribution.