sql如下:
create sql function my_sum(@a BIGINT, @b BIGINT, @c BIGINT) returns @my_sum BIGINT
as begin
@temp := @a + @b;
@my_sum := @temp + @c;
end;
报错信息如下:
create sql function my_sum(@a BIGINT, @b BIGINT, @c BIGINT) returns @my_sum BIGINT
as begin
@temp := @a + @b;
OK
OK
OK
OK
OK
OK
OK
OK
OK
OK
OK
OK
OK
FAILED: ODPS-0130161:[4,2] Parse exception - invalid token '', expect 'END'
无法解析第一个分号之后的内容
根据您提供的错误信息,问题出在创建SQL函数的语法上。在ODPS SQL中,创建函数时需要使用CREATE FUNCTION
语句,而不是CREATE SQL FUNCTION
。请尝试将您的SQL代码修改为以下格式:
CREATE FUNCTION my_sum(@a BIGINT, @b BIGINT, @c BIGINT) RETURNS @my_sum BIGINT
AS
BEGIN
DECLARE @temp BIGINT;
SET @temp = @a + @b;
SET @my_sum = @temp + @c;
RETURN @my_sum;
END;
这样应该可以解决您遇到的问题。
您提供的SQL函数定义看起来是在尝试模仿存储过程的语法,但在标准SQL或阿里云MaxCompute (原名ODPS) 中并不完全适用。MaxCompute使用的是MapReduce风格的数据处理模型,其SQL方言与传统的关系型数据库SQL有所差异。
针对上述错误,MaxCompute不支持在SQL函数内声明和赋值局部变量,然后通过多行逻辑来计算结果。在MaxCompute中,自定义函数通常是单行表达式,用于简单操作。
若要在MaxCompute中创建一个接受多个BIGINT参数并返回它们总和的函数,应当编写如下的简单聚合函数:
CREATE FUNCTION my_sum(a BIGINT, b BIGINT, c BIGINT)
RETURNS BIGINT
BEGIN
RETURN a + b + c;
END;
由于MaxCompute SQL的限制,上述语法可能仍不被支持,实际上MaxCompute可能需要通过UDF(User Defined Function)以Java等方式实现复杂函数功能。对于简单的加法操作,直接在查询语句中进行计算即可,无需创建自定义函数。
在阿里云MaxCompute(原名ODPS)中,函数定义的语法并不支持标准SQL中的存储过程或者用户自定义函数(UDF)的这种写法。MaxCompute SQL更倾向于基于MapReduce模型的大规模分布式计算,其自定义函数通常指的是UDF(User Defined Function),并且是以Java、Python等方式编写的,并非直接在SQL中定义。
对于你给出的SQL函数定义,正确的做法应该是创建一个用户自定义函数,但不是在SQL中定义,而是编写一个Java类或者Python脚本,然后在MaxCompute中注册这个函数。
例如,如果你希望实现一个加法函数,你需要创建一个Java类,继承com.aliyun.odps.udf.UDF
类,并实现evaluate
方法,然后将这个类打包成JAR文件上传到MaxCompute项目,并注册这个函数。
对于你的需求,一个简单的加法函数在MaxCompute中的Java实现示例(假设三个bigint参数相加):
import com.aliyun.odps.udf.UDF;
import com.aliyun.odps.udf.UDFException;
public class MySum extends UDF {
public Long evaluate(Long a, Long b, Long c) throws UDFException {
return a + b + c;
}
}
然后将这个类打包成jar,上传到MaxCompute并创建函数:
CREATE FUNCTION my_sum AS 'com.example.MySum';
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。