Uploaded image for project: 'Kylin'
  1. Kylin
  2. KYLIN-5327

kylin.cube.aggrgroup.is-mandatory-only-valid参数配置与Cuboid缺失

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Open
    • Major
    • Resolution: Unresolved
    • v4.0.2
    • None
    • Modeling
    • None

    Description

      背景:

      我在线上构建cube时发现必要维度的cuboid组合有时会不被构建。

      只有当kylin.cube.aggrgroup.is-mandatory-only-valid=true时才会构建。可是kylin.cube.aggrgroup.is-mandatory-only-valid参数解释是:是否允许 Cube 只包含 Base Cuboid,默认值为 FALSE,当使用 Spark Cubing 时需设置为 TRUE。这个解释看起来有点抽象。

      我的困惑:

      1.kylin.cube.aggrgroup.is-mandatory-only-valid中的base cuboid是指什么,是指必要维度组的组合吗?

      2.该参数解释为当使用 Spark Cubing 时需设置为 TRUE,为何设置为false会导致cuboid构建缺失

       

      问题还原:

      测试集的cube kylin_sales_model这个model构建以下的维度组合。

      当设置参数为false时 会不构建必要维度的cuboid。

      源码中影响的位置

      org.apache.kylin.cube.cuboid.DefaultCuboidScheduler#getOnTreeParents(long, org.apache.kylin.cube.model.AggregationGroup) 影响了cuboid的生成,如果为false

       if (agg.getMandatoryColumnMask() != 0L) {
                  if (agg.isMandatoryOnlyValid()) {
                      if (fillBit(tmpChild, agg.getMandatoryColumnMask(), parentCandidate)) {
                          return parentCandidate;
                      }
                  } else {
                      tmpChild |= agg.getMandatoryColumnMask();
                  }
              }       
       for (Long normal : agg.getNormalDims()) {
                  fillBit(tmpChild, normal, parentCandidate);
              } 

      会跳过必要组合作为LowestCuboid。是否改在for循环调用前加入

      fillBit(tmpChild, agg.getMandatoryColumnMask(), parentCandidate)

      Attachments

        Activity

          People

            Unassigned Unassigned
            xjlem xjlem
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: