Выражение HIVE SubQuery относится к выражениям Parent и SubQuery. - PullRequest
0 голосов
/ 24 апреля 2020

Итак, у меня есть запрос HIVE:

SELECT p.id 
FROM posts p JOIN
comments c ON c.postid = p.id JOIN
users u ON u.id = p.owneruserid JOIN
badges b ON b.userid = u.id CROSS JOIN
postlinks l 
WHERE l.relatedpostid > p.id
AND u.upvotes IN (SELECT MAX(upvotes) AS uv FROM users uu WHERE uu.creationdate > p.creationdate);

, и он выдаёт мне эту ошибку:

Ошибка при компиляции оператора: FAILED: SemanticException [Ошибка 10249]: строка 21 : 58 Неподдерживаемое выражение SubQuery 'creationdate': выражение SubQuery относится как к выражениям Parent, так и к SubQuery и не является допустимым условием соединения.

Но я не вижу, как выражение SubQuery относится и к родительскому, и к SubQuery? !?

Я специально использую user uu, чтобы отличать guish от user u от родительского запроса, а p.creationdate должна быть , связанной с родительским запросом в мой случай.

Как указано в этом посте , уже существует ограничение в отношении ВИЧ, когда речь идет о подзапросах:

  1. Эти подзапросы поддерживаются только справа. сторона выражения.
  2. IN / NOT IN подзапросы могут выбирать только один столбец.
  3. EXISTS / NOT EXISTS должен иметь один или несколько коррелированных предикатов.
  4. Ссылки на родитель запрос поддерживается только в предложении WHERE подзапроса.

Но я не вижу, как я нарушаю любое из этих ограничений.

Что я делаю неправильно?

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ:

Используемые данные являются выдержкой из данных обмена стека. Поэтому отправляйте ссылки на стеки обмен сообщениями и т. Д. c ..

Таблицы:

значки (идентификатор, класс, дата, имя, на основе тегов, идентификатор пользователя)

комментарии (id, дата создания, postid, оценка, текст, userdisplayname, идентификатор пользователя)

postlinks (id, creationdate, linktypeid, postid, relatedpostid)

posts (id, acceptanswerid, answerecount, body, closeddate, commentcount, communityowneddate, дата создания, favcount, lastactivitydate, lasteditdate, lasteditordisplayname, lasteditoruserid, ownerdisplayname, owneruserid, parentid, postidididid , title, viewcount)

теги (id, count, excerptpostid, tagname, wikipostid)

users (id, aboutme, accountid, creationdate , отображаемое имя, downvotes, lastaccessdate, местоположение, profileimageurl, репутация, upvotes, просмотры, websiteurl)

голоса (id, bountyamount, creationdate, postid, идентификатор пользователя, voicetypeid)

В основном меня интересует, как я мог бы написать

SELECT p.id FROM posts p JOIN users u ON u.id = p.owneruserid
WHERE u.upvotes IN 
(SELECT MAX(upvotes) FROM users uu WHERE uu.creationdate > p.creationdate) 

, чтобы это не дает мне эту ошибку.

1 Ответ

0 голосов
/ 24 апреля 2020

Если вы хотите список ограничений, вам нужно обратиться к документации . Соответствующее ограничение:

Предикаты подзапроса, которые ссылаются на столбец в родительском запросе, должны использовать предикатный оператор equals (=).

В предложении равенства нет подзапрос. Как я упоминал в исходном вопросе, вам следует задать вопрос с примерами данных, желаемыми результатами и объяснением того, что должен делать код.

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

...