找不到alias的分区 predicate ,即使查询中存在中的分区 predicate

gkl3eglg  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(520)

我在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是以字符串类型存储的日期。

c8ib6hqw

c8ib6hqw1#

在您的查询错误中,它说:没有为别名“inv”表“pos\u inv”找到分区 predicate 。
因此,必须将where子句放在分区表的字段中(对于pos\u inv),而不是放在另一个字段中(inv)。

8aqjt8rx

8aqjt8rx2#

这是因为配置单元设置为严格模式。这允许分区表访问hdfs中相应的分区/文件夹。

set hive.mapred.mode=unstrict;  it will work

相关问题