我在 hdfs 中有一个表 pos.pos_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 是日期存储为字符串类型。
最佳答案
发生这种情况是因为 hive 设置为严格模式。
这允许分区表访问 hdfs 中的相应分区/文件夹。
set hive.mapred.mode=unstrict; it will work
关于hadoop - 即使查询中存在分区谓词,也找不到 Alias 的分区谓词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39049620/