离线计算函数用于管理离线计算任务代码开发过程中用到的SQL函数,包括计算引擎源常用且系统默认支持的函数和用户自定义函数,前者不支持编辑操作。本文为您介绍如何新建用户自定义函数。
前提条件
完成资源的创建,详情请参见上传资源及引用。
背景信息
- Dataphin系统根据函数类型定义了函数的目录,帮助您更好地管理函数。 
- 不同计算引擎所支持创建的函数类型不同。 - 计算引擎类型 - 支持函数 - 离线引擎 - MaxCompute - MAXC函数 - Hologres - 不支持自定义函数 - Hadoop - Hadoop函数(Hive函数)、Impala函数 - TDH Inceptor - 不支持自定义函数 - ADB for PostgreSQL - ADB函数 - SelectDB - 不支持自定义函数 - Doris - 不支持自定义函数 - 实时引擎 - Alibaba Blink - FLINK函数 - Ververica Flink - FLINK函数 - 开源Flink - FLINK函数 
- MaxCompute外部项目不支持创建自定义函数。 
操作步骤
- 在Dataphin首页的顶部菜单栏中,选择研发 > 数据研发。 
- 在顶部菜单栏选择项目(Dev-Prod模式需要选择环境)。 
- 在左侧导航栏中选择数据处理 > 函数。 
- 在右侧函数列表中单击  图标,选择目标类型函数。 图标,选择目标类型函数。
- 在新建函数对话框中,配置以下参数。 - 参数 - 描述 - 名称 - 填写函数名称。名称支持英文、数字、下划线(_),且首字符必须为英文字母。 说明- 同一项目中,Impala函数和Hive函数的名称不得与该项目内任意目录中的自定义函数同名。 - 选择资源 - 选择资源文件。下拉列表中提供的是匹配当前项目的资源名称。 说明- 仅支持选择JAR格式的文件进行定义函数。 
- 选择多个资源时,仅限选择同一种资源类型。 
- 如果您还没有资源,则需创建资源。具体操作,请参见上传资源及引用。 
 - 编程语言 - Impala支持C++和Java定义的函数。若您需定义Impala函数,请根据您的资源类型选择对应的编程语言。 - 类名 - 填写类名。针对计算类型中的资源,提取资源中类的内容,例如 - test_udf.UDFGETSrcId。- 类型 - 选择类型,下拉列表中可供选择的类型包含窗口、统计、数值、字符串、时间、ip地址相关函数、URL、编译码、业务、其他。 - 注册函数 - 若您需定义Impala函数且资源的编程语言为C++,请输入创建Impala函数的语句。注册函数需要满足以下的语法,Location语句后端兼容使用资源文件进行替代。 - 创建c++标量函数 - CREATE FUNCTION [IF NOT EXISTS] [db_name.]function_name([arg_type[, arg_type...]) RETURNS return_type SYMBOL='symbol_name'
- 创建C++聚合函数 - CREATE [AGGREGATE] FUNCTION [IF NOT EXISTS] [db_name.]function_name([arg_type[, arg_type...]) RETURNS return_type [INTERMEDIATE type_spec] [INIT_FN='function'] UPDATE_FN='function' MERGE_FN='function' [PREPARE_FN='function'] [CLOSEFN='function'] [SERIALIZE_FN='function'] [FINALIZE_FN='function']
 - 更多信息,请参见用户定义函数 (UDF)。 - 命令格式 - 填写命令格式。命令格式即函数引用格式,例如: - bigintweekday (datetime date)。- 使用文档 - 填写函数使用描述,例如: - select get_week_date("20170810",0,2),--获取8月10日,本周周二日期。 from cndata.dual- 选择目录 - 系统默认为当前函数类型的目录。如果您需要修改,则系统仅支持修改该函数类型目录下的子目录。 - 例如,您新建的是MAXC函数,则系统自动为您选中MAXC函数为目录。如果您需要修改目录, 则系统仅支持选择MAXC函数目录下的子目录。 
- 信息配置完成后单击提交,在弹出的对话框中填写提交备注,完成后单击确认并提交。 说明- 如果自定义函数引用的资源有更新,则需重新提交自定义函数,这样注册至计算引擎的自定义函数才会更新。 
- 提交成功后,相关引用任务自动引用新版对象,可能导致任务不可用,请及时检查。 
 - 您可以通过即席查询(请参见查询并下载数据),编写SQL代码(SQL代码中引用该函数)验证函数是否符合预期效果。SQL查询语句示例如下。 - select get_week_date("20170810",0,2),--获取8月10日本周周二日期。 from cndata.dual