Skip to content

Commit

Permalink
refactor global var docs (DataLinkDC#2612)
Browse files Browse the repository at this point in the history
* refactor_docs_global_var

* full docs
  • Loading branch information
Zzm0809 authored Dec 6, 2023
1 parent d35656c commit 6a438e5
Show file tree
Hide file tree
Showing 5 changed files with 227 additions and 56 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
position: 3
position: 4
id: document_manager
title: 文档管理
---
Expand Down
171 changes: 171 additions & 0 deletions docs/docs/administrator_guide/register_center/global_var.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
---
position: 5
id: global_var
title: 全局变量
---

## 背景及介绍
:::info 简介

为了方便/统一/可复用/安全的使用变量,Dinky 提供了全局变量的功能

全局变量可以在 `数据开发` 中使用 , 并且支持关键词触发提示, 在开发过程中, 输入全局变量名称 ,即可触发关键词提示, 选择后即可自动补全

另外: Dinky 提供了多种全局变量使用/声明方式, 请根据自己的需求选择 ,具体请看下面的介绍

:::



:::warning 注意

如需使用全局变量相关功能,需要在`数据开发``作业配置`中开启全局变量。

:::



## 方式 1: 通过 `注册中心`->`全局变量` 定义

> 可以在 `注册中心` -> `全局变量` 中定义/查看/修改/删除全局变量
```sql
# 比如定义了一个 名称为 `kafkaTopicName` 的变量, 值为 test_topic
# 可以在`数据开发`编辑器内使用, 使用方式为: ${kafkaTopicName}
-- eg:
select ${kafkaTopicName};


# 需要注意的是并不局限于在查询语句中, 也可在 flinksql ddl 定义的 with 配置中使用
-- eg:
create table tast_table (
id int,
name string
) with (
'connector'='kafka',
'topic'='${kafkaTopicName}'
# etc ...
);

```
基于此方式, 可以实现由 Dinky 平台托管一些常用的`连接/敏感信息` | `常用/通用变量` ,etc...


## 方式 2: 通过 `注册中心`->`数据源` 注册全局变量

在 Dinky 中提供了数据源管理的功能, 在`注册数据源`的同时,如果填写了 `Flink 连接配置` ,会自动注册为全局变量,使用`注册数据源的名称`作为`全局变量名称`

假设注册了一个名称为 `dockermysql` 的数据源 并将 `Flink 连接配置` 的值设置为如下:
```sql
'hostname' = '192.168.1.110',
'port' = '3306',
'username' = 'root',
'password' = '123wsd!@d',
```

`数据开发` 中使用 `dockermysql` 变量
```sql

create table tast_table (
id int,
name string,
# ...
) with (
'connector'='mysql-cdc',
${dockermysql}
# etc ...
);
```
以上案例即在 `数据开发` 中使用 `dockermysql` 变量,此种方式在数据源侧声明了链接信息,用户可以直接使用,且对于作业维度而言,保证了连接信息的安全性




## 方式 3: 通过 `数据开发` 中定义全局变量

:::warning 注意
此种方式只能在 `数据开发` 中定义全局变量,如果需要多作业复用,请自行创建作业类型为 `FlinkSQLEnv` 的作业,将变量写入并保存,然后在 `FlinkSQL` 作业右侧的作业配置中关联该 FlinkSQLEnv
:::
```sql map=sql
# 格式
key:= value;

# 示例
var1:=student;
select * from ${var1};

# 查看所有变量 (该查询会包含所有声明的变量,包括注册中心中定义的全局变量)
SHOW FRAGMENTS;
# 查看单个变量
SHOW FRAGMENT var1;
```

## 方式 4: 表达式变量

> 由于部分场景需要使用到类似于 `当前时间戳` `当前日期` 等变量, 为了方便使用, Dinky 提供了表达式变量的功能.

:::warning 注意

`1.0.0` 之前, Dinky 提供了类似 `${_CURRENT_DATE_}` `${_CURRENT_TIMESTAMP_}` 的变量,但是此种方式比较受限,自由度不高,基于以上痛点 Dinky-1.0.0 重构了此功能,改为提供`表达式变量`功能,并且不与之前的 `${_CURRENT_DATE_}` `${_CURRENT_TIMESTAMP_}` 变量兼容, 请知悉!

如您升级到 `1.0.0` 及以上版本, 请修改引用 `${_CURRENT_DATE_}` `${_CURRENT_TIMESTAMP_}` 变量的相关作业

新的表达式变量无需声明, 已由程序启动时自动加载初始化 ,直接使用即可
:::

### 日期时间类表达式变量

> 日期相关: `date` 为实例名用来调用方法`(必须固定)`,使用 [DateUtil](https://doc.hutool.cn/pages/DateUtil/)工具类实现,且支持此工具类的所有方法调用

```sql
-- 获取当前秒
select '${date.currentSeconds()}';

# 获取日期 减去 10 天
select '${date.offsetDay(date.date(), -10)}';

# 获取当前日期 标准格式 yyyy-MM-dd HH:mm:ss
select '${date.now()}';

# etc .....

```




### 随机串相关表达式变量

> `random` 为实例名用来调用方法`(必须固定)`, 使用 [RandomUtil](https://doc.hutool.cn/pages/RandomUtil/)工具类实现,且支持此工具类的所有方法调用
```sql
# 产生一个[10, 100)的随机数
select '${random.randomInt(10, 100)}';

# 随机字符串(只包含数字和字符)
select '${random.randomString()}';

# 获得一个只包含数字的字符串
select '${random.randomNumbers()}';

```

### 唯一 ID 相关表达式变量

> id 为实例名用来调用方法`(必须固定)` , 使用 [IdUtil](https://doc.hutool.cn/pages/IdUtil/) 工具类实现
```sql
# 生成的UUID是带-的字符串,类似于:a5c8a5e8-df2b-4706-bea4-08d0939410e3
select '${id.randomUUID()}';

# 生成的是不带-的字符串,类似于:b17f24ff026d40949c85a24f4f375d42
select '${id.simpleUUID()}';
```

:::tip 扩展

如您需要扩展更多表达式变量, 请参考 [Dinky 表达式变量扩展](../../extend/function_expansion/global_var_ext)

:::
54 changes: 0 additions & 54 deletions docs/docs/administrator_guide/register_center/jar_manager.md

This file was deleted.

2 changes: 1 addition & 1 deletion docs/docs/administrator_guide/register_center/warning.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
position: 5
position: 3
id: warning
title: 报警管理
---
Expand Down
54 changes: 54 additions & 0 deletions docs/docs/extend/function_expansion/global_var_ext.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
sidebar_position: 9
id: global_var_ext
title: 表达式变量扩展
---

:::tip

本扩展文档适用于 v1.0.0 及以上版本

:::

## 介绍

> 本扩展用于扩展表达式中的变量,以满足更多场景需求
## 前置环境

> 扩展前需要启动 Dinky 项目, 本地开发环境搭建请参考 [本地调试](../../developer_guide/local_debug)
## 扩展方法

找到 `dinky-core` 模块下的 `org.dinky.executor.VariableManager.ENGINE_CONTEXT` 变量, 并在其中添加


举例:

> 假设需要扩展 [`Hash 算法`](https://doc.hutool.cn/pages/HashUtil/) 相关的表达式变量
```java

import cn.hutool.core.util.HashUtil;

public final class VariableManager {

public static final Dict ENGINE_CONTEXT = Dict.create()
.set("random", RandomUtil.class)
.set("date", DateUtil.class)
// 只需要在此处添加即可
// 需要注意的是, 此处的 key 必须与表达式中的变量名一致,随后便可以使用该变量调用其方法
.set("hash", HashUtil.class)
.set("id", IdUtil.class);


//... 其他代码无需关心,因此省略...
}
```

:::tip 说明
如您扩展完成需要生产中使用, 参考[编译](../../deploy_guide/compiler) , 打包完成 替换服务器部署的 `dinky/lib/dinky-core-1.0.0.jar` 文件, 重启 dinky 服务即可

考虑到多数用户通用情况下,当然也欢迎您将此次扩展贡献给社区, 请参考 [如何贡献](../../developer_guide/contribution/how_contribute) 进行 [PR](../../developer_guide/contribution/pull_request)

:::

0 comments on commit 6a438e5

Please sign in to comment.