dremio 反射刷新时间的一些简单说明

发布时间 2024-01-11 20:19:33作者: 荣锋亮

dremio 的反射是可以创建的view 以及table (datasource 中的表) 上的,默认物化反射的调度频率最小是1小时,view 上的反射频率是不能调整的(只能创建,不能配置频率),物理表可以进行配置调整,以下是一些测试说明

几个方便观测反射效果的sql

以下是提供的几个系统表可以方便查询实际反射执行的效果,比如反射类型,反射对应的物化,反射依赖

 
// 反射信息
SELECT * FROM SYS.REFLECTIONS
// 反射实际的物化信息
SELECT * FROM sys.materializations
// 反射依赖
SELECT * FROM sys.reflection_dependencies

一个实际执行效果

此sql 是dremio 内部反射任务执行的,首次一个job 是执行刷新发射,然后一个是更新物化的元数据

REFRESH REFLECTION 'bbc4ddc4-9cd9-4990-a7f2-6864c4c40f23' AS '2d665907-0635-4230-9532-174b70f4853d'
// bbc4ddc4-9cd9-4990-a7f2-6864c4c40f23  为创建的反射id,2d665907-0635-4230-9532-174b70f4853d 为对应的物化id
LOAD MATERIALIZATION METADATA "bbc4ddc4-9cd9-4990-a7f2-6864c4c40f23"."2d665907-0635-4230-9532-174b70f4853d"
// 更新物化数据的元数据信息,方便查询计划的执行

测试总结

经过一些测试,目前对于view 的反射如果依赖的物理表(datasource 中的表),同时物理表创建了反射,那么当执行物理表反射刷新的时候,依赖物理表的视图反射也会执行刷新,否则视图的数据需要等待一个1小时的自动刷新,默认过期时间是3小时(与默认物理表反射的效果是类似的,当然
目前dremio 的反射设计上有一些缺陷,比如在view 中,我们可能配置了过滤,但是当我们重新调整view 之后因为不能手动调度刷新,数据查询结果可能不对,目前dremio 也支持了反射hit ,我们可以创建多个反射,然后进行一些基于注释的hit 操作,方便控制反射实际执行计划,
反射实际上比较复杂,尤其在复杂view 模型中,依赖可能比较多,对于实际创建反射,还是应该遵循官方的一些实践

说明

以上是基于测试的一个简单说明,实际后边应该结合源码学习下内部的实际处理,以下官方一些资料可以参考学习下

参考资料

https://docs.dremio.com/current/sonar/reflections/best-practices
https://docs.dremio.com/current/sonar/reflections/using-reflection-hints
https://docs.dremio.com/current/sonar/reflections/refreshing-reflections
https://docs.dremio.com/current/sonar/reflections/reflection-recommendations
https://docs.dremio.com/current/reference/sql/system-tables/materializations
https://docs.dremio.com/current/reference/sql/system-tables/reflections
https://docs.dremio.com/current/reference/sql/system-tables/reflection-dependencies
https://docs.dremio.com/current/admin/metadata-caching