阿里云MaxCompute(ODPS)常见使用问题(持续更新中)

目录

    • `to_char`运行报错:`function TO_CHAR cannot match any overloaded functions with (DATETIME), candidates are STRING TO_CHAR(BIGINT arg0)......`
    • SQL使用了系统参数`${bizdate}`,但是运行报错:`FAILED: ODPS-0130161:[20,12] Parse exception - invalid token '$'`
    • 执行插入报错:`FAILED: ODPS-0130071:[73,24] Semantic analysis exception - the number of input partition columns (1) doesn't equal to table's partition columns (2)`

to_char运行报错:function TO_CHAR cannot match any overloaded functions with (DATETIME), candidates are STRING TO_CHAR(BIGINT arg0)......

看字面意思是说无重载,也就是说传入了错误的参数导致误判为重载。
实际检查后,确实是参数个数不对或写法有问题:
错误代码:TO_CHAR(DATEADD(GETDATE(), -1, 'dd')), 'yyyyddmm'),'dd’后多了一个括号
正确代码:TO_CHAR(DATEADD(GETDATE(), -1, 'dd'), 'yyyyddmm')
在这里插入图片描述

函数说明如下:
阿里云MaxCompute(ODPS)常见使用问题(持续更新中)_第1张图片

SQL使用了系统参数${bizdate},但是运行报错:FAILED: ODPS-0130161:[20,12] Parse exception - invalid token '$'

错误如图:
阿里云MaxCompute(ODPS)常见使用问题(持续更新中)_第2张图片
解决方案:使用高级运行,如下图:
阿里云MaxCompute(ODPS)常见使用问题(持续更新中)_第3张图片

执行插入报错: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(...) 时,INSERT后`PARTITIONS(…)``中指定的分区列,不等于表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,需考虑裁剪性能问题。

以上。感谢您的阅读。

你可能感兴趣的:(#,└,MaxCompute,ODPS,HIVE,使用问题)