数据工厂UDF使用方法

在数据工厂中,永久性UDF不使用SQL语句创建,而是使用文件系统来管理。此管理方式,相比于使用SQL的方式由如下几个显著的优点:

  1. UDF的文件与元数据统一存储,不会出现已经在元数据系统中注册了UDF,但错误删除了对应资源的情况。
  2. 拥有版本管理功能,同一个名字的函数可以存在多个版本,方便更新与回滚。
  3. 拥有测试版本概念,可以先小范围使用一个函数的新版本,待稳定后再更新为正式版。

使用方法

总体来讲,数据工厂的UDF管理功能使用起来分为以下几个步骤:

  1. 生成符合数据工厂 UDF规范的jar包。
  2. 将jar包上传到数据工厂的文件系统的指定路径,并使用指定的名称。
  3. 在Spark中使用。

UDF打包规范

UDF开发依然遵循Hive,Spark的UDF开发方法。当打包时,需将此UDF对应的类名写入到jar包的Manifest当中。写入规范如下:

section键值意义可选PINGOudf-class-nameudf class nameudf的类名,对应create function时的class name必选的PINGOudf-flagNORMAL or TESTUDF版本可选的,不指定时,默认为为NORMAL

例子
Manifest-Version: 1.0Archiver-Version: Plexus ArchiverBuilt-By: vinsonCreated-By: Apache Maven 3.5.0Build-Jdk: 1.8.0_45Name: PINGOudf-class-name: com.baidu.pingo.udfdemo.UdfDemo

推荐的实现方法
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifestSections> <manifestSection> <name>PINGO</name> <manifestEntries> <udf-class-name>YOUR_UDF_CLASS_NAME</udf-class-name> <udf-flag>YOUR_UDF_FLAG</udf-flag> </manifestEntries> </manifestSection> </manifestSections> </archive> </configuration> </plugin> </plugins></build>

UDF上传路径与名称规范

打包好的UDF必须以一定的规范命名,并上传到指定的文件系统路径才可生效。

文件命名规范

UDF文件名被'.'分割为4个部分,所有部分都区分大小写。

UDF.FUNC_NAME.VERSION.jar部分意义规范1UDF文件标识符必须写为大写的 UDF2UDF的名字符合正则表达[w_]+,即只包含数字字母和下划线3UDF的版本int范围内的正数4文件后缀必须写为小写的 jar

路径规范
SYSTEM_UDF_PATH/NS_NAME/UDF_FILE部分意义规范1数据工厂指定的放置UDF的根路径数据工厂指定。现在设置为文件系统的/lib2UDF所属的命名空间符合正则表达[w_]+,即只包含数字字母和下划线3UDF 文件符合上一小节文件命名规范

上传方法
Web上传

进入数据管理-文件管理菜单下的/lib路径,点击上传按钮,将符合命名规范的UDF文件包进行上传。

spark中的使用方法

调用UDF时,需要使用全名,即:

NS_NAME.UDF_NAME[.VERSION]

例子
select test.udfdemo(name) from test_table;--注意下面的例子,由于Spark的语法分析会将"DIGIT"优先分析为小数,所以当使用指定版本的UDF时,需要在版本号上使用反引号select test.udfdemo.`2`(name) from test_table;

权限控制

通过控制文件的读权限,控制UDF的使用权限。文件权限更多内容请参考文件管理-文件权限管理。

标签