我在 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/

10-12 23:04