怎么判断图表查询是否命中物化以及如何排查没有命中物化的方法
更新时间: 2025-06-18 19:44:06
阅读 63
怎么判断图表查询是否命中物化以及如何排查没有命中物化的方法
1.如何判断当前图表查询是否命中物化视图?
1.1 在报告编辑状态下查看 SQL,点击图表右上角的更多选项查看 SQL,如果发现 SQL 中只查询了单表,或者表名很奇怪带了 “etl_” 前缀,那么一定是走了物化视图。
1.2 查看 websocket 接口返回数据,可以看下返回的数据结果里 ".result.extra.materialized" 字段,如果等于 1,说明命中了物化视图
2.如果没有命中物化视图如何排查定位?
可以在 backend 日志里查看 DC 模块的返回结果进行排查,这里列举几种没有命中的情况分别说明:
2.1 字段不存在的情况(fieldFail)
//这个表示查询的"类别"这个字段在物化视图里不存在
{
"type": "fieldFail",
"failExpr": "Field(1,类别,String,ExprMeta(None,None))",
"expect": [
[
"Field(1,类别,String,ExprMeta(None,None))"
]
]
}
2.2 筛选范围不匹配(aggregateFail)
// 这个表示物化视图配置的 ds 字段的筛选范围 >= 2022-01-01 00:00:00
// 但是图表的筛选范围是 >= 2021-05-23 00:00:00
// 无法精确满足条件匹配,所以不能命中物化视图
{
"type": "filterPredicateFail",
"failExpr": "Date(Field(1,ds,String,ExprMeta(None,None)),ExprMeta(None,None))",
"viewPredicate": "EComparePredicate(>=,LitStringV(2022-01-01 00:00:00))",
"queryPredicate": "EComparePredicate(>=,LitStringV(2021-05-23 00:00:00))"
}
2.3 筛选器不存在的情况(filterExprNotMatchFail)
// 这个表示在物化视图里配置了一个订单日期的筛选器,但是图表查询上没有该筛选条件
// 也就是图表查询的数据范围比物化视图的范围大,自然命不中物化视图
// 这里如果筛选器字段类型转换的方式不一样也无法匹配
{
"type": "filterExprNotMatchFail",
"failExpr": "Date(Field(1,订单日期(YY-MM-DD),String,ExprMeta(None,None)),ExprMeta(None,None))"
}
2.4 聚合和明细不匹配(aggregateFail)
//如果物化视图是聚合的,但是查询的数据是明细,比如二维表的非聚合查询,那么这种情况下无法命中物化
{
"type": "aggregateFail",
"viewAgg": true,
"queryAgg": false
}
文档反馈
以上内容对您是否有帮助?