the number of input partition columns (1) doesn‘t equal to table‘s partition columns (2)

错误其实很低级,但如果没有思路、排查相当痛苦。
因为网上没有类似文章,特此记录分享,万一有朋友遇到类似问题,可节省很多时间。

今天在使用MaxCompute时,遇到了如下报错:

FAILED: ODPS-0130071:[73,24] Semantic analysis exception
 - the number of input partition columns (1) doesn't equal to table's partition columns (2)

错误原因

INSERT OVERWRITE TABLE tbl PARTITIONS(...) 时,INSERTPARTITIONS后指定的分区列,与表DDL中声明的分区列不同。

解决问题看到此处即可,后续为闲扯。



其他的错误排查思路

因为没有注意细节,所以走了不少弯路,也分享出来,大家看个热闹吧。

错误推断一

看提示的字面意思,可能是两个输入表的分区对不上。
因为有多表join传递的情况,那有否可能是其中一个表没有数据、找不到分区。
例如:

select * 
from a 
join b on b.pt = a.pt AND b.id = a.bid
join c on c.pt = a.pt AND c.id = b.cid
;

假设上述SQL的a.bid找不到b,那么join c就会报错。
这样说来,处理方案有两种:

  1. 改为(a join b) join c
  2. 去除join on中的pt,需考虑裁剪性能问题。

尝试两种方式,都无效。确认是错误思路。

错误推断二

是否因两张表分区层次不同(二级分区join一级分区、无分区字段join以及分区)。
测试后也不行。


以上。感谢您的阅读

你可能感兴趣的:(#,└,MaxCompute,hive,分区表,错误,hadoop)