Hive 配置单元-错误:在'处缺少EOF;其中';

Hive 配置单元-错误:在'处缺少EOF;其中';,hive,hiveql,Hive,Hiveql,我正在努力学习Hive,特别是像unix时间戳和unixtime中的unix\u timestamp和这样的函数 我有三张桌子 emp (employee table) +---+----------------+ | id| name| +---+----------------+ | 1| James Gordon| | 2| Harvey Bullock| | 3| Kristen Kringle| +---+----------------+ txn

我正在努力学习Hive,特别是像unix时间戳和unixtime中的
unix\u timestamp
这样的函数

我有三张桌子

emp (employee table)
+---+----------------+
| id|            name|
+---+----------------+
|  1|    James Gordon|
|  2|  Harvey Bullock|
|  3| Kristen Kringle|
+---+----------------+

txn (transaction table)
+------+----------+---------+
|acc_id|trans_date|trans_amt|
+------+----------+---------+
|   101|  20180105|      951|
|   102|  20180205|      800|
|   103|  20180131|      100|
|   101|  20180112|       50|
|   102|  20180126|      800|
|   103|  20180203|      500|
+------+----------+---------+

acc (account table)
+---+------+--------+
| id|acc_id|cred_lim|
+---+------+--------+
|  1|   101|    1000|
|  2|   102|    1500|
|  3|   103|     800|
+---+------+--------+
我想找出2018年1月
trans\u amt
超过
cred\u lim
的人

我试图使用的查询是

WITH tabl as
(
SELECT  e.id, e.name, a.acc_id, t.trans_amt, a.cred_lim, from_unixtime(unix_timestamp(t.trans_date, 'yyyyMMdd'), 'MMM yyyy') month
FROM emp e JOIN acc a on e.id = a.id JOIN txn t on a.acc_id = t.acc_id
)
SELECT acc_id, sum(trans_amt) total_amt
FROM tabl
GROUP BY tabl.acc_id, tabl.month
WHERE tabl.month = 'Jan 2018' AND tabl.total_amt > cred_lim;
但是当我运行它的时候,我得到一个错误

FAILED: ParseException line 9:2 missing EOF at 'WHERE' near 'month'
即使我将where子句更改为

WHERE tabl.total_amt > cred_lim;
这使我认为错误来自
GROUPBY
子句,但我似乎无法理解这一点


有人能帮我吗?

您的查询有几个问题

WHERE
子句应在
groupby

分组依据
列之后有一个额外的
)'

tabl.total\u amt>cred\u lim
-此行不能用于 子句,因为别名
total_amt
在启用之前不能使用 嵌套的。相反,使用
HAVING
子句

我在这个查询中做了这些更改,应该对您有用

  WITH tabl
    AS (
        SELECT e.id
            ,e.name
            ,a.acc_id
            ,t.trans_amt
            ,a.cred_lim
            ,from_unixtime(unix_timestamp(t.trans_date, 'yyyyMMdd'), 'MMM yyyy') month
        FROM emp e
        INNER JOIN acc a ON e.id = a.id
        INNER JOIN txn t ON a.acc_id = t.acc_id
        )
    SELECT acc_id
        ,sum(trans_amt) total_amt
    FROM tabl
    WHERE month = 'Jan 2018'
    GROUP BY acc_id
        ,month
    HAVING SUM(trans_amt) > MAX(cred_lim);
额外的“)”是一个打字错误。但是你给出的解决方案非常有效。谢谢