Unverified Commit c896db4b authored by ZackYoung's avatar ZackYoung Committed by GitHub

[feature][udf]添加udf 使用文档 (#1177)

* 添加udf 使用文档

* 添加udf 使用文档
parent 8a41580e
{
"label": "UDF 开发",
"position": 14
}
---
sidebar_position: 1
id: java&scala_udf
title: Java&Scala UDF
---
## 作业创建
1. 选择java作业,并输入对应参数
```text
sub
截取函数
com.test.SubFunction
```
![create_java_udf_work.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/how_to/create_java_udf_work.png)
![create_java_udf_work2.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/how_to/create_java_udf_work2.png)
> 此时从模板构建了代码,剩下函数逻辑填补即可。
![java_udf_code.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/how_to/java_udf_code.png)
> 这里为了方便测试,返回一段字符串
2. 接下来创建一个 `FlinkSql` 作业
![java_udf_flink_sql.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/how_to/java_udf_flink_sql.png)
创建函数时,复制类名,以下为测试代码
```sql
create temporary function sb_j as 'com.test.SubFunction';
CREATE TABLE sourceTable (
id int,
java_c string
) WITH (
'connector' = 'datagen'
);
CREATE TABLE sinkTable
WITH (
'connector' = 'print'
)
LIKE sourceTable (EXCLUDING ALL);
insert into sinkTable select id,sb_j(java_c) from sourceTable;
```
![java_udf_exec.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/how_to/java_udf_exec.png)
> 选择执行模式,我这里采用 `pre-job` 进行演示
3. 执行,结果查看
![java_udf_flink_sout.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/how_to/java_udf_flink_sout.png)
查看 `Taskmanager` 输出,正常输出,验证成功
## 动图演示
![java_udf_show.gif](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/how_to/java_udf_show.gif)
\ No newline at end of file
---
sidebar_position: 2
id: python_udf
title: Python UDF
---
## 作业创建
1. 选择 Python 作业,并输入对应参数
```text
python_udf_test
python截取函数
SubFunction.f
```
![create_python_udf_work.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/how_to/create_python_udf_work.png)
> 注意名称,底层实现逻辑即通过名称创建 py 文件,如: python_udf_test.py
![create_python_udf_work2.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/how_to/create_python_udf_work2.png)
> 观察最右侧的类型,前缀就是 刚刚填的`名称`
2. 接下来创建一个 `FlinkSql` 作业
创建函数与Java不太一样, 最后得指定语言
language PYTHON
```sql
create temporary function sb_p as 'python_udf_test.SubFunction' language PYTHON;
CREATE TABLE sourceTable (
id int,
python_c string
) WITH (
'connector' = 'datagen'
);
CREATE TABLE sinkTable
WITH (
'connector' = 'print'
)
LIKE sourceTable (EXCLUDING ALL);
insert into sinkTable select id,sb_p(python_c) from sourceTable;
```
![python_udf_sql.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/how_to/python_udf_sql.png)
flink-conf.yml
```yaml
python.client.executable: /root/miniconda3/bin/python3.8
python.executable: /root/miniconda3/bin/python3.8
```
> 这里需要注意的是,`flink-conf.yml` 得配置 `python` 的执行路径,`python` 环境必须包含 `apache-flink` ,支持 `python3.6 - python3.8`
>
> `python.executable` 是 NodeManager 环境的 python 执行路径
>
> `python.client.executable` 是 Dinky 当前机器所在的python环境
>
> 特别注意,`yarn-application` 环境,2个参数均是hadoop集群 python3 的执行路径
3. 执行,结果查看
![python_udf_tm.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/how_to/python_udf_tm.png)
## 动图演示
![java_udf_show.gif](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/how_to/python_udf_show.gif)
\ No newline at end of file
{
"label": "快速使用",
"position": 1
}
---
sidebar_position: 1
id: udf_intro
title: UDF 功能简介
---
## 开发目的
在使用 flink 中,难免碰到 UDF 的场景。开发、编译、打包,注册函数、测试等一系列流水线操作,这些
都由 Dinky 接管后,只需要开发、测试即可。
目前 Dinky 在对此模块进行优化调整,并有了一个雏形,现阶段支持单类开发;
Dinky 将持续打造 UDF 开发,将来规划与 git接轨,实现在线开发。
> 1. UDF 目前还在孵化阶段,请谨慎使用;
>
> 2. 支持 `Python` 、`Java` 、 `Scala` 三种代码语言
>
> 3. Flink 模式现除了 `k8s application`不支持外,其余模式均可正常使用
---
## 使用方式
1.`数据开发` 里面创建作业 , 然后选择 `Python``Java``Scala`等即可
![create_udf_work.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/create_udf_work.png)
2. udf 这边提供模板,方便快速创建,模板具体使用请看 [udf 模板介绍](./udf_template_intro)
![create_udf_work2.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/create_udf_work2.png)
---
## 操作演示
![create_udf_work.gif](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/create_udf_work.gif)
---
sidebar_position: 2
id: udf_template_intro
title: UDF Template 介绍
---
## 开发目的
1. 为了减少代码复制,实现快速开发
## 使用方式
模板引擎框架采用 [`Freemarker`](https://freemarker.apache.org/)
1.`配置中心 -> udf模板设置` 可调节对应模板。Dinky官方目前提供这几个模板,后续会不断迭代以及追加
![template_intro.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/template_intro.png)
2. 在编辑模板中,java、scala 提供 package、className参数,由类名解析而来;如:`com.dinky.SubStringFunction`,
对应解析成
```
${package}=com.dinky
${className}=SubStringFunction
```
![java_udf_template.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/java_udf_template.png)
![java_udf.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/java_udf.png)
3. python 这边较为特殊,目前只有2个参数,如:`SubStringFunction.f` ,对应为
```
${className}=SubStringFunction,
${attr}=f
```
![python_udf_template.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/python_udf_template.png)
![python_udf.png](http://www.aiwenmo.com/dinky/docs/zh-CN/udf_develop/python_udf.png)
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment