You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kylin.apache.org by "Ruixuan Zhang (Jira)" <ji...@apache.org> on 2023/02/17 07:29:00 UTC
[jira] [Created] (KYLIN-5455) After the multi-level partition model is modified to a full build model, the build job fails
Ruixuan Zhang created KYLIN-5455:
------------------------------------
Summary: After the multi-level partition model is modified to a full build model, the build job fails
Key: KYLIN-5455
URL: https://issues.apache.org/jira/browse/KYLIN-5455
Project: Kylin
Issue Type: Bug
Components: Job Engine
Affects Versions: 5.0-alpha
Reporter: Ruixuan Zhang
Assignee: Ruixuan Zhang
Fix For: 5.0-alpha
Attachments: 1.png, 2.png, 3.png, 4.png, 5.png, 6.png, 7.png, 8.png, 截屏2022-12-26 14.43.25.png
行为1:
# 创建多级分区模型,并构建segment成功
# 编辑多级分区模型--将增量构建修改为全量构建 --修改成功
# 在模型页面直接点击构建,选择全量构建
!1.png!
!截屏2022-12-26 14.43.25.png!
在模型保存页面将增量模型更改为全量模型,弹框提示“修改模型分区设置后,系统将删除所有 Segment 及数据,模型将无法服务于业务查询。同时正在执行的构建任务将被终止。是否要继续保存?”,点击保存后,可以观察到调用了/api/models/semantic接口,如图1所示,向接口传递的数据只把PartitionDesc置为了null,而多级子分区multi_partition_desc 并没有置为null,故而对该模型发起全量构建的过程中会判定为该模型为MultiPartitionJob
!2.png!
同时,通过追踪全量构建调用链路可以发现,在constructFullBuild方法中new的jobParam并没有传递setTargetPartitions
!3.png!
!4.png!
所以在后续的computeJobBucket方法中爆出了无法添加任务,子分区值为空。请检查后重试。异常,导致无法正常构建。
!5.png!
行为2:
# 创建多级分区模型,并构建segment成功
# 在模型页面直接点击构建,选择全量构建
在模型页面直接点击构建,选择全量构建后,弹框提示“修改模型分区设置后,系统将删除所有 Segment 及数据,模型将无法服务于业务查询。同时正在执行的构建任务将被终止。是否要继续保存?”点击保存后会调用[api/models/\{model_id}/partition|http://localhost:8080/kylin/api/models/6803d786-9437-f980-da49-85ca1ec5d0f1/partition] 接口更新模型分区数据,接口内数据为:
{"project":"caixukun","partition_desc":null}
!6.png!
Sheng Huang
December 26, 2022 at 3:56 PM
Edited
与产品和测试讨论的最终结论:两处行为不一致,需要纠正行为1,对齐行为2
行为1:在模型编辑页面从增量改成全量后,需要把分区设为无分区后,再点击构建才能正常构建。
行为2:直接在模型列表处,点击构建,然后选择全量构建,可以构建成功
行为不一致的Root Cause:
行为1:
创建多级分区模型,并构建segment成功
编辑多级分区模型--将增量构建修改为全量构建 --修改成功
在模型页面直接点击构建,选择全量构建
在模型保存页面将增量模型更改为全量模型,弹框提示“修改模型分区设置后,系统将删除所有 Segment 及数据,模型将无法服务于业务查询。同时正在执行的构建任务将被终止。是否要继续保存?”,点击保存后,可以观察到调用了/api/models/semantic接口,如图1所示,向接口传递的数据只把PartitionDesc置为了null,而多级子分区multi_partition_desc 并没有置为null,故而对该模型发起全量构建的过程中会判定为该模型为MultiPartitionJob
同时,通过追踪全量构建调用链路可以发现,在constructFullBuild方法中new的jobParam并没有传递setTargetPartitions
所以在后续的computeJobBucket方法中爆出了无法添加任务,子分区值为空。请检查后重试。异常,导致无法正常构建。
行为2:
创建多级分区模型,并构建segment成功
在模型页面直接点击构建,选择全量构建
在模型页面直接点击构建,选择全量构建后,弹框提示“修改模型分区设置后,系统将删除所有 Segment 及数据,模型将无法服务于业务查询。同时正在执行的构建任务将被终止。是否要继续保存?”点击保存后会调用api/models/{model_id}/partition 接口更新模型分区数据,接口内数据为:
{"project":"caixukun","partition_desc":null}
!6.png!
由于没有传递MultiPartitionDesc参数,所以request中的MultiPartitionDesc为null,所以updatePartitionColumn的时候也会把MultiPartitionDesc置为null。所以当执行到computeJobBucket的时候会因为不是MultiPartitionJob而直接return。所以可以成功发起构建
!7.png!
h2. Fix Design:
前端改动:如果一个模型的PartitionDesc被置为了null,那么这个模型的multi_partition_desc必定为null。
故而,基于此逻辑,可以在/api/models/semantic接口中,对multi_partition_desc做检查,如果传递过来的PartitionDesc为null,那么也把multi_partition_desc置为null。
后端改动:在下面判断逻辑中新增对时间分区列的判断,只有时间分区列不为null且子分区不为空才能判定为多级分区模型。
!8.png!
--
This message was sent by Atlassian Jira
(v8.20.10#820010)