Looker开发:PDT与常规DT的差异及LookerML实现疑问咨询
Looker中静态表+每日刷新表关联场景的PDT方案疑问解答
问题1:创建视图文件和PDT的触发值与刷新效率问题
- 触发值是必须配置的,PDT依赖触发条件来控制刷新时机。针对你的场景,建议把每日刷新表的更新时间字段设为触发值,示例代码:
这样只有当每日刷新表有新数据写入时,PDT才会触发刷新,避免无意义的重复计算。sql_trigger_value: SELECT MAX(updated_at) FROM daily_refresh_table ;; - 不会导致静态表本身被刷新。PDT刷新只是重新执行定义好的关联查询,静态表的数据不会被修改,只是重新读取。但如果静态表数据量极大,每次全量关联可能有性能损耗,优化思路:
- 把静态表作为维度表,直接在视图层关联,PDT只处理每日刷新的事实表数据,这样PDT刷新时仅计算事实表部分,效率更高;
- 若静态表数据完全不变,可在PDT逻辑中提前缓存静态表的关联结果,避免每次重复读取。
问题2:常规DT设置Explore为PDT的可行性
不可行。常规DT(Derived Table)是实时计算的,每次查询Explore都会重新执行DT的SQL逻辑,没有持久化存储;而PDT是预计算后落地到数据库的物理表。Explore只能基于视图或PDT定义,正确的做法是直接定义PDT,然后在Explore中引用对应的视图(该视图指向PDT)。
PDT与常规DT的核心差异
- 存储特性:
- 常规DT:无物理存储,查询时动态计算,结果不落地;
- PDT:生成数据库物理表,预计算结果持久化保存。
- 刷新机制:
- 常规DT:随每次查询实时执行,无主动刷新策略;
- PDT:通过
sql_trigger_value(基于数据更新)、persist_for(定时)或手动触发控制刷新,仅在条件满足时重新计算。
- 性能表现:
- 常规DT:适合小数据量、低查询频率场景,数据量大时查询速度慢;
- PDT:适合大数据量、高查询频率场景,预计算后查询直接读物理表,速度快,但会占用额外存储资源。
- 适用场景:
- 常规DT:临时分析、快速验证逻辑,不需要持久化结果的场景;
- PDT:仪表盘、高频报表等需要稳定查询性能的场景。
内容的提问来源于stack exchange,提问作者Pandafreak
相关产品推荐
相关产品推荐

