You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@linkis.apache.org by ca...@apache.org on 2023/03/02 08:48:18 UTC

[linkis-website] branch dev updated: 1.3.2 doc (#680)

This is an automated email from the ASF dual-hosted git repository.

casion pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/linkis-website.git


The following commit(s) were added to refs/heads/dev by this push:
     new b676582bba 1.3.2 doc (#680)
b676582bba is described below

commit b676582bba4362550ef9c18144a79a154633fbf6
Author: rarexixi <ra...@gmail.com>
AuthorDate: Thu Mar 2 16:48:13 2023 +0800

    1.3.2 doc (#680)
    
    * add 1.3.2 doc
    
    * modify 1.3.2 doc
    
    * modify 1.3.2 doc
    
    * 1.3.2 doc
    
    ---------
    
    Co-authored-by: xi <ra...@sina.com>
---
 docs/engine-usage/spark.md                         | 628 ++++++++++++++++++++
 docs/user-guide/control-panel/udf-function.md      |  35 +-
 .../current/engine-usage/spark.md                  | 644 ++++++++++++++++++++-
 .../user-guide/control-panel/udf-function.md       |  34 ++
 static/Images-zh/EngineUsage/data_calc.svg         | 401 +++++++++++++
 static/Images/EngineUsage/data_calc.svg            | 397 +++++++++++++
 6 files changed, 2130 insertions(+), 9 deletions(-)

diff --git a/docs/engine-usage/spark.md b/docs/engine-usage/spark.md
index e27b7903ef..f154f7e694 100644
--- a/docs/engine-usage/spark.md
+++ b/docs/engine-usage/spark.md
@@ -72,6 +72,93 @@ labels.put(LabelKeyConstant.USER_CREATOR_TYPE_KEY, "hadoop-IDE");// required exe
 labels.put(LabelKeyConstant.CODE_TYPE_KEY, "sql"); // required codeType py,sql,scala
 ```
 
+Submit task by `OnceEngineConn`(spark-submit jar), example: `org.apache.linkis.computation.client.SparkOnceJobTest`
+
+```java
+public class SparkOnceJobTest {
+
+    public static void main(String[] args)  {
+
+        LinkisJobClient.config().setDefaultServerUrl("http://127.0.0.1:9001");
+
+        String submitUser = "linkis";
+        String engineType = "spark";
+
+        SubmittableSimpleOnceJob onceJob =
+                // region
+                LinkisJobClient.once().simple().builder()
+                        .setCreateService("Spark-Test")
+                        .setMaxSubmitTime(300000)
+                        .setDescription("SparkTestDescription")
+                        .addExecuteUser(submitUser)
+                        .addJobContent("runType", "jar")
+                        .addJobContent("spark.app.main.class", "org.apache.spark.examples.JavaWordCount")
+                        // parameter
+                        .addJobContent("spark.app.args", "hdfs:///tmp/test_word_count.txt") // WordCount test file
+                        .addLabel("engineType", engineType + "-2.4.7")
+                        .addLabel("userCreator", submitUser + "-IDE")
+                        .addLabel("engineConnMode", "once")
+                        .addStartupParam("spark.app.name", "spark-submit-jar-test-linkis") // Application Name on yarn 
+                        .addStartupParam("spark.executor.memory", "1g")
+                        .addStartupParam("spark.driver.memory", "1g")
+                        .addStartupParam("spark.executor.cores", "1")
+                        .addStartupParam("spark.executor.instance", "1")
+                        .addStartupParam("spark.app.resource", "hdfs:///tmp/spark/spark-examples_2.11-2.3.0.2.6.5.0-292.jar")
+                        .addSource("jobName", "OnceJobTest")
+                        .build();
+        // endregion
+        onceJob.submit();
+        // Temporary network failure will cause exceptions. It is recommended to modify the SDK later. For use at this stage, exception handling is required
+        onceJob.waitForCompleted();
+    }
+}
+```
+
+### 3.3 Submitting tasks with `Restful API`
+
+Scripts type includes `sql`、`scala`、`python`、`data_calc(content type is json)`.
+
+[Restful API Usage](../api/linkis-task-operator.md)
+
+```http request
+POST /api/rest_j/v1/entrance/submit
+Content-Type: application/json
+Token-Code: dss-AUTH
+Token-User: linkis
+
+{
+    "executionContent": {
+        // script content, type: sql, python, scala, json
+        "code": "show databases",
+        // script type: sql, py(pyspark), scala, data_calc(json)
+        "runType": "sql"
+    },
+    "params": {
+        "variable": {
+        },
+        "configuration": {
+            // spark startup parameters, not required
+            "startup": {
+                "spark.executor.memory": "1g",
+                "spark.driver.memory": "1g",
+                "spark.executor.cores": "1",
+                "spark.executor.instances": 1
+            }
+        }
+    },
+    "source":  {
+        // not required, file:/// or hdfs:///
+        "scriptPath": "file:///tmp/hadoop/test.sql"
+    },
+    "labels": {
+        // pattern:engineType-version
+        "engineType": "spark-2.4.3",
+        // userCreator: linkis is username。IDE is system that be configed in Linkis。
+        "userCreator": "linkis-IDE"
+    }
+}
+```
+
 ## 4. Engine configuration instructions
 
 ### 4.1 Default Configuration Description
@@ -180,4 +267,545 @@ insert into `linkis_ps_configuration_config_value` (`config_key_id`, `config_val
 (select `relation`.`config_key_id` AS `config_key_id`, '' AS `config_value`, `relation`.`engine_type_label_id` AS `config_label_id` FROM linkis_ps_configuration_key_engine_relation relation
 INNER JOIN linkis_cg_manager_label label ON relation.engine_type_label_id = label.id AND label.label_value = @SPARK_ALL);
 
+```
+
+## 5. introduction for data_calc(data calculate)
+
+Spark ETL operation by parsing json, and the design:
+
+![data_calc](/Images/EngineUsage/data_calc.svg)
+
+data_calc json configuration, tow mode:*array*(:default) and *group*
+
+The type of plugin: source, transformation, sink
+
+**data_calc example**
+
+```
+POST http://localhost:8087/api/rest_j/v1/entrance/submit
+Content-Type: application/json
+Token-Code: dss-AUTH
+Token-User: linkis
+
+{
+  "executionContent": {
+    // Code is the escaped json. See the following for detailed configuration instructions
+    "code": "{\"plugins\":[{\"type\":\"source\",\"name\":\"jdbc\",\"config\":{\"resultTable\":\"spark_source_01\",\"url\":\"jdbc:mysql://localhost:3306/\",\"driver\":\"com.mysql.jdbc.Driver\",\"user\":\"xi_root\",\"password\":\"123456\",\"query\":\"select * from linkis.linkis_cg_manager_label\",\"options\":{}}},{\"type\":\"transformation\",\"name\":\"sql\",\"config\":{\"resultTable\":\"spark_transform_01\",\"sql\":\"select * from spark_source_01 limit 100\"}},{\"type\":\"sink\",\"name\": [...]
+    "runType": "data_calc"
+  },
+  "params": {
+    "variable": {},
+    "configuration": {
+      // Startup parameter
+      "startup": {
+        "spark.executor.memory": "1g",
+        "spark.driver.memory": "1g",
+        "spark.executor.cores": "1",
+        "spark.executor.instances": 1
+      }
+    }
+  },
+  "labels": {
+    "engineType": "spark-2.4.3",
+    "userCreator": "linkis-IDE"
+  }
+}
+```
+
+### 5.1 Mode Array
+
+Plugin has 3 field, name is the plugin's name, type is the plugin's type, config is the plugin's configuration
+
+```json
+{
+    "plugins": [
+        {
+            "type": "source",
+            "name": "jdbc",
+            "config": {
+                "resultTable": "spark_source_01",
+                "url": "jdbc:mysql://localhost:3306/",
+                "driver": "com.mysql.jdbc.Driver",
+                "user": "xi_root",
+                "password": "123456",
+                "query": "select * from linkis.linkis_cg_manager_label",
+                "options": {
+                }
+            }
+        },
+        {
+            "type": "transformation",
+            "name": "sql",
+            "config": {
+                "resultTable": "spark_transform_01",
+                "sql": "select * from spark_source_01 limit 100"
+            }
+        },
+        {
+            "type": "sink",
+            "name": "file",
+            "config": {
+                "sourceTable": "spark_transform_01",
+                "path": "hdfs:///tmp/data/testjson",
+                "serializer": "json",
+                "partitionBy": [
+                    "label_key"
+                ],
+                "saveMode": "overwrite"
+            }
+        }
+    ]
+}
+
+```
+
+### 5.2 Mode Group
+
+Plugin has 2 field, name is the plugin's name, config is the plugin's configuration
+
+The configuration is divided into three parts:
+
+1. sources:Config data source
+2. transformations:Config data transformations
+3. sinks:Config data sink
+
+```json
+{
+    "sources": [
+        {
+            "name": "jdbc",
+            "config": {
+                "resultTable": "spark_source_table_00001",
+                "url": "jdbc:mysql://localhost:3306/",
+                "driver": "com.mysql.jdbc.Driver",
+                "user": "test_db_rw",
+                "password": "123456",
+                "query": "select * from test_db.test_table",
+                "options": {
+                }
+            }
+        },
+        {
+           "name": "file",
+           "config": {
+              "resultTable": "spark_source_table_00002",
+              "path": "hdfs:///data/tmp/testfile.csv",
+              "serializer": "csv",
+              "columnNames": ["type", "name"],
+              "options": {
+              }
+           }
+        }
+    ],
+    "transformations": [
+        {
+            "name": "sql",
+            "config": {
+                "resultTable": "spark_transform_00001",
+                "sql": "select * from spark_source_table_00001 t1 join spark_source_table_00002 t2 on t1.type=t2.type where t1.id > 100 limit 100"
+            }
+        }
+    ],
+    "sinks": [
+        {
+            "name": "file",
+            "config": {
+                "sourceTable": "spark_transform_00001",
+                "path": "hdfs:///tmp/data/test_json",
+                "serializer": "json",
+                "partitionBy": [
+                    "label_key"
+                ],
+                "saveMode": "overwrite"
+            }
+        }
+    ]
+}
+```
+
+### 5.3 Plugin type description
+
+#### 5.3.1 Source configuration
+
+Corresponding data reading operations can read files from files and jdbc. * * Only the current source table can be used, and the temporary table registered before the current configuration cannot be used**
+
+**Public configuration**
+
+| **field name**   | **introduction**                                                     | **field type**        | **required** | **default**      |
+| ------------ | ------------------------------------------------------------ | ------------------- | ------------ | --------------- |
+| resultTable  | register table name for `transform` / `sink`                         | String              | Yes           | -               |
+| persist      | spark persist                                                     | Boolean             | No           | false           |
+| storageLevel | spark storageLevel                                                     | String              | No           | MEMORY_AND_DISK |
+| options      | [spark official](https://spark.apache.org/docs/latest/sql-data-sources.html) | Map<String, String> | No           |                 |
+
+##### 5.3.1.1 file
+
+**Fields**
+
+| **field name**   | **introduction**    | **field type**        | **required** | **default**      |
+| ----------- | ------------------------ | ------------ | ------------ | ---------- |
+| path        | File path, default is `hdfs`                 | String       | Yes           | -          |
+| serializer  | file format, default is   `parquet`          | String       | Yes           | `parquet`    |
+| columnNames | Mapped field name             | String[]     | No           | -          |
+
+**Exemples**
+
+```JSON
+{
+    "name": "file",
+    "config": {
+        "resultTable": "spark_source_table_00001",
+        "path": "hdfs:///data/tmp/test_csv_/xxx.csv",
+        "serializer": "csv",
+        "columnNames": ["id", "name"],
+        "options": {
+            "key": "value"
+        }
+    }
+}
+```
+
+##### 5.3.1.2 jdbc
+
+**Fields**
+
+| **field name**   | **introduction**                                                     | **field type**        | **required** | **default**      |
+| ---------- | ---------------------------------------------------- | ------------ | ------------ | ---------- |
+| url        | jdbc url                                 | String       | Yes           | -          |
+| driver     | driver class                                | String       | Yes           | -          |
+| user       | username                                               | String       | Yes           | -          |
+| password   | password                                                 | String       | Yes           | -          |
+| query      | The functions used in the query must be supported by the datasource | String       | Yes           | -          |
+
+**Exemples**
+
+```JSON
+{
+    "name": "jdbc",
+    "config": {
+        "resultTable": "spark_source_table_00001",
+        "url": "jdbc:mysql://localhost:3306/",
+        "driver": "com.mysql.jdbc.Driver",
+        "user": "local_root",
+        "password": "123456",
+        "query": "select a.xxx, b.xxxx from test_table where id > 100",
+        "options": {
+            "key": "value"
+        }
+    }
+}
+```
+
+##### 5.3.1.3 managed_jdbc
+
+Data source configured in Linkis. The data source connection information will be obtained from linkis and converted to jdbc for execution.
+
+**Fields**
+
+| **field name**   | **introduction**     | **field type**        | **required** | **default**      |
+| ---------- |----------------------------| ------------ | ------------ | ---------- |
+| datasource | Data source name configured in Linkis                      | String       | Yes           | -          |
+| query      | The functions used in the query must be supported by the selected datasource | String       | Yes           | -          |
+
+**Exemples**
+
+```JSON
+{
+    "name": "jdbc",
+    "config": {
+        "datasource": "mysql_test_db",
+        "query": "select a.xxx, b.xxxx from table where id > 100",
+        "options": {
+            "key": "value"
+        }
+    }
+}
+```
+
+#### 5.3.2 Transform Configuration
+
+The logic of data transformation, **All `resultTable` registered before the current configuration can be used**
+
+**Public configuration**
+
+| **field name**   | **introduction**                    | **field type**        | **required** | **default**      |
+| ------------ | ---------------------------------------------- | ------------ | ------------ | --------------- |
+| sourceTable  | `resultTable` registered by the above `source` / `transform` | String       | No           | -               |
+| resultTable  | Register `resultTable` for the below `transform` / `sink`            | String       | Yes           | -               |
+| persist      | spark persist                                                     | Boolean             | No           | false           |
+| storageLevel | spark storageLevel                                                     | String              | No           | MEMORY_AND_DISK |
+
+##### 5.3.2.1 sql
+
+**Fields**
+
+| **field name**   | **introduction**                    | **field type**        | **required** | **default**      |
+| ---------- | ------------------------------------------------------------ | ------------ | ------------ | ---------- |
+| sql        | `resultTable` registered by the above `source` / `transform` can be used | String       | Yes           | -          |
+
+**Exemples**
+
+```JSON
+{
+    "name": "sql",
+    "config": {
+        "resultTable": "spark_transform_table_00001",
+        "sql": "select * from ods.ods_test_table as a join spark_source_table_00001 as b on a.vin=b.vin",
+        "cache": true
+    }
+}
+```
+
+#### 5.3.3 Sink Configuration
+
+Write the `resultTable` to a file or table, **All `resultTable` registered before the current configuration can be used**
+
+**Public configuration**
+
+| **field name**   | **introduction**                    | **field type**        | **required** | **default**      |
+| ------------------------- | ------------------------------------------------------------ | ------------------- | ------------ | ------------------------------------------------------------ |
+| sourceTable / sourceQuery | `resultTable` from `soruce` / `transform` or select sql, which will be written         | String              | No           | sourceTable 和 sourceQuery 必须有一个不为空 sourceQuery 优先级更高 |
+| options                   | [spark official](https://spark.apache.org/docs/latest/sql-data-sources.html) | Map<String, String> | No           |                                                              |
+| variables                 | Variables can be replaced in file, example: `dt="${day}"`                                   | Map<String, String> | No           | {    "dt": "${day}",     "hour": "${hour}", }                |
+
+##### 5.3.3.1 hive
+
+**Fields**
+
+| **field name**   | **introduction**                    | **field type**        | **required** | **default**      |
+| -------------- | ------------------------------------------------------------ | ------------ | ------------ | ---------- |
+| targetDatabase | The database of the table to be written                        | String       | Yes           | -          |
+| targetTable    | The table to be written                                        | String       | Yes           | -          |
+| saveMode       | Write mode, refer to Spark, the default is `overwrite`          | String       | Yes           | `overwrite`    |
+| strongCheck    | field name, field order, field type must be same                  | Boolean      | No           | true       |
+| writeAsFile    | Write as a file, it can improve efficiency. All partition variables should be in `variables` | Boolean      | No           | false      |
+| numPartitions  | Number of partitions, `Dataset.repartition`                                | Integer      | No           | 10         |
+
+**Exemples**
+
+```JSON
+{
+    "name": "hive",
+    "config": {
+        "sourceTable": "spark_transform_table_00001",
+        "targetTable": "dw.result_table",
+        "saveMode": "append",
+        "options": {
+            "key": "value"
+        }
+    }
+}
+```
+
+##### 5.3.3.2 jdbc
+
+**Fields**
+
+| **field name**   | **introduction**                    | **field type**        | **required** | **default**      |
+| -------------- |--------------------------| ------------ | ------------ | ---------- |
+| url            | jdbc url               | String       | Yes           | -          |
+| driver         | driver class(fully-qualified name)               | String       | Yes           | -          |
+| user           | username                      | String       | Yes           | -          |
+| password       | password                       | String       | Yes           | -          |
+| targetDatabase | The database of the table to be written             | String       | No           | -          |
+| targetTable    | The table to be written                       | String       | Yes           | -          |
+| preQueries     | SQL executed before writing                 | String[]     | No           | -          |
+| numPartitions  | Number of partitions, `Dataset.repartition` | Integer      | No           | 10         |
+
+**Exemples**
+
+```JSON
+{
+    "name": "jdbc",
+    "config": {
+        "sourceTable": "spark_transform_table_00001",
+        "database": "mysql_test_db",
+        "targetTable": "test_001",
+        "preQueries": ["delete from test_001 where dt='${exec_date}'"],
+        "options": {
+            "key": "value"
+        }
+    }
+}
+```
+
+##### 5.3.3.3 managed_jdbc
+
+Data source configured in Linkis. The data source connection information will be obtained from linkis and converted to jdbc for execution.
+
+**Fields**
+
+| **field name**   | **introduction**                    | **field type**        | **required** | **default**      |
+|------------------|--------------------------| ------------ | ------------ | ---------- |
+| targetDatasource | Data source name configured in Linkis           | String       | No           | -          |
+| targetDatabase   | The database of the table to be written            | String       | No           | -          |
+| targetTable      | The table to be written                  | String       | Yes           | -          |
+| preQueries       | SQL executed before writing              | String[]     | No           | -          |
+| numPartitions    | Number of partitions, `Dataset.repartition` | Integer      | No           | 10         |
+
+**Exemples**
+
+```JSON
+{
+    "name": "jdbc",
+    "config": {
+        "targetDatasource": "spark_transform_table_00001",
+        "targetDatabase": "mysql_test_db",
+        "targetTable": "test_001",
+        "preQueries": ["delete from test_001 where dt='${exec_date}'"],
+        "options": {
+            "key": "value"
+        }
+    }
+}
+```
+
+##### 5.3.3.4 file
+
+**Fields**
+
+| **field name**   | **introduction**                        | **field type**        | **required** | **default**      |
+| ----------- | -------------------------------------------- | ------------ | ------------ | ---------- |
+| path        | File path, default is `hdfs`                 | String       | Yes           | -          |
+| serializer  | file format, default is   `parquet`          | String       | Yes           | `parquet`    |
+| partitionBy |                                              | String[]     | No           |            |
+| saveMode    | Write mode, refer to Spark, the default is `overwrite` | String       | No           |   `overwrite`  |
+
+**Exemples**
+
+```JSON
+{
+    "name": "file",
+    "config": {
+        "sourceTable": "spark_transform_table_00001",
+        "path": "hdfs:///data/tmp/test_json/",
+        "serializer": "json", 
+        "variables": {
+            "key": "value"
+        },
+        "options": {
+            "key": "value"
+        }
+    }
+}
+```
+
+### 5.4 Exemples
+
+1. Read from jdbc, write to hive
+
+```json
+{
+    "sources": [
+        {
+            "name": "jdbc",
+            "config": {
+                "resultTable": "spark_source_0001",
+                "database": "mysql_test_db",
+                "query": "select * from test_table limit 100"
+            }
+        }
+    ],
+    "transformations": [
+    ],
+    "sinks": [
+        {
+            "name": "hive",
+            "config": {
+                "sourceTable": "spark_source_0001",
+                "targetTable": "ods.ods_test_table",
+                "saveMode": "overwrite"
+            }
+        }
+    ]
+}
+```
+
+2. Read from hive, write to hive
+
+```json
+{
+    "sources": [
+    ],
+    "transformations": [
+        {
+            "name": "sql",
+            "config": {
+                "resultTable": "spark_transform_00001",
+                "sql": "select * from ods.ods_test_table limit 100"
+            }
+        }
+    ],
+    "sinks": [
+        {
+            "name": "hive",
+            "config": {
+                "sourceTable": "spark_transform_00001",
+                "targetTable": "dw.dw_test_table",
+                "saveMode": "overwrite"
+            }
+        }
+    ]
+}
+```
+
+3. Read from file, write to hive
+
+```json
+{
+    "sources": [
+        {
+            "name": "file",
+            "config": {
+                "path": "hdfs:///data/tmp/test_csv/",
+                "resultTable": "spark_file_0001",
+                "serializer": "csv",
+                "columnNames": ["col1", "col2", "col3"],
+                "options": {
+                    "delimiter": ",",
+                    "header", "false"
+                }
+            }
+        }
+    ],
+    "transformations": [
+    ],
+    "sinks": [
+        {
+            "name": "hive",
+            "config": {
+                "sourceQuery": "select col1, col2 from spark_file_0001",
+                "targetTable": "ods.ods_test_table",
+                "saveMode": "overwrite",
+                "variables": {
+                }
+            }
+        }
+    ]
+}
+```
+
+4. Read from hive, write to jdbc
+
+```json
+{
+    "sources": [
+    ],
+    "transformations": [
+    ],
+    "sinks": [
+        {
+            "name": "jdbc",
+            "config": {
+                "sourceQuery": "select * from dm.dm_result_table where dt=${exec_date}",
+                "database": "mysql_test_db",
+                "targetTable": "mysql_test_table",
+                "preQueries": ["delete from mysql_test_table where dt='${exec_date}'"],
+                "options": {
+                    "key": "value"
+                }
+            }
+        }
+    ]
+}
 ```
\ No newline at end of file
diff --git a/docs/user-guide/control-panel/udf-function.md b/docs/user-guide/control-panel/udf-function.md
index 45a361395f..1f82f71e8f 100644
--- a/docs/user-guide/control-panel/udf-function.md
+++ b/docs/user-guide/control-panel/udf-function.md
@@ -103,7 +103,40 @@ Shared functions: functions shared to you by others, you need to load them to us
 
 Expired function: It is also a shared function, but the sharer marked it as expired, which will not affect the use for the time being
 
-
+**Load udf from parameter `ids`**
+
+| parameter name             | introduction                 |  default|
+|--------------------------- |------------------------------|---------|
+|`linkis.user.udf.all.load`  | load user's all selected udf | true    |
+|`linkis.user.udf.custom.ids`| udf ID list,split by `,`    |  -      |
+
+example:
+
+```http request
+POST /api/rest_j/v1/entrance/submit
+Content-Type: application/json
+Token-Code: dss-AUTH
+Token-User: linkis
+
+{
+    "executionContent": {
+        "code": "show databases",
+        "runType": "sql"
+    },
+    "params": {
+        "configuration": {
+            "startup": {
+                "linkis.user.udf.all.load": false
+                "linkis.user.udf.custom.ids": "1,2,3"
+            }
+        }
+    },
+    "labels": {
+        "engineType": "spark-2.4.3",
+        "userCreator": "linkis-IDE"
+    }
+}
+```
 
 ## 4 UDF sharing
 Premise: The sharing function requires the user to be an administrator to use it, otherwise the front-end page will not provide an operation entry.
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/engine-usage/spark.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/engine-usage/spark.md
index c980916314..4ed0d8dc28 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/engine-usage/spark.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/engine-usage/spark.md
@@ -71,6 +71,93 @@ labels.put(LabelKeyConstant.USER_CREATOR_TYPE_KEY, "hadoop-IDE");// required exe
 labels.put(LabelKeyConstant.CODE_TYPE_KEY, "sql"); // required codeType py,sql,scala
 ```
 
+通过 `OnceEngineConn` 提交任务(通过 spark-submit 提交 jar 包执行任务),提交方式参考 `org.apache.linkis.computation.client.SparkOnceJobTest`
+
+```java
+public class SparkOnceJobTest {
+
+    public static void main(String[] args)  {
+
+        LinkisJobClient.config().setDefaultServerUrl("http://127.0.0.1:9001");
+
+        String submitUser = "linkis";
+        String engineType = "spark";
+
+        SubmittableSimpleOnceJob onceJob =
+                // region
+                LinkisJobClient.once().simple().builder()
+                        .setCreateService("Spark-Test")
+                        .setMaxSubmitTime(300000)
+                        .setDescription("SparkTestDescription")
+                        .addExecuteUser(submitUser)
+                        .addJobContent("runType", "jar")
+                        .addJobContent("spark.app.main.class", "org.apache.spark.examples.JavaWordCount")
+                        // 提交的jar包获取的参数
+                        .addJobContent("spark.app.args", "hdfs:///tmp/test_word_count.txt") // WordCount 测试文件
+                        .addLabel("engineType", engineType + "-2.4.7")
+                        .addLabel("userCreator", submitUser + "-IDE")
+                        .addLabel("engineConnMode", "once")
+                        .addStartupParam("spark.app.name", "spark-submit-jar-test-linkis") // yarn上展示的 Application Name
+                        .addStartupParam("spark.executor.memory", "1g")
+                        .addStartupParam("spark.driver.memory", "1g")
+                        .addStartupParam("spark.executor.cores", "1")
+                        .addStartupParam("spark.executor.instance", "1")
+                        .addStartupParam("spark.app.resource", "hdfs:///tmp/spark/spark-examples_2.11-2.3.0.2.6.5.0-292.jar")
+                        .addSource("jobName", "OnceJobTest")
+                        .build();
+        // endregion
+        onceJob.submit();
+        // 网络临时不通会导致异常,建议后期修改 SDK,现阶段使用,需要做异常处理
+        onceJob.waitForCompleted();
+    }
+}
+```
+
+### 3.3 通过 Restful API 提交任务
+
+运行脚本类型包括 `sql`、`scala`、`python`、`data_calc(格式为json)`。
+
+[任务提交执行Restful API文档](../api/linkis-task-operator.md)
+
+```http request
+POST /api/rest_j/v1/entrance/submit
+Content-Type: application/json
+Token-Code: dss-AUTH
+Token-User: linkis
+
+{
+    "executionContent": {
+        // 脚本内容,可以是sql,python,scala,json
+        "code": "show databases",
+        // 运行的脚本类型 sql, py(pyspark), scala, data_calc
+        "runType": "sql"
+    },
+    "params": {
+        "variable": {
+        },
+        "configuration": {
+            // spark 启动参数,非必填
+            "startup": {
+                "spark.executor.memory": "1g",
+                "spark.driver.memory": "1g",
+                "spark.executor.cores": "1",
+                "spark.executor.instances": 1
+            }
+        }
+    },
+    "source":  {
+        // 非必填,file:/// 或者 hdfs:///
+        "scriptPath": "file:///tmp/hadoop/test.sql"
+    },
+    "labels": {
+        // 格式为:引擎类型-版本
+        "engineType": "spark-2.4.3",
+        // userCreator: linkis 为用户名。IDE 是系统名,在 Linkis 后台管理。
+        "userCreator": "linkis-IDE"
+    }
+}
+```
+
 ## 4.引擎配置说明
 
 ### 4.1 默认配置说明
@@ -113,13 +200,13 @@ http 请求参数示例
 {
     "executionContent": {"code": "show databases;", "runType":  "sql"},
     "params": {
-                    "variable": {},
-                    "configuration": {
-                            "runtime": {
-                                "wds.linkis.rm.instance":"10"
-                                }
-                            }
-                    },
+        "variable": {},
+        "configuration": {
+            "runtime": {
+                "wds.linkis.rm.instance":"10"
+            }
+        }
+    },
     "labels": {
         "engineType": "spark-2.4.3",
         "userCreator": "hadoop-IDE"
@@ -179,4 +266,545 @@ insert into `linkis_ps_configuration_config_value` (`config_key_id`, `config_val
 (select `relation`.`config_key_id` AS `config_key_id`, '' AS `config_value`, `relation`.`engine_type_label_id` AS `config_label_id` FROM linkis_ps_configuration_key_engine_relation relation
 INNER JOIN linkis_cg_manager_label label ON relation.engine_type_label_id = label.id AND label.label_value = @SPARK_ALL);
 
-```
\ No newline at end of file
+```
+
+## 5. data_calc(数据计算,data calculate)功能说明
+
+spark 解析 json 配置进行 ETL 操作的功能,整体设计如下图
+
+![data_calc](/Images-zh/EngineUsage/data_calc.svg)
+
+data_calc json 配置文件内容,有两种配置模式:数组模式和分组模式,默认为数组模式
+
+插件类型包括 source,transformation,sink
+
+**data_calc 调用样例**
+
+```
+POST http://localhost:8087/api/rest_j/v1/entrance/submit
+Content-Type: application/json
+Token-Code: dss-AUTH
+Token-User: linkis
+
+{
+  "executionContent": {
+    // code 为转译之后的 json,具体配置说明详见下文
+    "code": "{\"plugins\":[{\"type\":\"source\",\"name\":\"jdbc\",\"config\":{\"resultTable\":\"spark_source_01\",\"url\":\"jdbc:mysql://localhost:3306/\",\"driver\":\"com.mysql.jdbc.Driver\",\"user\":\"xi_root\",\"password\":\"123456\",\"query\":\"select * from linkis.linkis_cg_manager_label\",\"options\":{}}},{\"type\":\"transformation\",\"name\":\"sql\",\"config\":{\"resultTable\":\"spark_transform_01\",\"sql\":\"select * from spark_source_01 limit 100\"}},{\"type\":\"sink\",\"name\": [...]
+    "runType": "data_calc"
+  },
+  "params": {
+    "variable": {},
+    "configuration": {
+      // 启动参数设置
+      "startup": {
+        "spark.executor.memory": "1g",
+        "spark.driver.memory": "1g",
+        "spark.executor.cores": "1",
+        "spark.executor.instances": 1
+      }
+    }
+  },
+  "labels": {
+    "engineType": "spark-2.4.3",
+    "userCreator": "linkis-IDE"
+  }
+}
+```
+
+### 5.1 数组模式
+
+插件有三个字段,name 为插件名,type 为插件类型,config 为具体配置
+
+```json
+{
+    "plugins": [
+        {
+            "type": "source",
+            "name": "jdbc",
+            "config": {
+                "resultTable": "spark_source_01",
+                "url": "jdbc:mysql://localhost:3306/",
+                "driver": "com.mysql.jdbc.Driver",
+                "user": "xi_root",
+                "password": "123456",
+                "query": "select * from linkis.linkis_cg_manager_label",
+                "options": {
+                }
+            }
+        },
+        {
+            "type": "transformation",
+            "name": "sql",
+            "config": {
+                "resultTable": "spark_transform_01",
+                "sql": "select * from spark_source_01 limit 100"
+            }
+        },
+        {
+            "type": "sink",
+            "name": "file",
+            "config": {
+                "sourceTable": "spark_transform_01",
+                "path": "hdfs:///tmp/data/testjson",
+                "serializer": "json",
+                "partitionBy": [
+                    "label_key"
+                ],
+                "saveMode": "overwrite"
+            }
+        }
+    ]
+}
+
+```
+
+### 5.2 分组模式
+
+插件有两个字段,name 为插件名,config 为具体配置
+
+配置分为**3部分**:
+
+1. sources:配置数据源,对应source类型插件
+2. transformations:配置具体操作,对应transform类型插件
+3. sinks:配置输出操作,对应sink类型插件
+
+```json
+{
+    "sources": [
+        {
+            "name": "jdbc",
+            "config": {
+                "resultTable": "spark_source_table_00001",
+                "url": "jdbc:mysql://localhost:3306/",
+                "driver": "com.mysql.jdbc.Driver",
+                "user": "test_db_rw",
+                "password": "123456",
+                "query": "select * from test_db.test_table",
+                "options": {
+                }
+            }
+        },
+        {
+           "name": "file",
+           "config": {
+              "resultTable": "spark_source_table_00002",
+              "path": "hdfs:///data/tmp/testfile.csv",
+              "serializer": "csv",
+              "columnNames": ["type", "name"],
+              "options": {
+              }
+           }
+        }
+    ],
+    "transformations": [
+        {
+            "name": "sql",
+            "config": {
+                "resultTable": "spark_transform_00001",
+                "sql": "select * from spark_source_table_00001 t1 join spark_source_table_00002 t2 on t1.type=t2.type where t1.id > 100 limit 100"
+            }
+        }
+    ],
+    "sinks": [
+        {
+            "name": "file",
+            "config": {
+                "sourceTable": "spark_transform_00001",
+                "path": "hdfs:///tmp/data/test_json",
+                "serializer": "json",
+                "partitionBy": [
+                    "label_key"
+                ],
+                "saveMode": "overwrite"
+            }
+        }
+    ]
+}
+```
+
+### 5.3 插件类型说明
+
+#### 5.3.1 Source 插件配置
+
+对应数据读取操作,可以从文件,jdbc读取文件,**仅能使用当前源的表,不能使用当前配置之前注册的临时表**
+
+**公共配置**
+
+| **字段名**   | **说明**                                                     | **字段类型**        | **是否必须** | **默认值**      |
+| ------------ | ------------------------------------------------------------ | ------------------- | ------------ | --------------- |
+| resultTable  | 注册表名,供 transform / sink 使用                           | String              | 是           | -               |
+| persist      | 是否缓存                                                     | Boolean             | 否           | false           |
+| storageLevel | 缓存级别                                                     | String              | 否           | MEMORY_AND_DISK |
+| options      | 参考 [spark 官方文档](https://spark.apache.org/docs/latest/sql-data-sources.html) | Map<String, String> | 否           |                 |
+
+##### 5.3.1.1 file
+
+**配置字段**
+
+| **字段名**  | **说明**                 | **字段类型** | **是否必须** | **默认值** |
+| ----------- | ------------------------ | ------------ | ------------ | ---------- |
+| path        | 文件路径,默认为 hdfs    | String       | 是           | -          |
+| serializer  | 文件格式,默认为 parquet | String       | 是           | parquet    |
+| columnNames | 映射的字段名             | String[]     | 否           | -          |
+
+**样例**
+
+```JSON
+{
+    "name": "file",
+    "config": {
+        "resultTable": "spark_source_table_00001",
+        "path": "hdfs:///data/tmp/test_csv_/xxx.csv",
+        "serializer": "csv",
+        "columnNames": ["id", "name"],
+        "options": {
+            "key": "value"
+        }
+    }
+}
+```
+
+##### 5.3.1.2 jdbc
+
+**配置字段**
+
+| **字段名** | **说明**                                             | **字段类型** | **是否必须** | **默认值** |
+| ---------- | ---------------------------------------------------- | ------------ | ------------ | ---------- |
+| url        | jdbc url                                 | String       | 是           | -          |
+| driver     | 驱动类(完全限定名)                                 | String       | 是           | -          |
+| user       | 用户名                                               | String       | 是           | -          |
+| password   | 密码                                                 | String       | 是           | -          |
+| query      | 查询语句,查询中使用的函数必须符合选中的数据库的规范 | String       | 是           | -          |
+
+**样例**
+
+```JSON
+{
+    "name": "jdbc",
+    "config": {
+        "resultTable": "spark_source_table_00001",
+        "url": "jdbc:mysql://localhost:3306/",
+        "driver": "com.mysql.jdbc.Driver",
+        "user": "local_root",
+        "password": "123456",
+        "query": "select a.xxx, b.xxxx from test_table where id > 100",
+        "options": {
+            "key": "value"
+        }
+    }
+}
+```
+
+##### 5.3.1.3 managed_jdbc
+
+linkis 中配置的 jdbc 数据源,会从 linkis 中获取数据源连接信息,并转为 jdbc 执行
+
+**配置字段**
+
+| **字段名** | **说明**                     | **字段类型** | **是否必须** | **默认值** |
+| ---------- |----------------------------| ------------ | ------------ | ---------- |
+| datasource | Linkis 中配置的数据源名称                       | String       | 是           | -          |
+| query      | 查询语句,查询中使用的函数必须符合选中的数据库的规范 | String       | 是           | -          |
+
+**样例**
+
+```JSON
+{
+    "name": "jdbc",
+    "config": {
+        "datasource": "mysql_test_db",
+        "query": "select a.xxx, b.xxxx from table where id > 100",
+        "options": {
+            "key": "value"
+        }
+    }
+}
+```
+
+#### 5.3.2 Transform 插件配置
+
+数据加工相关逻辑,**可以使用当前配置之前注册的所有临时表**
+
+**公共配置**
+
+| **字段名**   | **说明**                                       | **字段类型** | **是否必须** | **默认值**      |
+| ------------ | ---------------------------------------------- | ------------ | ------------ | --------------- |
+| sourceTable  | 来源表名,使用 source / transform 注册的结果表 | String       | 否           | -               |
+| resultTable  | 注册表名,供 transform / sink 使用             | String       | 是           | -               |
+| persist      | 是否缓存                                       | Boolean      | 否           | false           |
+| storageLevel | 缓存级别                                       | String       | 否           | MEMORY_AND_DISK |
+
+##### 5.3.2.1 sql
+
+**配置字段**
+
+| **字段名** | **说明**                                                     | **字段类型** | **是否必须** | **默认值** |
+| ---------- | ------------------------------------------------------------ | ------------ | ------------ | ---------- |
+| sql        | 查询的 sql,可以使用前面 sosurces 和 transformations 中的注册表名 | String       | 是           | -          |
+
+**样例**
+
+```JSON
+{
+    "name": "sql",
+    "config": {
+        "resultTable": "spark_transform_table_00001",
+        "sql": "select * from ods.ods_test_table as a join spark_source_table_00001 as b on a.vin=b.vin",
+        "cache": true
+    }
+}
+```
+
+#### 5.3.3 Sink 插件配置
+
+可以把结果写入到文件或者表,**可以使用当前配置之前注册的所有临时表**
+
+**公共变量**
+
+| **字段名**                | **说明**                                                     | **字段类型**        | **是否必须** | **默认值**                                                   |
+| ------------------------- | ------------------------------------------------------------ | ------------------- | ------------ | ------------------------------------------------------------ |
+| sourceTable / sourceQuery | soruce / transform 中的结果表名或者查询的sql语句 作为结果输出         | String              | 否           | sourceTable 和 sourceQuery 必须有一个不为空 sourceQuery 优先级更高 |
+| options                   | 参考 [spark 官方文档](https://spark.apache.org/docs/latest/sql-data-sources.html) | Map<String, String> | 否           |                                                              |
+| variables                 | 变量替换,类似 `dt="${day}"`                                   | Map<String, String> | 否           | {    "dt": "${day}",     "hour": "${hour}", }                |
+
+##### 5.3.3.1 hive
+
+**配置字段**
+
+| **字段名**     | **说明**                                                     | **字段类型** | **是否必须** | **默认值** |
+| -------------- | ------------------------------------------------------------ | ------------ | ------------ | ---------- |
+| targetDatabase | 待写入数据的表所在的数据库                                   | String       | 是           | -          |
+| targetTable    | 待写入数据的表                                               | String       | 是           | -          |
+| saveMode       | 写入模式,参考 spark,默认为 `overwrite`                       | String       | 是           | overwrite    |
+| strongCheck    | 强校验,字段名,字段顺序,字段类型必须一致                   | Boolean      | 否           | true       |
+| writeAsFile    | 按文件方式写入,可以提高效率,此时 `variables` 中必须包含所有的分区变量 | Boolean      | 否           | false      |
+| numPartitions  | 分区个数,`Dataset.repartition`                                | Integer      | 否           | 10         |
+
+**样例**
+
+```JSON
+{
+    "name": "hive",
+    "config": {
+        "sourceTable": "spark_transform_table_00001",
+        "targetTable": "dw.result_table",
+        "saveMode": "append",
+        "options": {
+            "key": "value"
+        }
+    }
+}
+```
+
+##### 5.3.3.2 jdbc
+
+**配置字段**
+
+| **字段名**     | **说明**                   | **字段类型** | **是否必须** | **默认值** |
+| -------------- |--------------------------| ------------ | ------------ | ---------- |
+| url            | jdbc url               | String       | 是           | -          |
+| driver         | 驱动类(完全限定名)               | String       | 是           | -          |
+| user           | 用户名                      | String       | 是           | -          |
+| password       | 密码                       | String       | 是           | -          |
+| targetDatabase | 待写入数据的表所在的数据库            | String       | 否           | -          |
+| targetTable    | 待写入数据的表                  | String       | 是           | -          |
+| preQueries     | 写入前执行的sql语句              | String[]     | 否           | -          |
+| numPartitions  | 分区个数,`Dataset.repartition` | Integer      | 否           | 10         |
+
+**样例**
+
+```JSON
+{
+    "name": "jdbc",
+    "config": {
+        "sourceTable": "spark_transform_table_00001",
+        "database": "mysql_test_db",
+        "targetTable": "test_001",
+        "preQueries": ["delete from test_001 where dt='${exec_date}'"],
+        "options": {
+            "key": "value"
+        }
+    }
+}
+```
+
+##### 5.3.3.3 managed_jdbc
+
+linkis 中配置的 jdbc 数据源,会从 linkis 中获取数据源连接信息,并转为 jdbc 执行
+
+**配置字段**
+
+| **字段名**          | **说明**                   | **字段类型** | **是否必须** | **默认值** |
+|------------------|--------------------------| ------------ | ------------ | ---------- |
+| targetDatasource | Linkis 中配置的数据源名称           | String       | 否           | -          |
+| targetDatabase   | 待写入数据的表所在的数据库            | String       | 否           | -          |
+| targetTable      | 待写入数据的表                  | String       | 是           | -          |
+| preQueries       | 写入前执行的sql语句              | String[]     | 否           | -          |
+| numPartitions    | 分区个数,`Dataset.repartition` | Integer      | 否           | 10         |
+
+**样例**
+
+```JSON
+{
+    "name": "jdbc",
+    "config": {
+        "targetDatasource": "spark_transform_table_00001",
+        "targetDatabase": "mysql_test_db",
+        "targetTable": "test_001",
+        "preQueries": ["delete from test_001 where dt='${exec_date}'"],
+        "options": {
+            "key": "value"
+        }
+    }
+}
+```
+
+##### 5.3.3.4 file
+
+**配置字段**
+
+| **字段名**  | **说明**                               | **字段类型** | **是否必须** | **默认值** |
+| ----------- | -------------------------------------- | ------------ | ------------ | ---------- |
+| path        | 文件路径,默认为 `hdfs`                  | String       | 是           | -          |
+| serializer  | 文件格式,默认为 `parquet`               | String       | 是           | `parquet`    |
+| partitionBy |                                        | String[]     | 否           |            |
+| saveMode    | 写入模式,参考 spark,默认为 `overwrite` | String       | 否           |   `overwrite`         |
+
+**样例**
+
+```JSON
+{
+    "name": "file",
+    "config": {
+        "sourceTable": "spark_transform_table_00001",
+        "path": "hdfs:///data/tmp/test_json/",
+        "serializer": "json", 
+        "variables": {
+            "key": "value"
+        },
+        "options": {
+            "key": "value"
+        }
+    }
+}
+```
+
+### 5.4 使用样例
+
+1. jdbc读取,写入hive表
+
+```json
+{
+    "sources": [
+        {
+            "name": "jdbc",
+            "config": {
+                "resultTable": "spark_source_0001",
+                "database": "mysql_test_db",
+                "query": "select * from test_table limit 100"
+            }
+        }
+    ],
+    "transformations": [
+    ],
+    "sinks": [
+        {
+            "name": "hive",
+            "config": {
+                "sourceTable": "spark_source_0001",
+                "targetTable": "ods.ods_test_table",
+                "saveMode": "overwrite"
+            }
+        }
+    ]
+}
+```
+
+2. hive读取,写入hive表
+
+```json
+{
+    "sources": [
+    ],
+    "transformations": [
+        {
+            "name": "sql",
+            "config": {
+                "resultTable": "spark_transform_00001",
+                "sql": "select * from ods.ods_test_table limit 100"
+            }
+        }
+    ],
+    "sinks": [
+        {
+            "name": "hive",
+            "config": {
+                "sourceTable": "spark_transform_00001",
+                "targetTable": "dw.dw_test_table",
+                "saveMode": "overwrite"
+            }
+        }
+    ]
+}
+```
+
+3. 文件读取,写入hive表
+
+```json
+{
+    "sources": [
+        {
+            "name": "file",
+            "config": {
+                "path": "hdfs:///data/tmp/test_csv/",
+                "resultTable": "spark_file_0001",
+                "serializer": "csv",
+                "columnNames": ["col1", "col2", "col3"],
+                "options": {
+                    "delimiter": ",",
+                    "header", "false"
+                }
+            }
+        }
+    ],
+    "transformations": [
+    ],
+    "sinks": [
+        {
+            "name": "hive",
+            "config": {
+                "sourceQuery": "select col1, col2 from spark_file_0001",
+                "targetTable": "ods.ods_test_table",
+                "saveMode": "overwrite",
+                "variables": {
+                }
+            }
+        }
+    ]
+}
+```
+
+4. Hive 读取,写入jdbc
+
+```json
+{
+    "sources": [
+    ],
+    "transformations": [
+    ],
+    "sinks": [
+        {
+            "name": "jdbc",
+            "config": {
+                "sourceQuery": "select * from dm.dm_result_table where dt=${exec_date}",
+                "database": "mysql_test_db",
+                "targetTable": "mysql_test_table",
+                "preQueries": ["delete from mysql_test_table where dt='${exec_date}'"],
+                "options": {
+                    "key": "value"
+                }
+            }
+        }
+    ]
+}
+```
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/user-guide/control-panel/udf-function.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/user-guide/control-panel/udf-function.md
index d9a30169bf..f239291d9c 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/user-guide/control-panel/udf-function.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/user-guide/control-panel/udf-function.md
@@ -103,6 +103,40 @@ BDAP函数:由bdap创建的给用户使用的函数,如脱敏函数等。注
 
 过期函数:也是共享函数,只不过共享者标记了它为过期,暂不影响使用
 
+**按照参数中的 ids 加载udf**
+
+| 参数名                      | 说明                   |  默认值|
+|--------------------------- |------------------------|--------|
+|`linkis.user.udf.all.load`  | 是否加载用户选中的所有 UDF | true |
+|`linkis.user.udf.custom.ids`| UDF ID 列表,用 `,` 分隔 |  -   |
+
+调用样例:
+
+```http request
+POST /api/rest_j/v1/entrance/submit
+Content-Type: application/json
+Token-Code: dss-AUTH
+Token-User: linkis
+
+{
+    "executionContent": {
+        "code": "show databases",
+        "runType": "sql"
+    },
+    "params": {
+        "configuration": {
+            "startup": {
+                "linkis.user.udf.all.load": false
+                "linkis.user.udf.custom.ids": "1,2,3"
+            }
+        }
+    },
+    "labels": {
+        "engineType": "spark-2.4.3",
+        "userCreator": "linkis-IDE"
+    }
+}
+```
 
 
 ## 4.UDF共享
diff --git a/static/Images-zh/EngineUsage/data_calc.svg b/static/Images-zh/EngineUsage/data_calc.svg
new file mode 100644
index 0000000000..7ff6ec4a3e
--- /dev/null
+++ b/static/Images-zh/EngineUsage/data_calc.svg
@@ -0,0 +1,401 @@
+<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="721px" height="761px" viewBox="-0.5 -0.5 721 761" content="&lt;mxfile&gt;&lt;diagram id=&quot;o8BBlv_4LUzxIC4LRlzq&quot; name=&quot;Page-1&quot;&gt;7Vtbl6I4EP41PK4H5CI8itrTO6dne3acs/u4J0JEppE4IY72/vpNIFEgUdEG+7L6IlQgl/qqvqpUVDNHy+0nDFaLLyiEidbXw61mjrV+39Atm34xyXMhcSyjEEQ4DvlDe8E0/heKN7l0HYcwqzxIEEpIvKoKA5SmMCAVGcAYbaqPzVFSHXUFIigJpgFIZOnfcUgWhdS19b38HsbRQoxs6LxlCcTDXJ [...]
+    <defs/>
+    <g>
+        <rect x="0" y="180" width="560" height="80" rx="12" ry="12" fill="#f8cecc" stroke="#b85450" pointer-events="all"/>
+        <rect x="0" y="340" width="560" height="80" rx="12" ry="12" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/>
+        <path d="M 240.63 282.24 L 276.18 282.24 L 276.18 259.38 L 299.38 299.38 L 276.18 339.38 L 276.18 316.52 L 240.63 316.52 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" transform="rotate(90,270.01,299.38)" pointer-events="all"/>
+        <rect x="0" y="500" width="560" height="80" rx="12" ry="12" fill="#fff2cc" stroke="#d6b656" pointer-events="all"/>
+        <rect x="0" y="200" width="90" height="40" fill="none" stroke="none" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 220px; margin-left: 1px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                Source
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="45" y="227" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    Source
+                </text>
+            </switch>
+        </g>
+        <rect x="0" y="360" width="120" height="40" fill="none" stroke="none" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 380px; margin-left: 1px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                Transform
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="60" y="387" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    Transform
+                </text>
+            </switch>
+        </g>
+        <rect x="0" y="520" width="60" height="40" fill="none" stroke="none" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 540px; margin-left: 1px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                Sink
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="30" y="547" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    Sink
+                </text>
+            </switch>
+        </g>
+        <rect x="140" y="200" width="60" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 220px; margin-left: 141px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                jdbc
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="170" y="227" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    jdbc
+                </text>
+            </switch>
+        </g>
+        <rect x="400" y="200" width="60" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 220px; margin-left: 401px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                file
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="430" y="227" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    file
+                </text>
+            </switch>
+        </g>
+        <rect x="230" y="360" width="80" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 380px; margin-left: 231px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                SQL
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="270" y="387" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    SQL
+                </text>
+            </switch>
+        </g>
+        <path d="M 143.33 140 L 161.32 193.96" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 162.98 198.94 L 157.45 193.41 L 161.32 193.96 L 164.09 191.19 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <path d="M 447.14 140 L 435.62 193.77" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 434.52 198.91 L 432.56 191.33 L 435.62 193.77 L 439.41 192.8 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <path d="M 241.25 442.86 L 276.04 442.86 L 276.04 420 L 298.75 460 L 276.04 500 L 276.04 477.14 L 241.25 477.14 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" transform="rotate(90,270,460)" pointer-events="all"/>
+        <path d="M 402.86 560 L 410.53 613.7" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 411.27 618.89 L 406.82 612.46 L 410.53 613.7 L 413.75 611.47 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <rect x="360" y="520" width="80" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 540px; margin-left: 361px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                file
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="400" y="547" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    file
+                </text>
+            </switch>
+        </g>
+        <path d="M 520 520 L 615.5 424.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 619.21 420.79 L 616.73 428.22 L 615.5 424.5 L 611.78 423.27 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <rect x="460" y="520" width="80" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 540px; margin-left: 461px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                hive
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="500" y="545" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">
+                    hive
+                </text>
+            </switch>
+        </g>
+        <rect x="0" y="620" width="160" height="140" rx="8.4" ry="8.4" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 690px; margin-left: 1px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                <span style="">
+                                    支持JDBC的数据库
+                                    <br/>
+                                    MySQL
+                                    <br/>
+                                    PostgreSQL
+                                    <br/>
+                                    Oracle
+                                    <br/>
+                                    SqlServer
+                                    <br/>
+                                    ...
+                                    <br/>
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="80" y="695" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">
+                    支持JDBC的数据库...
+                </text>
+            </switch>
+        </g>
+        <path d="M 123.33 560 L 105.35 613.96" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 103.69 618.94 L 102.58 611.19 L 105.35 613.96 L 109.22 613.41 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <rect x="100" y="520" width="60" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 540px; margin-left: 101px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                jdbc
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="130" y="547" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    jdbc
+                </text>
+            </switch>
+        </g>
+        <rect x="360" y="620" width="120" height="120" rx="7.2" ry="7.2" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 680px; margin-left: 361px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                <span style="">
+                                    文件系统
+                                    <br/>
+                                    HDFS
+                                    <br/>
+                                    JFS
+                                    <br/>
+                                    BOS
+                                    <br/>
+                                    ...
+                                    <br/>
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="420" y="685" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">
+                    文件系统HDFS...
+                </text>
+            </switch>
+        </g>
+        <rect x="40" y="0" width="160" height="140" rx="8.4" ry="8.4" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 70px; margin-left: 41px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                <span style="">
+                                    支持JDBC的数据库
+                                    <br/>
+                                    MySQL
+                                    <br/>
+                                    PostgreSQL
+                                    <br/>
+                                    Oracle
+                                    <br/>
+                                    SqlServer
+                                    <br/>
+                                    ...
+                                    <br/>
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="120" y="75" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">
+                    支持JDBC的数据库...
+                </text>
+            </switch>
+        </g>
+        <rect x="400" y="20" width="120" height="120" rx="7.2" ry="7.2" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 80px; margin-left: 401px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                <span style="">
+                                    文件系统
+                                    <br/>
+                                    HDFS
+                                    <br/>
+                                    JFS
+                                    <br/>
+                                    BOS
+                                    <br/>
+                                    ...
+                                    <br/>
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="460" y="85" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">
+                    文件系统HDFS...
+                </text>
+            </switch>
+        </g>
+        <rect x="180" y="520" width="160" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 540px; margin-left: 181px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                managed_jdbc
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="260" y="547" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    managed_jdbc
+                </text>
+            </switch>
+        </g>
+        <path d="M 260 560 L 260 613.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 260 618.88 L 256.5 611.88 L 260 613.63 L 263.5 611.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <rect x="180" y="620" width="160" height="60" rx="3.6" ry="3.6" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 650px; margin-left: 181px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                <span style="">
+                                    Linkis 中配置的
+                                    <br/>
+                                    支持jdbc的数据源
+                                    <br/>
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="260" y="655" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">
+                    Linkis 中配置的...
+                </text>
+            </switch>
+        </g>
+        <path d="M 300 140 L 300 160 Q 300 170 300 180 L 300 193.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 300 198.88 L 296.5 191.88 L 300 193.63 L 303.5 191.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <rect x="220" y="80" width="160" height="60" rx="3.6" ry="3.6" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 110px; margin-left: 221px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                <span style="">
+                                    Linkis 中配置的
+                                    <br/>
+                                    支持jdbc的数据源
+                                    <br/>
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="300" y="115" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">
+                    Linkis 中配置的...
+                </text>
+            </switch>
+        </g>
+        <rect x="220" y="200" width="160" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 220px; margin-left: 221px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                managed_jdbc
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="300" y="227" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    managed_jdbc
+                </text>
+            </switch>
+        </g>
+        <path d="M 600 380 L 316.37 380" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 311.12 380 L 318.12 376.5 L 316.37 380 L 318.12 383.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <path d="M 600 355 C 600 346.72 626.86 340 660 340 C 675.91 340 691.17 341.58 702.43 344.39 C 713.68 347.21 720 351.02 720 355 L 720 405 C 720 413.28 693.14 420 660 420 C 626.86 420 600 413.28 600 405 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <path d="M 720 355 C 720 363.28 693.14 370 660 370 C 626.86 370 600 363.28 600 355" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 393px; margin-left: 601px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                <span style="font-size: 18px;">
+                                    HIVE
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="660" y="396" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+                    HIVE
+                </text>
+            </switch>
+        </g>
+    </g>
+    <switch>
+        <g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
+        <a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
+            <text text-anchor="middle" font-size="10px" x="50%" y="100%">
+                Text is not SVG - cannot display
+            </text>
+        </a>
+    </switch>
+</svg>
\ No newline at end of file
diff --git a/static/Images/EngineUsage/data_calc.svg b/static/Images/EngineUsage/data_calc.svg
new file mode 100644
index 0000000000..3ed0864ea9
--- /dev/null
+++ b/static/Images/EngineUsage/data_calc.svg
@@ -0,0 +1,397 @@
+<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="781px" height="801px" viewBox="-0.5 -0.5 781 801" content="&lt;mxfile&gt;&lt;diagram id=&quot;o8BBlv_4LUzxIC4LRlzq&quot; name=&quot;Page-1&quot;&gt;7Vtbd+I2EP41nNM+hGPjS8xjrpvuyXa3S0/72CNs+bKxLVYWAfrrK9kS2JYA4yCWTclLYGTd5pv5ZjQyA+suW37AYBZ/QgFMByMjWA6s+8FoZBq2Q/8xyaqSuLZZCSKcBPyhjWCS/AtFTy6dJwEsGg8ShFKSzJpCH+U59ElDBjBGi+ZjIUqbs85ABCXBxAepLP07CUhcST3H2MifYBLFYmbT4C0ZEA [...]
+    <defs/>
+    <g>
+        <rect x="60" y="200" width="560" height="80" rx="12" ry="12" fill="#f8cecc" stroke="#b85450" pointer-events="all"/>
+        <rect x="60" y="360" width="560" height="80" rx="12" ry="12" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/>
+        <path d="M 300.63 302.24 L 336.18 302.24 L 336.18 279.38 L 359.38 319.38 L 336.18 359.38 L 336.18 336.52 L 300.63 336.52 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" transform="rotate(90,330.01,319.38)" pointer-events="all"/>
+        <rect x="60" y="520" width="560" height="80" rx="12" ry="12" fill="#fff2cc" stroke="#d6b656" pointer-events="all"/>
+        <rect x="60" y="220" width="90" height="40" fill="none" stroke="none" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 240px; margin-left: 61px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                Source
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="105" y="247" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    Source
+                </text>
+            </switch>
+        </g>
+        <rect x="60" y="380" width="120" height="40" fill="none" stroke="none" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 400px; margin-left: 61px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                Transform
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="120" y="407" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    Transform
+                </text>
+            </switch>
+        </g>
+        <rect x="60" y="540" width="60" height="40" fill="none" stroke="none" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 560px; margin-left: 61px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                Sink
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="90" y="567" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    Sink
+                </text>
+            </switch>
+        </g>
+        <rect x="200" y="220" width="60" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 240px; margin-left: 201px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                jdbc
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="230" y="247" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    jdbc
+                </text>
+            </switch>
+        </g>
+        <rect x="460" y="220" width="60" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 240px; margin-left: 461px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                file
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="490" y="247" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    file
+                </text>
+            </switch>
+        </g>
+        <rect x="290" y="380" width="80" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 400px; margin-left: 291px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                SQL
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="330" y="407" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    SQL
+                </text>
+            </switch>
+        </g>
+        <path d="M 180 160 L 214.12 214.6" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 216.91 219.05 L 210.23 214.97 L 214.12 214.6 L 216.17 211.26 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <path d="M 552.86 160 L 509.65 214.99" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 506.41 219.12 L 507.98 211.45 L 509.65 214.99 L 513.48 215.78 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <path d="M 301.25 462.86 L 336.04 462.86 L 336.04 440 L 358.75 480 L 336.04 520 L 336.04 497.14 L 301.25 497.14 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" transform="rotate(90,330,480)" pointer-events="all"/>
+        <path d="M 660 400 L 376.37 400" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 371.12 400 L 378.12 396.5 L 376.37 400 L 378.12 403.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <path d="M 480 580 L 535.5 635.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 539.21 639.21 L 531.78 636.73 L 535.5 635.5 L 536.73 631.78 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <rect x="420" y="540" width="80" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 560px; margin-left: 421px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                file
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="460" y="567" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    file
+                </text>
+            </switch>
+        </g>
+        <path d="M 580 540 L 675.5 444.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 679.21 440.79 L 676.73 448.22 L 675.5 444.5 L 671.78 443.27 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <rect x="520" y="540" width="80" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 560px; margin-left: 521px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                hive
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="560" y="565" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">
+                    hive
+                </text>
+            </switch>
+        </g>
+        <rect x="0" y="640" width="260" height="160" rx="9.6" ry="9.6" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 720px; margin-left: 1px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                Databases that support JDBC
+                                <br style="border-color: var(--border-color);"/>
+                                MySQL
+                                <br style="border-color: var(--border-color);"/>
+                                PostgreSQL
+                                <br style="border-color: var(--border-color);"/>
+                                Oracle
+                                <br style="border-color: var(--border-color);"/>
+                                SqlServer
+                                <br style="border-color: var(--border-color);"/>
+                                ...
+                                <span style="">
+                                    <br/>
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="130" y="725" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">
+                    Databases that support JDBC...
+                </text>
+            </switch>
+        </g>
+        <path d="M 182.5 580 L 162.24 634.04" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 160.39 638.95 L 159.57 631.17 L 162.24 634.04 L 166.13 633.63 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <rect x="160" y="540" width="60" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 560px; margin-left: 161px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                jdbc
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="190" y="567" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    jdbc
+                </text>
+            </switch>
+        </g>
+        <rect x="540" y="640" width="120" height="120" rx="7.2" ry="7.2" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 700px; margin-left: 541px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                <span style="">
+                                    FileSystem
+                                    <br/>
+                                    HDFS
+                                    <br/>
+                                    JFS
+                                    <br/>
+                                    BOS
+                                    <br/>
+                                    ...
+                                    <br/>
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="600" y="705" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">
+                    FileSystem...
+                </text>
+            </switch>
+        </g>
+        <rect x="0" y="0" width="260" height="160" rx="9.6" ry="9.6" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 80px; margin-left: 1px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                <span style="">
+                                    Databases that support JDBC
+                                    <br/>
+                                    MySQL
+                                    <br/>
+                                    PostgreSQL
+                                    <br/>
+                                    Oracle
+                                    <br/>
+                                    SqlServer
+                                    <br/>
+                                    ...
+                                    <br/>
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="130" y="85" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">
+                    Databases that support JDBC...
+                </text>
+            </switch>
+        </g>
+        <rect x="540" y="40" width="120" height="120" rx="7.2" ry="7.2" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 100px; margin-left: 541px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                <span style="">
+                                    FileSystem
+                                    <br/>
+                                    HDFS
+                                    <br/>
+                                    JFS
+                                    <br/>
+                                    BOS
+                                    <br/>
+                                    ...
+                                    <br/>
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="600" y="105" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">
+                    FileSystem...
+                </text>
+            </switch>
+        </g>
+        <rect x="240" y="540" width="160" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 560px; margin-left: 241px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                managed_jdbc
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="320" y="567" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    managed_jdbc
+                </text>
+            </switch>
+        </g>
+        <path d="M 333.33 580 L 369.8 634.7" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 372.71 639.07 L 365.92 635.19 L 369.8 634.7 L 371.74 631.3 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <rect x="280" y="640" width="240" height="80" rx="4.8" ry="4.8" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 680px; margin-left: 281px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                DataSources configured in Linkis that support jdbc
+                                <span style="">
+                                    <br/>
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="400" y="685" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">
+                    DataSources configured in L...
+                </text>
+            </switch>
+        </g>
+        <path d="M 360 160 L 360 180 Q 360 190 360 200 L 360 213.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+        <path d="M 360 218.88 L 356.5 211.88 L 360 213.63 L 363.5 211.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <rect x="280" y="80" width="240" height="80" rx="4.8" ry="4.8" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 120px; margin-left: 281px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                DataSources configured in Linkis that support jdbc
+                                <span style="">
+                                    <br/>
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="400" y="125" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">
+                    DataSources configured in L...
+                </text>
+            </switch>
+        </g>
+        <rect x="280" y="220" width="160" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 240px; margin-left: 281px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 23px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                managed_jdbc
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="360" y="247" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="23px" text-anchor="middle">
+                    managed_jdbc
+                </text>
+            </switch>
+        </g>
+        <path d="M 660 375 C 660 366.72 686.86 360 720 360 C 735.91 360 751.17 361.58 762.43 364.39 C 773.68 367.21 780 371.02 780 375 L 780 425 C 780 433.28 753.14 440 720 440 C 686.86 440 660 433.28 660 425 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <path d="M 780 375 C 780 383.28 753.14 390 720 390 C 686.86 390 660 383.28 660 375" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+        <g transform="translate(-0.5 -0.5)">
+            <switch>
+                <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+                    <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 413px; margin-left: 661px;">
+                        <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+                            <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+                                <span style="font-size: 18px;">
+                                    HIVE
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                </foreignObject>
+                <text x="720" y="416" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+                    HIVE
+                </text>
+            </switch>
+        </g>
+    </g>
+    <switch>
+        <g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
+        <a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
+            <text text-anchor="middle" font-size="10px" x="50%" y="100%">
+                Text is not SVG - cannot display
+            </text>
+        </a>
+    </switch>
+</svg>
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@linkis.apache.org
For additional commands, e-mail: commits-help@linkis.apache.org