---
title: 在ClickHouse引擎的应用
description: "OmniMV物化视图在ClickHouse引擎共有五种应用场景，可解析SQL得到相应的视图，请根据实际情况查看相对应的使用示例。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2400/bds/kunpengbds_omniruntime_20_0417.html
sourcePath: /source/zh/kunpengboostkithistory/2400/bds/kunpengbds_omniruntime_20_0417.html
indexId: 7b4e13a967c382d278585b2496543f6177bbc2eaa9b44432c9f8556a83152b5e78
---
# 在ClickHouse引擎的应用

OmniMV物化视图在ClickHouse引擎共有五种应用场景，可解析SQL得到相应的视图，请根据实际情况查看相对应的使用示例。

OmniMV物化视图在ClickHouse引擎共有五种应用场景，使用方法如下：

场景一：从ClickHouse执行日志中获取SQL，直接解析SQL语句得到projection，解析推荐步骤不占用ClickHouse服务端资源。

分布式表场景下的配置文件：

```
database = ssb #配置目标数据库
work_path = ./clickhouse #配置OmniMV SQL文件、视图文件、模型文件等工作文件的存储路径
ck_host = 0.0.0.0 #配置ClickHouse服务IP地址
ck_port = 9000 #配置ClickHouse服务端口
cluster_name = mycluster #配置集群名称
projection_wait_time = 3600 #创建projection超时时间
is_distributed_table = True #配置ClickHouse表类型，False表示为本地表，True表示为分布式表
clickhouse_tables = lineorder_flat_all #配置目标表，多个表使用','分割，要求表必须是目标数据库中的表
query_log_table = system.query_log #提取SQL的日志表
sql_running_time_threshold = 100 #配置SQL执行时间阈值，单位：ms,低于此阈值的SQL不会被处理
query_limit_each_table = 15 #配置为每个目标表分析至多多少条SQL
projection_limit_each_table = 3 #配置每张表创建projection的数量
projection_with_conditional_functions = False #是否为包含条件的聚合函数推荐Projection
allows_materialize_projection = True #是否为新建的projection物化历史数据
```

本地表场景下的配置文件：

```
database = ssb #配置目标数据库
work_path = ./clickhouse #配置OmniMV SQL文件、视图文件、模型文件等工作文件的存储路径
ck_host = 0.0.0.0 #配置ClickHouse服务IP地址
ck_port = 9000 #配置ClickHouse服务端口
projection_wait_time = 3600 #创建projection超时时间
is_distributed_table = False #配置ClickHouse表类型，False表示为本地表，True表示为分布式表
clickhouse_tables = lineorder_flat #配置目标表，多个表使用','分割，要求表必须是目标数据库中的表
query_log_table = system.query_log #提取SQL的日志表
sql_running_time_threshold = 100 #配置SQL执行时间阈值，单位：ms,低于此阈值的SQL不会被处理
query_limit_each_table = 15 #配置为每个目标表分析至多多少条SQL
projection_limit_each_table = 3 #配置每张表创建projection的数量
projection_with_conditional_functions = False #是否为包含条件的聚合函数推荐Projection
allows_materialize_projection = True #是否为新建的projection物化历史数据
```

执行步骤：

1. 进入OmniMV物化视图安装目录。
2. 初始化数据库信息。
  1 python main.pyc clickhouse init_database

3. 从query_log中提取包含目标表查询的SQL。
  1 python main.pyc clickhouse extract_sqls

4. 解析提取的SQL，获得推荐出的projection。
  1 python main.pyc clickhouse parse_sql_text

5. 在目标表中创建推荐出来的projection。
  1 python main.pyc clickhouse create_projections


场景二：从ClickHouse执行日志中获取SQL，解析SQL语句得到projection，需要连接数据库执行压缩比查询，推荐算法使用贪心算法。解析推荐步骤占用ClickHouse服务端较多资源。

分布式表场景下的配置文件：

```
database = ssb #配置目标数据库
work_path = ./clickhouse #配置OmniMV SQL文件、视图文件、模型文件等工作文件的存储路径
ck_host = 0.0.0.0 #配置ClickHouse服务IP地址
ck_port = 9000 #配置ClickHouse服务端口
cluster_name = mycluster #配置集群名称
projection_wait_time = 3600 #创建projection超时时间
projection_compress_ratio = 0.8 #压缩比阈值，数据压缩比大于次阈值的Projection不推荐
is_distributed_table = True #配置ClickHouse表类型，False表示为本地表，True表示为分布式表
clickhouse_tables = lineorder_flat_all #配置目标表，多个表使用','分割，要求表必须是目标数据库中的表
query_log_table = system.query_log #提取SQL的日志表
sql_running_time_threshold = 100 #配置SQL执行时间阈值，单位：ms,低于此阈值的SQL不会被处理
query_limit_each_table = 15 #配置为每个目标表分析至多多少条SQL
projection_limit_each_table = 3 #配置每张表创建projection的数量
projection_with_conditional_functions = False #是否为包含条件的聚合函数推荐Projection
allows_materialize_projection = True #是否为新建的projection物化历史数据
candidate_strategy = compress_ratio #选择compress_ratio表示按照projection压缩比来排序，选择SQL，表示按照projection可以匹配SQL的数量来排序
```

本地表场景下的配置文件：

```
database = ssb #配置目标数据库
work_path = ./clickhouse #配置OmniMV SQL文件、视图文件、模型文件等工作文件的存储路径
ck_host = 0.0.0.0 #配置ClickHouse服务IP地址
ck_port = 9000 #配置ClickHouse服务端口
projection_wait_time = 3600 #创建projection超时时间
projection_compress_ratio = 0.8 #压缩比阈值，数据压缩比大于次阈值的Projection不推荐
is_distributed_table = False #配置ClickHouse表类型，False表示为本地表，True表示为分布式表
clickhouse_tables = lineorder_flat #配置目标表，多个表使用','分割，要求表必须是目标数据库中的表
query_log_table = system.query_log #提取SQL的日志表
sql_running_time_threshold = 100 #配置SQL执行时间阈值，单位：ms,低于此阈值的SQL不会被处理
query_limit_each_table = 15 #配置为每个目标表分析至多多少条SQL
projection_limit_each_table = 3 #配置每张表创建projection的数量
projection_with_conditional_functions = False #是否为包含条件的聚合函数推荐Projection
allows_materialize_projection = True #是否为新建的projection物化历史数据
candidate_strategy = compress_ratio #选择compress_ratio表示按照projection压缩比来排序，选择SQL，表示按照projection可以匹配SQL的数量来排序
```

1. 进入OmniMV物化视图安装目录。
2. 初始化数据库信息。
  1 python main.pyc clickhouse init_database

3. 从query_log中提取包含目标表查询的SQL。
  1 python main.pyc clickhouse extract_sqls

4. 解析提取的SQL，获得推荐出的projection。
  1 python main.pyc clickhouse generate_views

5. 在目标表中创建推荐出来的projection。
  1 python main.pyc clickhouse create_projections


场景三：从ClickHouse执行日志中获取SQL，解析SQL语句得到Projection，推荐算法使用AI模型，模型训练步骤占用ClickHouse服务端较多资源。

分布式表场景下的配置文件：

```
database = ssb
work_path = ./clickhouse
ck_host = 0.0.0.0
ck_port = 19000
cluster_name = mycluster
num_round = 5
projection_wait_time = 3600
projection_compress_ratio = 0.8
sql_running_time_threshold = 100
projection_limit_each_table = 5
is_distributed_table = True
clickhouse_tables = lineorder_flat_all
query_log_table = system.query_log
query_limit_each_table = 15
projection_with_conditional_functions = False
allows_materialize_projection = True
max_data_count = 20
epochs = 100
estimators = 50
max_depth = 5
learning_rate = 0.05
candidate_strategy = compress_ratio
```

本地表场景下的配置文件：

```
database = ssb
work_path = ./clickhouse
ck_host = 0.0.0.0
ck_port = 19000
num_round = 5
projection_wait_time = 3600
projection_compress_ratio = 0.8
sql_running_time_threshold = 100
projection_limit_each_table = 5
is_distributed_table = False
clickhouse_tables = lineorder_flat
query_log_table = system.query_log
query_limit_each_table = 15
projection_with_conditional_functions = False
allows_materialize_projection = True
max_data_count = 20
epochs = 100
estimators = 50
max_depth = 5
learning_rate = 0.05
candidate_strategy = compress_ratio
```

1. 进入OmniMV物化视图安装目录。
2. 初始化数据库信息。
  1 python main.pyc clickhouse init_database

3. 从query_log中提取包含目标表查询的SQL。
  1 python main.pyc clickhouse extract_sqls

4. 解析提取的SQL，获得推荐出的projection。
  1 python main.pyc clickhouse generate_views

5. 进行代价评估模型训练。
  1 python main.pyc clickhouse cost_estimation

6. 进行推荐模型训练。
  1 python main.pyc clickhouse recommend

7. 在目标表中创建模型推荐出来的projection。
  1 python main.pyc clickhouse create_projections_model


场景四：从ClickHouse执行日志中再次获取新SQL，解析SQL语句得到Projection，使用训练好的AI模型推荐Projection，解析推荐步骤不占用ClickHouse服务端资源。

分布式表场景下的配置文件：

```
database = ssb
work_path = ./clickhouse
ck_host = 0.0.0.0
ck_port = 19000
cluster_name = mycluster
projection_wait_time = 3600
sql_running_time_threshold = 100
projection_limit_each_table = 5
is_distributed_table = True
clickhouse_tables = lineorder_flat_all
query_log_table = system.query_log
query_limit_each_table = 15
projection_with_conditional_functions = False
allows_materialize_projection = True
candidate_strategy = compress_ratio
```

本地表场景下的配置文件：

```
database = ssb
work_path = ./clickhouse
ck_host = 0.0.0.0
ck_port = 19000
projection_wait_time = 3600
sql_running_time_threshold = 100
projection_limit_each_table = 5
is_distributed_table = False
clickhouse_tables = lineorder_flat
query_log_table = system.query_log
query_limit_each_table = 15
projection_with_conditional_functions = False
allows_materialize_projection = True
candidate_strategy = compress_ratio
```

1. 进入OmniMV物化视图安装目录。
2. 提取新SQL。
  1 python main.pyc clickhouse extract_sqls_incremental

3. 解析新SQL获取projection视图。
  1 python main.pyc clickhouse parse_sql_text_incremental

4. 使用训练好的模型直接推荐。
  1 python main.pyc clickhouse recommend

5. 可选：可以用新SQL对AI模型进行增量训练，需要占用ClickHouse服务端较多资源。
  1 python main.pyc clickhouse cost_estimation_incremental


场景五：对于多表查询的SQL，解析直接得到物化视图，无推荐策略。

多表场景下的配置文件：

```
database = imdbload
work_path = ./clickhouse
ck_host = 0.0.0.0
ck_port = 19000
clickhouse_tables = all
query_log_table = system.query_log
query_limit_mutil_table = 15
```

1. 进入OmniMV物化视图安装目录。
2. 初始化数据库信息。
  1 python main.pyc clickhouse init_database

3. 捞取多表查询SQL并解析出物化视图。
  1 python main.pyc clickhouse generate_materialize_view
