Как сделать соединение в улье с подзапросом? - PullRequest
0 голосов
/ 08 февраля 2019

Я использую улей 1.2.1, и у меня возникают некоторые проблемы при попытке присоединиться с использованием подзапроса.

Моя основная таблица - это приложения, и я пытаюсь присоединить ее к кредитам таблиц на основеучетная запись и даты.Условие даты доставляет мне неприятности, когда я пытаюсь получить только одну строку (кредит должен быть после заявки, и он может быть только один, чтобы избежать дублирования в объединении).Я использую следующий код:

SELECT          COUNT(1)
FROM            applications apps
LEFT JOIN       credits c
            ON c.python_id = 
            (
                    SELECT          python_id
                    FROM            credits cr
                    WHERE           cr.ind in ('NP','0P')
                    AND             cr.acct_nbr = apps.acct_nbr 
                    AND             cr.date >= apps.date
                    ORDER BY        cr.date DESC
                    LIMIT 1
            ) 

Я получаю следующую ошибку:

[Code: 40000, SQL State: 42000]  Error while compiling statement: FAILED: ParseException line 8:24 cannot recognize input near 'SELECT' 'python_id' 'FROM' in expression specification

Не могли бы вы помочь?

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Проблема с вашим запросом:

> hive does not support sub query with equals clause, you can write sub query only for IN, NOT IN, EXISTS and NOT EXISTS clause.
> You cannot have a sub query which returns more than one row.

Пожалуйста, посмотрите - [https://cwiki.apache.org/confluence/display/Hive/Subqueries+in+SELECT][1]

Также существует проблема с вашей логикой.

Я понимаю, что выпытаемся получить счетчик из основной таблицы с левым соединением, и во внешнем запросе не определено условие фильтра, чтобы указать, какие записи вы хотите.

Таким образом, счетчик всегда будет равен количеству записей в основной таблице (приложениях).), Если вы можете предоставить пример данных с ожидаемым вводом и выводом, мы можем помочь вам с запросом.

Надеюсь, это поможет.

0 голосов
/ 08 февраля 2019

Вы должны присоединиться на основе act_nbr и использовать дату в качестве фильтра в предложении where.

SELECT  COUNT(1)
FROM    applications apps
JOIN    credits c
ON      c.acct_nbr = apps.acct_nbr
WHERE   c.ind in ('NP','0P')
AND     c.date >= apps.date
ORDER BY c.date DESC
LIMIT 1
...