---
url: /v6.2/engine-adv-config.md
---
# 引擎高级配置

## 引擎说明

衡石可以配置一个内置引擎，用于对数据集进行加速，适用于客户没有计算能力较强的查询引擎的场景。在数据集管理页面打开开关就能获得加速效果。衡石安装包包含了 Postgresql 引擎、GreenplumDB 引擎、Doris 引擎。
客户还可以自己提供其他类型的引擎，包括 Aws Athena，Aws Redshift，阿里云 Hologres，自建 Postgresql，自建 GreenplumDB，自建 MySQL，自建达梦数据库等。另外，如果选择使用衡石安装的
Postgresql 或者 GreenplumDB 作为引擎，还同时支持配置这个服务作为数仓，给数据集成作为输出节点使用。
默认衡石使用 GreenplumDB 作为内置的引擎和数仓，支持数据集导入引擎，同时支持作为数据集成的输出目的地。这种情况下不需要做高级配置。

#### 引擎表名和表清理机制

为了避免读写冲突，全量导入的表名是随机生成的，表名中有创建时间。再次全量导入，则生成新的表，旧表不再使用。复制数据集时，两个数据集会重用一个表。删除数据集的时候，不删除表。这里引入了一个
垃圾回收的机制，清理任务定期扫描引擎表列表，发现没有被数据集引用的表，就删除。

#### 引擎相关配置

引擎的配置需要在启动前在安装跟目录下的 conf/hengshi-sense-env.sh 文件中配置，需要在变量前面加上 export 关键字。相关字段说明如下：

| 字段                                      | 类型     |对应 java 字段                      | 描述                                 |
|------------------------------------------|----------|--------------------------------|-------------------------------------|
| HS_ENGINE_TYPE                           | STRING   |ENGINE_TYPE                     |引擎类型，参考[引擎类型说明](#引擎类型说明) |
| HS_ENGINE_IF_EXTERNAL                        | BOOL     |无                              |是否为衡石自带的引擎,默认为 false; 如果是衡石自带引擎,则可以在页面开放数仓, 如果不是衡石自带引擎,而是客户自己的引擎,则在页面不能开放数仓 |
| SYSTEM_ENGINE_URL                        | STRING   |SYSTEM_ENGINE_URL               |设置用户自建的引擎的 jdbc url 作为内置引擎    |
| INTERNAL_ENGINE_DATASET_PATH             | STRING   |INTERNAL_ENGINE_DATASET_PATH    |数据集导入路径，默认是 public，多级路径用英文逗号分隔|
| INTERNAL_ENGINE_TMP_PATH                 | STRING   |INTERNAL_ENGINE_TMP_PATH        |引擎临时路径，主要用于数据集成文件上传，默认是 hengshi_internal_engine_tmp_schema,多级路径用英文逗号分隔|
| INTERNAL_ENGINE_OUTPUT_PATH              | STRING   |INTERNAL_ENGINE_OUTPUT_PATH     |引擎公共数据路径，用于提供衡石的共用数据，比如万年历等。默认是 common,多级路径用英文逗号分隔|
| UPDATE_ENGINE_COMMON_DATA                | BOOL     |UPDATE_ENGINE_COMMON_DATA       |是否更新公共数据，默认是 false，如果存在不更新，不存在才导入|
| OPEN_DW_USER                             | STRING   |OPEN_DW_USER                    |衡石数仓用户名                           |
| OPEN_DW_DB                               | STRING   |OPEN_DW_DB                      |衡石数仓所在 DB                           |
| OPEN_DW_TYPE                             | STRING   |OPEN_DW_TYPE                    |衡石数仓类型，可以为 postgresql 或者 greenplum，默认是 greenplum|
| GREENPLUM_QUERY_USR                      | STRING   |ENGINE_QUERY_USER               |衡石提供的 GreenplumDB 的查询用户名         |
| GREENPLUM_QUERY_PWD                      | STRING   |ENGINE_QUERY_PASSWORD           |衡石提供的 GreenplumDB 的查询用户密码        |
| QUERY_QUEUE                              | STRING   |ENGINE_QUERY_QUEUE              |衡石提供的 GreenplumDB 的查询用户所属的资源队列|
| GREENPLUM_ETL_USR                        | STRING   |ENGINE_ETL_USER                 |衡石提供的 GreenplumDB 的 ETL 用户名          |
| GREENPLUM_ETL_PWD                        | STRING   |ENGINE_ETL_PASSWORD             |衡石提供的 GreenplumDB 的 ETL 用户密码        |
| ETL_QUEUE                                | STRING   |ENGINE_ETL_QUEUE                |衡石提供的 GreenplumDB 的 ETL 用户所属的资源队列|
| ENGINE_CONN_POOL_SIZE                    | INTEGER  |ENGINE_CONN_POOL_SIZE           |引擎连接池大小，默认是10                  |
| INTERNAL_ENGINE_CONNECTION_TITLE         | STRING   |INTERNAL_ENGINE_CONNECTION_TITLE|引擎连接显示的标题，默认是“引擎连接”        |
| DATASET_CACHE_MAX_SIZE_MB                | INTEGER  |DATASET_CACHE_MAX_SIZE_MB       |导入引擎的数据集的大小限制，单位的 MB，默认50000|
| DATASET_CACHE_IMPORT_MAX_TIME            | INTEGER  |DATASET_CACHE_IMPORT_MAX_TIME   |导入引擎过程最大时间，单位是小时，默认是3，这个影响引擎表的回收判断，如果存在误判可以改大一些，后果是没有使用的表清理会延迟一些|
| ENGINE_UPDATE_DEFAULT_RESOURCE_GROUP_RATIO| BOOL    |ENGINE_UPDATE_DEFAULT_RESOURCE_GROUP_RATIO |是否需要更新默认资源组(default_group)的比例，默认是 true |
| ENGINE_DEFAULT_RESOURCE_GROUP_RATIO      | INTEGER  |ENGINE_DEFAULT_RESOURCE_GROUP_RATIO        |默认资源组(default_group)的比例，默认是10  |
| ENGINE_RESOURCE_GROUP_PREFIX             | STRING   |ENGINE_RESOURCE_GROUP_PREFIX               |衡石创建的资源组的前缀，多个衡石服务共享一套引擎可以用不同前缀，默认是 hengshi       |
| ENGINE_PLATFORM_RESOURCE_GROUP_RATIO     | INTEGER  |ENGINE_PLATFORM_RESOURCE_GROUP_RATIO       |平台方资源组的总比例，默认是30              |
| ENGINE_TENANT_RESOURCE_GROUP_RATIO       | INTEGER  |ENGINE_TENANT_RESOURCE_GROUP_RATIO         |租户资源组的总比例，默认是40                |
| TOTAL_TENANT_ENGINE_RESOURCE_UNIT        | INTEGER  |TOTAL_TENANT_ENGINE_RESOURCE_UNIT          |默认租户资源的总单元数，默认是100           |

#### 配置内部或外部引擎

|HS_ENGINE_IF_EXTERNAL| 含义|
|-----------------|-------------------------|
| true            | 配置为客户自由引擎      |
| false           | 配置为衡石内嵌引擎      |

| 类型值           | 意义                     |
|-----------------|-------------------------|
|NONE             |不使用引擎                 |
|GREENPLUM        |使用 GreenplumDB(默认)   |
|POSTGRESQL       |使用 Postgresql            |
|ATHENA           |使用 Aws Athena            |
|CLIENT_GREENPLUM |当是客户自有 GreenplumDB 时,配置此变量|
|REDSHIFT         |使用 Aws Redshift           |
|MYSQL            |使用 MySQL                  |
|DAMENG           |使用达梦数据库              |
|HOLOGRES         |使用阿里云的 Hologres        |
|OTHER            |其他衡石已经支持写入操作的数据库，通过 jdbc:协议:// 的协议部分判断具体连接类型。例如jdbc:starRocks://        |

#### 样例1：使用衡石提供的 GreenplumDB 作为引擎，并使用它作为数仓

* shell config 文件不用配置，这个是提供数仓的版本的脚本默认配置的，不需要做任何设置

* java config 文件

```shell
ENGINE_TYPE=greenplum
ENGINE_DB=jdbc:postgresql://192.168.211.4:15432/postgres?user=hengshi&password=xxx&charSet=UTF-8
ENGINE_QUERY_USER=hengshi_query
ENGINE_QUERY_PASSWORD=xxx
ENGINE_QUERY_QUEUE=hengshi_query_queue
ENGINE_ETL_USER=hengshi_etl
ENGINE_ETL_PASSWORD=xxx
ENGINE_ETL_QUEUE=hengshi_etl_queue
OPEN_DW_TYPE=greenplum
OPEN_DW_USER=dwguest
OPEN_DW_DB=hengshi_hs_dw
```

#### 样例2：使用衡石提供的 Postgresql 作为引擎，并使用它作为数仓

* shell config 文件, postgresql 数仓 url 也会自动配置, 只需修改 HS_ENGINE_TYPE 类型

```shell
HS_ENGINE_TYPE="postgresql"
export OPEN_DW_TYPE="postgresql"
export OPEN_DW_USER="dwguest"
export OPEN_DW_DB="hengshi_hs_dw"
```

* java config 文件

```shell
ENGINE_TYPE=postgresql
ENGINE_DB=jdbc:postgresql://192.168.211.4:45433/engine?user=hengshi&password=xxx&charSet=UTF-8
OPEN_DW_TYPE=postgresql
OPEN_DW_USER=dwguest
OPEN_DW_DB=hengshi_hs_dw
```

#### 样例3：使用外部的 Postgresql 作为引擎

* shell config 文件

```shell
HS_ENGINE_TYPE="postgresql"
export SYSTEM_ENGINE_URL="jdbc:postgresql://192.168.211.4:45433/engine?user=hengshi&password=xxx&charSet=UTF-8"
export INTERNAL_ENGINE_DATASET_PATH="public"
export INTERNAL_ENGINE_TMP_PATH="hengshi_internal_engine_tmp_schema"
export INTERNAL_ENGINE_OUTPUT_PATH="common"

export HS_ENGINE_IF_EXTERNAL=true # 声明使用外部引擎替代衡石引擎
```

* java config 文件

```shell
ENGINE_TYPE=postgresql
SYSTEM_ENGINE_URL=jdbc:postgresql://192.168.211.4:45433/engine?user=hengshi&password=xxx&charSet=UTF-8
INTERNAL_ENGINE_DATASET_PATH=public
INTERNAL_ENGINE_TMP_PATH=hengshi_internal_engine_tmp_schema
INTERNAL_ENGINE_OUTPUT_PATH=common
```

#### 样例4：使用外部的 GreenplumDB 作为引擎

* shell config 文件

```shell
HS_ENGINE_TYPE="client_greenplum"
export SYSTEM_ENGINE_URL="jdbc:postgresql://192.168.211.4:45433/engine?user=hengshi&password=xxx&charSet=UTF-8"
export INTERNAL_ENGINE_DATASET_PATH="public"
export INTERNAL_ENGINE_TMP_PATH="hengshi_internal_engine_tmp_schema"
export INTERNAL_ENGINE_OUTPUT_PATH="common"

export HS_ENGINE_IF_EXTERNAL=true # 声明使用外部引擎替代衡石引擎
```

* java config 文件

```
ENGINE_TYPE=client_greenplum
SYSTEM_ENGINE_URL=jdbc:postgresql://192.168.211.4:45433/engine?user=hengshi&password=xxx&charSet=UTF-8
INTERNAL_ENGINE_DATASET_PATH=public
INTERNAL_ENGINE_TMP_PATH=hengshi_internal_engine_tmp_schema
INTERNAL_ENGINE_OUTPUT_PATH=common
```

#### 样例5：使用 Aws Athena 作为引擎

* shell config 文件

```shell
HS_ENGINE_TYPE="athena"
export SYSTEM_ENGINE_URL="jdbc:awsathena://AwsRegion=cn-north-1;User=user;Password=pass;Catalog=AwsDataCatalog;Schema=default;S3OutputLocation=s3://wss-athena-result/result/;S3DataStorageLocation=s3://wss-athena/0-storage/"
export INTERNAL_ENGINE_DATASET_PATH="AwsDataCatalog,public"
export INTERNAL_ENGINE_TMP_PATH="AwsDataCatalog,hengshi_internal_engine_tmp_schema"
export INTERNAL_ENGINE_OUTPUT_PATH="AwsDataCatalog,common"

export HS_ENGINE_IF_EXTERNAL=true # 声明使用外部引擎替代衡石引擎
```

* java config 文件

```shell
ENGINE_TYPE=athena
SYSTEM_ENGINE_URL=jdbc:awsathena://AwsRegion=cn-north-1;User=user;Password=pass;Catalog=AwsDataCatalog;Schema=default;S3OutputLocation=s3://wss-athena-result/result/;S3DataStorageLocation=s3://wss-athena/0-storage/
INTERNAL_ENGINE_DATASET_PATH=AwsDataCatalog,public
INTERNAL_ENGINE_TMP_PATH=AwsDataCatalog,hengshi_internal_engine_tmp_schema
INTERNAL_ENGINE_OUTPUT_PATH=AwsDataCatalog,common
```

#### 样例6：使用 Aws Redshift 作为引擎

* shell config 文件

```shell
HS_ENGINE_TYPE="redshift"
export SYSTEM_ENGINE_URL="jdbc:redshift://test.ccveezprunlx.cn-north-1.redshift.amazonaws.com.cn:5439/engine?user=user&password=pass"
export INTERNAL_ENGINE_DATASET_PATH="public"
export INTERNAL_ENGINE_TMP_PATH="hengshi_internal_engine_tmp_schema"
export INTERNAL_ENGINE_OUTPUT_PATH="common"

export HS_ENGINE_IF_EXTERNAL=true # 声明使用外部引擎替代衡石引擎
```

* java config 文件

```shell
ENGINE_TYPE=redshift
SYSTEM_ENGINE_URL=jdbc:redshift://test.ccveezprunlx.cn-north-1.redshift.amazonaws.com.cn:5439/engine?user=user&password=pass
INTERNAL_ENGINE_DATASET_PATH=public
INTERNAL_ENGINE_TMP_PATH=hengshi_internal_engine_tmp_schema
INTERNAL_ENGINE_OUTPUT_PATH=common
```

#### 样例7：使用 MySQL 作为引擎

* shell config 文件

```shell
HS_ENGINE_TYPE="mysql"
export SYSTEM_ENGINE_URL="jdbc:mysql://192.168.211.4:3306/public?user=root&password=Test123@"
export INTERNAL_ENGINE_DATASET_PATH="public"
export INTERNAL_ENGINE_TMP_PATH="hengshi_internal_engine_tmp_schema"
export INTERNAL_ENGINE_OUTPUT_PATH="common"

export HS_ENGINE_IF_EXTERNAL=true # 声明使用外部引擎替代衡石引擎
```

* java config 文件

```shell
ENGINE_TYPE=mysql
SYSTEM_ENGINE_URL=jdbc:mysql://192.168.211.4:3306/public?user=root&password=Test123@
INTERNAL_ENGINE_DATASET_PATH=public
INTERNAL_ENGINE_TMP_PATH=hengshi_internal_engine_tmp_schema
INTERNAL_ENGINE_OUTPUT_PATH=common
```

#### 样例8：使用 doris 作为引擎

* shell config 文件

```shell
export HS_ENGINE_TYPE="other"
export SYSTEM_ENGINE_URL="jdbc:doris://10.10.10.251:9030/public?user=hengshi&password=hengshi&feHttpPort=8030"
export INTERNAL_ENGINE_DATASET_PATH="public"
export INTERNAL_ENGINE_TMP_PATH="hengshi_internal_engine_tmp_schema"
export INTERNAL_ENGINE_OUTPUT_PATH="common"

export HS_ENGINE_IF_EXTERNAL=true # 声明使用外部引擎替代衡石引擎
```

* java config 文件

```shell
ENGINE_TYPE=other
SYSTEM_ENGINE_URL=jdbc:doris://10.10.10.251:9030/public?user=hengshi&password=hengshi&feHttpPort=8030
INTERNAL_ENGINE_DATASET_PATH=public
INTERNAL_ENGINE_TMP_PATH=hengshi_internal_engine_tmp_schema
INTERNAL_ENGINE_OUTPUT_PATH=common
```

#### 样例9：使用 clickhouse 作为引擎

* shell config 文件

```shell
export HS_ENGINE_TYPE="other"
export SYSTEM_ENGINE_URL="jdbc:clickhouse://192.168.2.250:8123/public?user=default&password=hengshipwd&cluster=hengshi_cluster"
export INTERNAL_ENGINE_DATASET_PATH="public"
export INTERNAL_ENGINE_TMP_PATH="hengshi_internal_engine_tmp_schema"
export INTERNAL_ENGINE_OUTPUT_PATH="common"

export HS_ENGINE_IF_EXTERNAL=true # 声明使用外部引擎替代衡石引擎
```

* java config 文件

```shell
ENGINE_TYPE=other
SYSTEM_ENGINE_URL=jdbc:clickhouse://192.168.2.250:8123/public?user=default&password=hengshipwd
INTERNAL_ENGINE_DATASET_PATH=public
INTERNAL_ENGINE_TMP_PATH=hengshi_internal_engine_tmp_schema
INTERNAL_ENGINE_OUTPUT_PATH=common
```

#### 样例10：使用 starRocks 作为引擎

* shell config 文件

```shell
export HS_ENGINE_TYPE="other"
export SYSTEM_ENGINE_URL="jdbc:starRocks://10.10.10.251:9030/public?user=hengshi&password=hengshi&feHttpPort=8030"
export INTERNAL_ENGINE_DATASET_PATH="public"
export INTERNAL_ENGINE_TMP_PATH="hengshi_internal_engine_tmp_schema"
export INTERNAL_ENGINE_OUTPUT_PATH="common"

export HS_ENGINE_IF_EXTERNAL=true # 声明使用外部引擎替代衡石引擎
```

* java config 文件

```shell
ENGINE_TYPE=other
SYSTEM_ENGINE_URL=jdbc:starRocks://10.10.10.251:9030/public?user=hengshi&password=hengshi&feHttpPort=8030
INTERNAL_ENGINE_DATASET_PATH=public
INTERNAL_ENGINE_TMP_PATH=hengshi_internal_engine_tmp_schema
INTERNAL_ENGINE_OUTPUT_PATH=common
```

#### 引擎字段名编码

由于衡石支持不同的数据库作为内置引擎，不同的数据库支持的字段名字符范围不一样，有些数据库可能不支持中文或者特殊字符比如`+-*/#`等。配置这些
数据库作为内置引擎，可能会碰到因为字段名包含数据库不支持的字符而导致导入引擎失败，最常见的例子是文件上传，文件的表头自由度很大，很可能包
含特殊字符。
为了解决这个问题，衡石提供字段名编码的功能，默认关闭。编码的算法是 base62，只包含 `a-zA-Z0-9` 这些字符。开启后，包含这些字符之外字符的字段名
都会被编码。要开启这个功能，方法如下：

1. 修改 metadb 的 configuration 表中 config_key 为 engine 的配置

```
update public.configuration set config_value = config_value || '{"fieldBase62Enabled": true}'::jsonb where config_key = 'engine';
```

2. 重启衡石服务

开启该功能后，对于字段名不是英文名的数据集，需要重新导入引擎。
