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="<mxfile><diagram id="o8BBlv_4LUzxIC4LRlzq" name="Page-1">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="<mxfile><diagram id="o8BBlv_4LUzxIC4LRlzq" name="Page-1">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