跳转至

加速命中说明

1、命中加速的基本原则

一次查询 能够命中结果加速,需要同时满足以下 4 类条件:

校验项 核心判断规则
指标(Metrics) 查询使用的所有指标 ⊆ 加速方案已配置的指标
维度(Dimensions) 查询使用的维度 ⊆ 加速方案已配置的维度
时间范围(TimeConstraint) 查询的时间范围 ⊆ 加速方案的可用时间范围
过滤条件(Filters) 能够匹配物化方案中的筛选条件,或者筛选维度在物化方案中

👉 只要其中任一条件不满足,即无法命中加速方案。

2、命中说明

Step 1:指标是否匹配(最常见问题)

判断规则

查询中涉及的 所有指标,必须全部包含在加速方案的指标列表中。

  • ✅ 少查指标:可上卷的前提下允许

  • ❌ 多查指标:不允许

若查询仅使用其中部分指标,并且指标允许在所有维度上上卷(可与任意子集维度组合),则 可以命中。

若指标存在时间 / 业务限定、同环比时的推荐写法,如有下方指标配置

当加速方案中 指标本身带有过滤条件或时间限定 时,建议使用 metricDefinitions 的方式定义指标。

推荐写法示例:

{
  "metrics": [
    "count_order_id_p_rq1gidwb23dvbxneadglx"
  ],
  "metricDefinitions": {
    "count_order_id_p_rq1gidwb23dvbxneadglx": {
      "refMetric": "count_order_id_p",
      "filters": [
        "IN([sex],\"上海\")"
      ],
      "period": "relative_date 0 day of 0 day",
      "metricGrain": "day",
      "indirections": [
        "sameperiod__year__value"
      ]
    }
  }
}

Step 2:维度是否匹配

判断规则

查询使用的维度,必须是加速方案维度的 子集。

  • ✅ 少查维度:允许

  • ❌ 多查维度:不允许

日期维度的特殊说明

当加速方案中包含日期维度时:

  • 查询维度需使用统一规范:

日期维度__粒度

示例:

"dimensions": [
  "dt__month"
]

查询示例(可命中)

{
  "metrics": [
    "count_order_id_p_rq1gidwb23dvbxneadglx"
  ],
  "metricDefinitions": {
    "count_order_id_p_rq1gidwb23dvbxneadglx": {
      "refMetric": "count_order_id_p",
      "filters": [
        "IN([sex],\"上海\")"
      ],
      "period": "relative_date 0 day of 0 day",
      "metricGrain": "day"
    }
  },
  "dimensions": [
    "dt__month"
  ],
  "filter": [
    "DateTrunc([dt],\"day\") = \"2025-02-02\"",
    "IN([shop_name],\"百事\")"
  ]
}

不能命中

{
  "metrics": [
    "count_order_id_p_rq1gidwb23dvbxneadglx"
  ],
  "metricDefinitions": {
    "count_order_id_p_rq1gidwb23dvbxneadglx": {
      "refMetric": "count_order_id_p",
      "filters": [
        "IN([sex],\"上海\")"
      ],
      "period": "relative_date 0 day of 0 day",
      "metricGrain": "day"
    }
  },
  "dimensions": [
    "dt"
  ],
  "filter": [
    "DateTrunc([dt],\"day\") = \"2025-02-02\"",
    "IN([shop_name],\"百事\")"
  ]
}

Step 3:过滤条件是否可被加速支持

以下任一情况,都会导致 无法命中加速:

  • ❌ 使用了 加速未包含的维度字段 进行过滤

  • ❌ 对维度字段进行了 函数 / 表达式处理后再过滤

  • ❌ 在 filter 中使用了 未出现在 dimensions 中的维度

示例说明

示例 1

加速方案使用 dt__day 作为日期维度:

"dimensions": [
  "dt__day"
  "metric_time__day"
]

filter 使用 dimensions 中的日期维度进行筛选,推荐写法:

"filter": [
  "DateTrunc([dt],\"day\") = DateTrunc(\"2025-02-02\","day")"
]
"filter": [
  "DateTrunc([metric_time],\"day\") = DateTrunc(\"2025-02-02\","day")"
]

示例 2

维度匹配:

API 写法:

查询示例(可命中)

注意:严格使用下方格式,注意大小写

"filters": [
    "(DATETRUNC(['metric_time'], \"DAY\")) = (DATETRUNC(['open_date'], \"DAY\"))"
  ]

查询示例(不能命中)

"filters": [
    "DATETRUNC(['metric_time'], \"day\") = DATETRUNC(['open_date'], \"DAY\")"
  ]

示例 3

加速方案在创建是已经添加了筛选条件:如下

查询示例(命中)

"filter": [
  "IN([shop_name],\"百事\")"
]

查询示例(未命中)

"filter": [
  "[shop_name]=\"百事\""
]

Step 4:时间范围是否在“最新可用日期”内

假设:

加速方案回补的数据范围是 2025-01-01 ~2025-12-10

查询时间范围 是否命中
2025-12-01 ~ 2025-12-10 命中
2025-12-11 不命中(超出可用范围)
2025-12-01 ~ 2025-12-11 命中(满足下界)
2024-12-12 不命中