百度智能云数据工厂Pingo使用教程 - UDF管理
文档简介:
概述:
在Pingo中,永久性UDF不使用SQL语句创建,而是使用文件系统来管理。此管理方式,相比于使用SQL的方式由如下几个显著的优点:
UDF的文件与元数据统一存储,不会出现已经在元数据系统中注册了UDF,但错误删除了对应资源的情况。
概述
在Pingo中,永久性UDF不使用SQL语句创建,而是使用文件系统来管理。此管理方式,相比于使用SQL的方式由如下几个显著的优点:
- UDF的文件与元数据统一存储,不会出现已经在元数据系统中注册了UDF,但错误删除了对应资源的情况。
- 拥有版本管理功能,同一个名字的函数可以存在多个版本,方便更新与回滚。
- 拥有测试版本概念,可以先小范围使用一个函数的新版本,待稳定后再更新为正式版。
使用方法
总体来讲,Pingo的UDF管理功能使用起来分为以下几个步骤:
- 生成符合Pingo UDF规范的jar包。
- 将jar包上传到Pingo的文件系统的指定路径,并使用指定的名称。
- 在Spark中使用。
UDF打包规范
UDF开发依然遵循Hive,Spark的UDF开发方法。当打包时,需将此UDF对应的类名写入到jar包的Manifest当中。写入规范如下:
section | 键 | 值 | 意义 | 可选 |
---|---|---|---|---|
PINGO | udf-class-name | udf class name | udf的类名,对应create function时的class name | 必选的 |
PINGO | udf-flag | NORMAL or TEST | UDF版本 | 可选的,不指定时,默认为为NORMAL |
例子
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: vinson
Created-By: Apache Maven 3.5.0
Build-Jdk: 1.8.0_45
Name: PINGO
udf-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
部分 | 意义 | 规范 |
---|---|---|
1 | UDF文件标识符 | 必须写为大写的 UDF |
2 | UDF的名字 | 符合正则表达[\w_]+,即只包含数字字母和下划线 |
3 | UDF的版本 | int范围内的正数 |
4 | 文件后缀 | 必须写为小写的 jar |
路径规范
SYSTEM_UDF_PATH/NS_NAME/UDF_FILE
部分 | 意义 | 规范 |
---|---|---|
1 | Pingo指定的放置UDF的根路径 | Pingo指定。现在设置为文件系统的/lib |
2 | UDF所属的命名空间 | 符合正则表达[\w_]+,即只包含数字字母和下划线 |
3 | UDF 文件 | 符合上一小节文件命名规范 |
上传方法
- 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的使用权限。文件权限更多内容请参考文件管理-文件权限管理。