禅道bug增加自定义字段
禅道版本
18.9
需求
给禅道的bug模块,增加自定义字段。
- 目前主要增加“发现阶段”、“所属环境”、“出现频率”
- 增加bug的类型
- 在bug列表增加搜索:“发现阶段”、“所属环境”、“出现频率”
- 在测试报告增加模块:“发现阶段”、“所属环境”、“出现频率”
禅道开发手册
https://www.zentao.net/book/extension-new/intro-1256.html
具体步骤
修改bug模块的
module\bug
增加字段(对应数据库的)
module\bug\lang\zh-cn.php
# 33行(基础字段)
$lang->bug->period = '发现阶段';
$lang->bug->environment = '所属环境';
$lang->bug->frequency = '出现频率';
# 231行(发现阶段的可选项)
/*bug发现阶段*/
$lang->bug->periodList[''] = '';
$lang->bug->periodList['plan'] = '计划阶段';
$lang->bug->periodList['design'] = '设计阶段';
$lang->bug->periodList['dev'] = '开发阶段';
$lang->bug->periodList['smoke'] = '冒烟阶段';
$lang->bug->periodList['test'] = '测试阶段';
$lang->bug->periodList['alpha'] = 'alpha测试阶段';
$lang->bug->periodList['beta'] = 'beta测试阶段';
$lang->bug->periodList['uat'] = 'uat测试阶段';
$lang->bug->periodList['prod'] = '生产阶段';
$lang->bug->periodList['reg'] = '回归阶段';
$lang->bug->periodList['ato'] = '自动化测试';
# 246行(发现环境的可选项)
/*bug所属环境*/
$lang->bug->environmentList[''] = '';
$lang->bug->environmentList['dev'] = '开发环境';
$lang->bug->environmentList['test'] = '测试环境';
$lang->bug->environmentList['stag'] = '预发布环境';
$lang->bug->environmentList['prod'] = '生产环境';
$lang->bug->environmentList['dre'] = '灾备环境';
# 253行(出现频率的可选项)
/*bug出现频率*/
$lang->bug->frequencyList[''] = '';
$lang->bug->frequencyList['always'] = '必现';
$lang->bug->frequencyList['high'] = '高频';
$lang->bug->frequencyList['low'] = '低频';
$lang->bug->frequencyList['once'] = '1次';
#261行
/* 各个字段取值列表。*/
$lang->bug->severityList[0] = '';
$lang->bug->severityList[1] = '致命';
$lang->bug->severityList[2] = '严重';
$lang->bug->severityList[3] = '一般';
$lang->bug->severityList[4] = '优化';
$lang->bug->priList[0] = '';
$lang->bug->priList[1] = '急';
$lang->bug->priList[2] = '高';
$lang->bug->priList[3] = '中';
$lang->bug->priList[4] = '低';
# 307行(增加bug类型)
$lang->bug->typeList[''] = '';
$lang->bug->typeList['designdefect'] = '设计缺陷';
$lang->bug->typeList['codeerror'] = '代码错误';
$lang->bug->typeList['config'] = '配置问题';
$lang->bug->typeList['operation'] = '操作问题';
$lang->bug->typeList['UI'] = 'UI问题';
$lang->bug->typeList['MINIAPP'] = '小程序问题';
$lang->bug->typeList['APP'] = 'APP问题';
$lang->bug->typeList['front'] = '前端问题';
$lang->bug->typeList['back'] = '后端问题';
$lang->bug->typeList['data'] = '数据问题';
$lang->bug->typeList['addRequire'] = '新增需求';
$lang->bug->typeList['compatibility']= '兼容问题';
$lang->bug->typeList['install'] = '安装部署';
$lang->bug->typeList['performance'] = '性能问题';
$lang->bug->typeList['security'] = '安全问题';
$lang->bug->typeList['standard'] = '标准规范';
$lang->bug->typeList['automation'] = '测试脚本';
$lang->bug->typeList['others'] = '其他';
# 370行(测试报告的图表)
$lang->bug->report->charts['bugsPeriod'] = '按发现阶段统计';
$lang->bug->report->charts['bugsEnvironment'] = '按所属环境统计';
$lang->bug->report->charts['bugsFrequency'] = '按发生频率统计';
# 499行(测试报告的对象)
$lang->bug->report->bugsPeriod = new stdclass();
$lang->bug->report->bugsEnvironment = new stdclass();
$lang->bug->report->bugsFrequency = new stdclass();
# 422行(测试报告的图表对象)
$lang->bug->report->bugsPeriod->graph = new stdclass();
$lang->bug->report->bugsEnvironment->graph = new stdclass();
$lang->bug->report->bugsFrequency->graph = new stdclass();
# 453行
$lang->bug->report->bugsPeriod->graph->xAxisName = '发现阶段';
$lang->bug->report->bugsEnvironment->graph->xAxisName = '所属环境';
$lang->bug->report->bugsFrequency->graph->xAxisName = '发生频率';
修改配置层
config.php
module\bug\config.php
# 8行 bug必填字段(新增的字段,不建议搞成必填,这里只做示范)
// $config->bug->create->requiredFields = 'title,openedBuild,period,environment,frequency';
$config->bug->create->requiredFields = 'title,openedBuild';
$config->bug->edit->requiredFields = $config->bug->create->requiredFields;
// $config->bug->resolve->requiredFields = 'resolution,period,environment,frequency';
$config->bug->resolve->requiredFields = 'resolution';
# 15行 bug全部字段
$config->bug->list->allFields = 'id, module, execution, story, task,
title, keywords, severity, pri, type, os, browser, period, environment, frequency, hardware,
found, steps, status, deadline, activatedCount, confirmed, mailto,
openedBy, openedDate, openedBuild,
assignedTo, assignedDate,
resolvedBy, resolution, resolvedBuild, resolvedDate,
closedBy, closedDate,
duplicateBug, linkBug,
case,
lastEditedBy,
lastEditedDate';
# 28行 bug导出csv字段
$config->bug->exportFields = 'id, product, branch, module, project, execution, story, task,
title, keywords, severity, pri, type, os, browser, period, environment, frequency,
steps, status, deadline, activatedCount, confirmed, mailto,
openedBy, openedDate, openedBuild,
assignedTo, assignedDate,
resolvedBy, resolution, resolvedBuild, resolvedDate,
closedBy, closedDate,
duplicateBug, linkBug,
case,
lastEditedBy,
lastEditedDate, files ,feedbackBy, notifyEmail';
# 45行
$config->bug->list->customBatchEditFields = 'type,severity,pri,productplan,assignedTo,deadline,resolvedBy,resolution,os,browser,environment,keywords';
$config->bug->list->customBatchCreateFields = 'project,execution,steps,type,pri,deadline,severity,os,browser,environment,keywords';
# 91行 bug列表搜索字段
$config->bug->search['fields']['period'] = $lang->bug->period;
$config->bug->search['fields']['environment'] = $lang->bug->environment;
$config->bug->search['fields']['frequency'] = $lang->bug->frequency;
# 141行 bug搜索字段可选项
$config->bug->search['params']['period'] = array('operator' => 'include', 'control' => 'select', 'values' => $lang->bug->periodList);
$config->bug->search['params']['environment'] = array('operator' => 'include', 'control' => 'select', 'values' => $lang->bug->environmentList);
$config->bug->search['params']['frequency'] = array('operator' => 'include', 'control' => 'select', 'values' => $lang->bug->frequencyList);
# 164行 bug列表中,默认的展示字段(只新加了“所属环境”)
$config->bug->datatable->defaultField = array('id', 'title', 'severity', 'pri', 'status', 'environment', 'openedBy', 'openedDate', 'confirmed', 'assignedTo', 'resolution', 'actions');
# 214行 bug列表中,“所属环境”字段的HTML配置信息
$config->bug->datatable->fieldList['environment']['title'] = 'environment';
$config->bug->datatable->fieldList['environment']['type'] = 'html';
$config->bug->datatable->fieldList['environment']['fixed'] = 'no';
$config->bug->datatable->fieldList['environment']['width'] = '80';
$config->bug->datatable->fieldList['environment']['sortType'] = true;
$config->bug->datatable->fieldList['environment']['show'] = true;
$config->bug->datatable->fieldList['environment']['control'] = 'multiple';
table.php
module\bug\config\table.php
# 4行,增加 environment
$config->bug->dtable->defaultField = array('id', 'title', 'severity', 'pri', 'status','environment', 'openedBy', 'openedDate', 'confirmed', 'assignedTo', 'resolution', 'actions');
# 36行,增加environment
$config->bug->dtable->fieldList['environment']['title'] = $lang->bug->environment;
$config->bug->dtable->fieldList['environment']['type'] = 'category';
$config->bug->dtable->fieldList['environment']['map'] = $lang->bug->environmentList;
$config->bug->dtable->fieldList['environment']['group'] = 7;
修改控制层
module\bug\control.php
# 693行
$this->view->period = $period;
$this->view->environment = $environment;
$this->view->frequency = $frequency;
修改模型层
module\bug\model.php
# 56行 create方法,增加字段
## 68行
->setDefault('period', '')
->setDefault('frequency', '')
## 81行
->join('period', '')
->join('environment', ',')
->join('frequency', '')
# 161行 batchCreate方法,增加字段
## 197行
$environments = array_filter($data->environments[$i]);
## 217行
$data->environments[$i] = implode(',', $environments);
## 248行
$bug->environment = $data->environments[$i];
# 738行 update方法,增加字段
## 755行
->setDefault('period', '')
->setDefault('environment', '')
->setDefault('frequency', '')
## 766行
->join('period', '')
->join('environment', ',')
->join('frequency', '')
# 864 batchUpdate方法,增加字段
## 914行
$environments = array_filter($data->environments[$bugID]);
## 935行
$bug->environment = implode(',', $environments);
# 2312行 getBugInfoFromResult方法,增加字段
# 2369行 测试报告
/**
* Get report data of bugs period
* 根据发现阶段获取报表
* @access public
* @rerturn array
*/
public function getDataOfbugsPeriod()
{
$datas = $this->dao->select('period AS name, COUNT(*) AS value')->from(TABLE_BUG)->where($this->reportCondition())->groupBy('name')->orderBy('value DESC')->fetchAll('name');
if (!$datas)
return array();
foreach ($datas as $period => $data)
if (isset($this->lang->bug->periodList[$period]))
$data->name = $this->lang->bug->periodList[$period];
return $datas;
}
/**
* Get report data of bugs environment
* 根据所属环境获取报表
* @access public
* @rerturn array
*/
public function getDataOfBugsEnvironment()
{
$datas = $this->dao->select('environment AS name, COUNT(*) AS value')->from(TABLE_BUG)->where($this->reportCondition())->groupBy('name')->orderBy('value DESC')->fetchAll('name');
if (!$datas)
return array();
foreach ($datas as $environment => $data)
if (isset($this->lang->bug->environmentList[$environment]))
$data->name = $this->lang->bug->environmentList[$environment];
return $datas;
}
/**
* Get report data of bugs frequency
* 根据发生频率获取报表
* @access public
* @rerturn array
*/
public function getDataOfBugsFrequency()
{
$datas = $this->dao->select('frequency AS name, COUNT(*) AS value')->from(TABLE_BUG)->where($this->reportCondition())->groupBy('name')->orderBy('value DESC')->fetchAll('name');
if (!$datas)
return array();
foreach ($datas as $frequency => $data)
if (isset($this->lang->bug->frequencyList[$frequency]))
$data->name = $this->lang->bug->frequencyList[$frequency];
return $datas;
}
# 因为所属环境,可以多选,所以要修改一下地方
# 3443行,printCell方法
## 3476行
$environment = '';
$environmentList = explode(',', $bug->environment);
## 3487行
foreach ($environmentList as $value) {
if (empty($value))
continue;
$environment .= zget($this->lang->bug->environmentList, $value) . ',';
}
## 3494行
$environment = trim($environment, ',');
## 3554行
case 'environment':
$class .= ' text-ellipsis';
$title = "title='" . $environment . "'";
break;
## 3662行
case 'environment':
echo $environment;
break;
# 4099行 generateRow方法
## 4175行
$bugEnvironment = array();
if ($bug->environment) {
foreach (explode(',', $bug->environment) as $environment) {
$environment = trim($environment);
if ($environment)
$bugEnvironment[] = zget($this->lang->bug->environmentList, $environment, '');
}
}
$bug->environment = implode(',', $bugEnvironment);
## 4027行,增加
foreach (array_merge(array('os', 'browser', 'environment', 'mailto', 'branch', 'project', 'plan', 'execution', 'type', 'resolution', 'keywords', 'openedBuild', 'resolvedBuild', 'activatedCount'), $userFields, $dateFields) as $field) {
if (empty($bug->$field))
continue;
修改视图层
create.html.php
module\bug\view\create.html.php
# 225行
<td>
<div class='table-row'>
<div class='table-col' id='periodBox'>
<div class='input-group'>
<span class='input-group-addon'>
<?php echo $lang->bug->period ?>
</span>
<?php echo html::select('period', $lang->bug->periodList, $period, "class='form-control chosen'"); ?>
</div>
</div>
<div class='table-col' id='environmentBox'>
<div class='input-group'>
<span class='input-group-addon fix-border'>
<?php echo $lang->bug->environment ?>
</span>
<?php echo html::select('environment[]', $lang->bug->environmentList, $environment, "class='form-control chosen' multiple"); ?>
</div>
</div>
<div class='table-col' id='frequencyBox'>
<div class='input-group'>
<span class='input-group-addon'>
<?php echo $lang->bug->frequency ?>
</span>
<?php echo html::select('frequency', $lang->bug->frequencyList, $frequency, "class='form-control chosen'"); ?>
</div>
</div>
</div>
</td>

edit.html.php
# 36行
js::set('period', $bug->period);
js::set('environment', $bug->environment);
js::set('frequency', $bug->frequency);
# 268行
<tr>
<th>
<?php echo $lang->bug->period; ?>
</th>
<td>
<?php echo html::select('period', $lang->bug->periodList, $bug->period, "class='form-control chosen'"); ?>
</td>
</tr>
<tr>
<th>
<?php echo $lang->bug->environment; ?>
</th>
<td>
<?php echo html::select('environment[]', $lang->bug->environmentList, $bug->environment, "class='form-control chosen' multiple"); ?>
</td>
</tr>
<tr>
<th>
<?php echo $lang->bug->frequency; ?>
</th>
<td>
<?php echo html::select('frequency', $lang->bug->frequencyList, $bug->frequency, "class='form-control chosen'"); ?>
</td>
</tr>

view.html.php
# 361行
<tr>
<th>
<?php echo $lang->bug->period; ?>
</th>
<td>
<?php if (isset($lang->bug->periodList[$bug->period]))
echo $lang->bug->periodList[$bug->period];
else
echo $bug->period; ?>
</td>
</tr>
<tr>
<th>
<?php echo $lang->bug->environment; ?>
</th>
<td>
<?php $environmentList = explode(',', $bug->environment); ?>
<?php if ($environmentList): ?>
<p class='browserContent'>
<?php foreach ($environmentList as $environment): ?>
<?php if ($environment)
echo "<span class='label label-outline'>" . zget($lang->bug->environmentList, $environment) . "</span>"; ?>
<?php endforeach; ?>
</p>
<?php endif; ?>
</td>
</tr>
<tr>
<th>
<?php echo $lang->bug->frequency; ?>
</th>
<td>
<?php if (isset($lang->bug->frequencyList[$bug->frequency]))
echo $lang->bug->frequencyList[$bug->frequency];
else
echo $bug->frequency; ?>
</td>
</tr>

batchcreate.html.php
module\bug\view\batchcreate.html.php
# 76行
<th class='c-environment<?php echo zget($visibleFields, 'environment', ' hidden') . zget($requiredFields, 'environment', '', ' required');?> environmentBox'><?php echo $lang->bug->environment;?></th>
# 139行
<td class='<?php echo zget($visibleFields, 'environment', 'hidden')?> environmentBox' style='overflow:visible'> <?php echo html::select("environments[$i][]", $lang->bug->environmentList, '', "class='form-control chosen' multiple");?></td>
# 195行
<td class='<?php echo zget($visibleFields, 'environment', 'hidden')?> environmentBox' style='overflow:visible'> <?php echo html::select("environments[$i][]", $lang->bug->environmentList, '', "class='form-control chosen' multiple");?></td>
# 254行
<td class='<?php echo zget($visibleFields, 'environment', 'hidden')?> environmentBox' style='overflow:visible'> <?php echo html::select("environments[%s][]", $lang->bug->environmentList, '', "class='form-control chosen' multiple");?></td>
# 301行
<td class='<?php echo zget($visibleFields, 'environment', 'hidden')?> environmentBox' style='overflow:visible'> <?php echo html::select("environments[$i][]", $lang->bug->environmentList, '', "class='form-control chosen' multiple");?></td>
batchcreate.css
module\bug\css\batchcreate.css
.c-steps, .c-environment {width: 150px;}

batchedit.html.php
module\bug\view\batchedit.html.php
# 66行
<th class='c-environment<?php echo zget($visibleFields, 'environment', ' hidden') . zget($requiredFields, 'environment', '', ' required');?>'><?php echo $lang->bug->environment;?></th>
# 111行
<td <?php echo zget($visibleFields, 'environment', "class='hidden'")?>><?php echo html::select("environments[$bugID][]", $lang->bug->environmentList, $bug->environment, 'class="form-control chosen" multiple');?></td>
batchedit.css
module\bug\css\batchedit.css
.c-steps, .c-title, .c-plan, .c-assigned, .c-resolution, .c-environment {width: 150px;}
修复他们官方的bug
module\bug\js\batchedit.js
# 27行,添加:(this).data('zui.picker') &&
if($(this).data('zui.picker') && $(this).data('zui.picker').getValue() == 'ditto')

修改testreport模块的
module\testreport
修改数据库
module\testreport\lang\zh-cn.php
# 66行
$lang->testreport->bugPeriodGroups = 'Bug发现阶段分布';
$lang->testreport->bugEnvironmentGroups = 'Bug所属环境分布';
$lang->testreport->bugFrequencyGroups = 'Bug发生频率分布';
修改模型层
module\testreport\model.php
# 149行
$severityGroups = $statusGroups = $openedByGroups = $resolvedByGroups = $resolutionGroups = $moduleGroups = $typeGroups = $stageGoups = $handleGroups = $periodGroups = $environmentGroups = $frequencyGroups = array();
# 264行
### 增加 发现阶段、所属模块、发生频率
$periodGroups[$bug->period] = isset($periodGroups[$bug->period]) ? $periodGroups[$bug->period] + 1 : 1;
$environmentGroups[$bug->environment] = isset($environmentGroups[$bug->environment]) ? $environmentGroups[$bug->environment] + 1 : 1;
$frequencyGroups[$bug->frequency] = isset($frequencyGroups[$bug->frequency]) ? $frequencyGroups[$bug->frequency] + 1 : 1;
# 331行
## 新增发现阶段、所属环境、发生频率
$data = array();
foreach($periodGroups as $period => $count)
{
$data[$period] = new stdclass();
$data[$period]->name = zget($this->lang->bug->periodList, $period);
$data[$period]->value = $count;
}
$bugInfo['bugPeriodGroups'] = $data;
$data = array();
foreach($environmentGroups as $environment => $count)
{
$data[$environment] = new stdclass();
$data[$environment]->name = zget($this->lang->bug->environmentList, $environment);
$data[$environment]->value = $count;
}
$bugInfo['bugEnvironmentGroups'] = $data;
$data = array();
foreach($frequencyGroups as $frequency => $count)
{
$data[$frequency] = new stdclass();
$data[$frequency]->name = zget($this->lang->bug->frequencyList, $frequency);
$data[$frequency]->value = $count;
}
$bugInfo['bugFrequencyGroups'] = $data;

禅道bug增加自定义字段的更多相关文章
- python数据统计之禅道bug统计
背景 通过定期输出 每条产品的 BUG 情况,以此来反馈开发解决问题.测试跟进问题的情况:钉钉群推送提醒开发及时解决 以此我这边开始着手准备编写一个小工具,最终达到目的:自动定期发送统计报告,报告维度 ...
- dedecms如何增加自定义字段
开源的cms比较好的一点是可以根据自己的需求来开发相应的功能,比如dedecms想要增加一个专家职称字段调用要怎么调用呢? 增加自定义字段:后台找到 “核心” - 频道模型 - 内容模型管理 - 字段 ...
- 禅道---Bug管理模块
禅道官网:http://www.cnezsoft.com/ 简介: 开源免费的项目管理软件.集产品管理.项目管理.测试管理一体以及事物管理组织管理的功能 使用原因: 开源 方便跟踪管理Bug 使用简单 ...
- 禅道Bug管理工具环境搭建
下载地址:http://sourceforge.net/projects/zentao/files/8.2/ZenTaoPMS.8.2.stable.exe/download 1.解压ZenTaoPM ...
- centos 7 禅道bug管理软件部署
2018-10-26 部署前置条件 关闭防火墙或者添加防火墙规则,使禅道端口可以通过防火墙 关闭防火墙与selinux 临时关闭防火墙 systemctl stop firewalld 永久防火墙开机 ...
- CentOS下搭建禅道Bug反馈系统
禅道 下载集成版本(apache\php\mysql) wget http://sourceforge.net/projects/zentao/files/8.2.5/ZenTaoPMS.8.2.5. ...
- 禅道Bug等级划分标准
一.严重程序 P1:致命(该问题在测试中较少出现,一旦出现应立即中止当前版本测试) 阻碍开发或测试工作的问题:造成系统崩溃.死机.死循环,导致数据库数据丢失, 与数据库连接错误,主要功能丧失,基本模块 ...
- django restframework serializer 增加自定义字段
在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段.有两种方法实现 ...
- Asp.net Identity 修改默认数据库,增加自定义字段
visual studio 2013 先新建一个项目 选择MVC,确定 打开 Views\Shared\_Layout.cshtml文件,按自己的要求修改 改 <!DOCTYPE html> ...
- 测试软件—禅道BUG管理工具
入禅 目录 入禅 1.禅道的基本使用 1.禅道的基本使用 admin(管理员) 部门:创建部门(需求部门,开发部门,测试部门,项目部门,产品部门) 组织:创建用户(产品经理,项目经理,开发人员,测试人 ...
随机推荐
- 简化部署流程:Rainbond让Jeepay支付系统部署更轻松
在如今的开发环境中,部署一套像 Jeepay 这样的 Java 支付系统往往需要开发者面对繁琐的配置.依赖环境管理以及服务的高可用性保障,手动部署和运维变得异常艰巨和费时.然而,借助 Rainbond ...
- USB协议基础篇
初次接触USB的同学,可能会被里面各种名词给搞晕,下面就来梳理一下这些知识,希望能帮助大家理解USB. 一,从最常见的名词说起 1.1 什么是USB 这个我就不多解释了,直译就是通用串行总线.再不明白 ...
- C# efcode 新建表格数据 增删改查
using TestDbContext ctx = new TestDbContext(); var b1 = new Book { AuthorName = "杨中科", Tit ...
- KubeSphere Meetup 北京站火热报名中 | 搭载 CIC 2021 云计算峰会
"CIC 2021 云计算峰会"是一场 Top 级行业盛会,将汇聚 800 家青云QingCloud 企业客户信息化负责人,采取线上线下相结合的方式,与会规模将超过 10000 人 ...
- 三步搞定 ARM64 离线部署 Kubernetess + KubeSphere
背景 随着我国对信息安全的愈发重视,国产化的趋势也越来越浓,包括国产操作系统.国产 CPU 等.由于 ARM 架构国产 CPU 在维持创新可信和先进性方面的潜在优势,其应用也将会越来越广泛. Kube ...
- 云原生周刊:12 个容易忽略的 Kubernetes 安装错误
文章推荐 12 个容易忽略的 Kubernetes 安装错误 这篇文章总结了 12 个在 Kubernetes 安装过程中容易忽略但却必须注意的错误.这些错误包括: 没有正确安装 kubectl. 没 ...
- 黑客工具:Amass – 寻找子域
安装 所有信息都可以在 OWASP Amass 项目的 Github 页面上找到:https://github.com/OWASP/Amass.我们将一起完成安装过程,以便更快地部署. 转到发布页面并 ...
- dotnet core微服务框架Jimu介绍
jimu是一个基于.Net6.0 简单易用的微服务框架,参考了很多开源库以及想法,使用了大量的开源库(如 DotNetty, consul.net, Flurl.Http, Json.net, Log ...
- Vmware Workstation的虚拟机如何通过宿主机的无线网卡和外部通信
今天需要在我的笔记本w10电脑上安装一个linux虚拟机,苦于我的w10是家庭版,没有hyper-v功能,所以安装了 vmware的workstation的软件,然后创建了虚拟机,但是总是搞不定如何让 ...
- Paimon lookup store 实现
Lookup Store 主要用于 Paimon 中的 Lookup Compaction 以及 Lookup join 的场景. 会将远程的列存文件在本地转化为 KV 查找的格式. Hash htt ...