我在hdfs中有一个pos.pos\u inv表,它是按yyyymm分区的。以下是查询:
select DATE_ADD(to_date(from_unixtime(unix_timestamp(Inv.actvydt, 'MM/dd/yyyy'))),5),
to_date(from_unixtime(unix_timestamp(Inv.actvydt, 'MM/dd/yyyy'))),yyyymm
from pos.pos_inv inv
INNER JOIN pos.POSActvyBrdg Brdg ON Brdg.EIS_POSActvyBrdgId = Inv.EIS_POSActvyBrdgId
where to_date(from_unixtime(unix_timestamp(Inv.nrmlzdwkenddt, 'MM/dd/yyyy')))
BETWEEN DATE_SUB(to_date(from_unixtime(unix_timestamp(Inv.actvydt, 'MM/dd/yyyy'))),6)
and DATE_ADD(to_date(from_unixtime(unix_timestamp(Inv.actvydt, 'MM/dd/yyyy'))),6)
and inv.yyyymm=201501
我为查询提供了分区值201501,但仍然得到错误“
Error while compiling statement: FAILED: SemanticException [Error 10041]: No partition predicate found for Alias "inv" Table "pos_inv"
(schema)分区,yyyymm是int类型,actvydt是以字符串类型存储的日期。
2条答案
按热度按时间c8ib6hqw1#
在您的查询错误中,它说:没有为别名“inv”表“pos\u inv”找到分区 predicate 。
因此,必须将where子句放在分区表的字段中(对于pos\u inv),而不是放在另一个字段中(inv)。
8aqjt8rx2#
这是因为配置单元设置为严格模式。这允许分区表访问hdfs中相应的分区/文件夹。