Hive-错误:在'WHERE'处缺少EOF

时间:2018-03-28 12:00:09

标签: hive hiveql

我正在尝试学习Hive,尤其是int arr[size]; unix_timestamp等功能。

我有三张桌子

from_unixtime

我想找出那些在{201}年1月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| +---+------+--------+ 超过trans_amt的人。

我正在尝试使用的查询是

cred_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;

即使我将where子句更改为

,此错误仍然存​​在
FAILED: ParseException line 9:2 missing EOF at 'WHERE' near 'month'

这让我觉得错误来自WHERE tabl.total_amt > cred_lim; 条款,但我似乎无法解决这个问题。

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:1)

您的查询有几个问题。

应在WHERE

之前使用

GROUP BY子句

')'列之后还有GROUP BY

tabl.total_amt > cred_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);