Hive 如何使用子查询在配置单元中进行连接?

Hive 如何使用子查询在配置单元中进行连接?,hive,subquery,Hive,Subquery,我正在使用Hive1.2.1,在尝试使用子查询加入时遇到了一些问题 我的主表是applications,我正试图根据帐户和日期将其加入到表credits中。当我尝试只获取一行时,日期条件给我带来了麻烦(信用必须在应用程序之后,并且只能是一行以避免加入中的重复)。我正在使用以下代码: SELECT COUNT(1) FROM applications apps LEFT JOIN credits c ON c.python

我正在使用Hive1.2.1,在尝试使用子查询加入时遇到了一些问题

我的主表是applications,我正试图根据帐户和日期将其加入到表credits中。当我尝试只获取一行时,日期条件给我带来了麻烦(信用必须在应用程序之后,并且只能是一行以避免加入中的重复)。我正在使用以下代码:

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
你能帮忙吗


谢谢

您应该根据act\u 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

你的问题是

> 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.
请调查-[

你的逻辑也有问题

我的理解是,您正试图通过左联接从主表中获取计数,并且在外部查询中并没有定义过滤条件来说明您想要什么记录

因此,计数将始终等于主表(应用程序)中的记录数,如果您可以提供具有预期输入和输出的样本数据,我们可以帮助您进行查询


希望这有帮助。

谢谢,但是这不会让没有加入的应用程序进行左加入。Hive不允许带有不平等条件的左加入。因此,如果我将其更改为select*,它只会给我第一行。我需要第一行积分,因此需要子查询。谢谢