dremio starflake data reflections 简单说明
dremio 支持一类starflake data reflections ,比较有意思,以下是对于来自官方文档的一些说明
定义
starflake data reflections 就是反射会join 多个物理数据集,这些数据集部分或者全部是record-preserving
join
特点
- starflake data reflections 实际上是与starflake 建模模型一致的,就是模型里边同时包含了star model 以及snowflake model
- record-preserving join 实际上就是多个join 可以唯一的标识关联上,官方有一个简单的例子,就是三张表关联,结果数据中可以
关联到唯一的一条原始数据
保留链接判定
如果结果数据集中的记录数等于原始数据集之一中的记录数,则外连接是一种记录保留连接。另一方面,如果原始数据集中的每条记录在连接中都匹配,并且结果数据集中的记录数等于同一原始数据集中的记录数,则内部联接是保留记录的联接数据集。请注意,连接可以在一个方向或两个方向上保留记录(或根本不保留记录)
dremio 如何进行starflake data reflections 识别
以下是按照顺序处理的
- 接受用户查询
- 编译用户查询为查询计划
- 虚拟数据集展开,这样用户的查询将只包含物理数据集
- 对于关联cache 的反射
a. 如果反射计划没有至少一个与用户查询计划相同的物理数据集,则放弃考虑该反射并继续进行下一个反射(就是重新遍历)
b. 裁剪通过反射计划中的记录保留联接连接的物理数据集,直到反射计划中的所有剩余物理数据集都在用户查询计划中引用的数据集之间
c. 确定是否可以重写用户查询计划以利用修剪后的反射,以及这是否会降低查询成本
说明
从官方的介绍来说starflake data reflections 还是比较绕口的,但是实际上就是一个比较复杂的查询,我们进行多个表的join ,对于后续用户的查询
我们会通过一步步的裁剪处理(去掉不是我们关注的数据),如果有符合的数据同时用户的查询可以进行重写复用这份数据(但是需要注意链接是需要符合dremio 的保留链接的特征的)
参考资料
https://www.dremio.com/blog/introduction-to-starflake-data-reflections/
https://docs.dremio.com/current/sonar/reflections/types-and-benefits
https://docs.dremio.com/current/sonar/reflections/best-practices
https://www.ibm.com/docs/en/ida/9.1.2?topic=schemas-starflake
https://www.ibm.com/docs/en/ida/9.1.2?topic=schemas-snowflake
https://www.ibm.com/docs/en/ida/9.1.2?topic=schemas-star
https://www.ibm.com/docs/en/ida/9.1.2?topic=models-outriggers