Getting Started With Data Reflections
原文-Getting Started With Data Reflections
Why Data Reflections?
分析中通常涉及较大数据集和资源密集型的操作,数据分析和数据科学家需要较高效的交互式查询来完成他们的分析工作,其中分析任务多是迭代关联性的,每一步的操作都依赖于前一步骤的产出速度。Data Reflections
即为Dremio提供的高效获取数据方法中的一种,创新性方法,获取专利的一种加速数据提取技术.
How Data Reflections Work
Data Reflections 类似于关系数据库中的索引(indexes),为Dremio的成本分析查询优化器(cost-based query optimizer)提供有用信息,使得Dremio获得比将查询下推到数据源还要高效的执行计划(query plans)。Data Reflections管理优化近邻于Dremio查询执行引擎(query execution engine)的数据,其中利用到诸如列存(columnarization)、压缩(compression)、排序(sorting)、分区(partitioning)、聚合数据(aggregating data)等优化方式。所有数据reflections持久化在Dremio的Reflection Store,Reflection Store对每一个部署是可配置的,如云式存储Amazon S3、 Hadoop’s HDFS, a NAS or SAN,甚至安装在Dremio节点上附件本地存储。
同关系数据库索引相似,Data Reflections对端用户不可见,用户不必关心不同的数据源或者修改他们的查询。用户添加Data Reflections后,Dremio查询计划器(query planner)将自动使用这些Reflections,用户不必感知。
有两种类型的Data Reflections:
-
Raw Reflections.
可以利用于加速任何类型的查询,允许用户对给定数据源的行列的子集(a subset of rows or columns)或者整个数据集(dataset)进行优化。 -
Aggregation Reflections.
可以进一步加速包含聚合和分组操作(aggregations and group by operations)的BI型(BI-style)查询,也可以配置作用于数据源的行列的子集(a subset of rows or columns)
Creating A Raw Data Reflection
Add the Sample source in Dremio
选择查看SF_Incidents2016.json
更改日期类型为Date
另存为SFIncidents,到自己的工作空间
查询
SELECT PdDistrict, DayOfWeek, Category, Resolution
FROM demo.SFIncidents
WHERE '2016-02-01' <= SFIncidents."Date" AND '2016-03-01' > SFIncidents."Date"
到jobs
中看具体执行详情
显示未被加速
设置raw reflection
小结
(1)A Raw Data Reflection 包含了原来数据源的所有行列,但是通过Parquet存储数据,将数据压缩重组,同时将reflection和Dremio本地化,不必通过网络拉取数据。处理后涉及原来数据源的查询,都会自动的修改执行计划,查询已预存好的reflection。
同时,如果另外一个查询是该reflection可以涵盖的,也会利用该reflection加速查询,例如A数据源存在一个reflectionA,由A衍生出的数据源B是A的子集,关于B的查询,也会利用到reflectionA。
(2)当存在多个reflection可能加速查询时,执行计划会依据cost算法命中执行效率最高的reflection,如查询中需要对某个字段排序,而如果存在一个reflection有该字段的排序配置,该reflection可能优先被命中。
Exploring Aggregation Reflections
Aggregation Reflections与之类似,只是当存在Raw Reflections,构建Aggregation Reflections可以直接利用Raw Reflections,加速聚合时提取数据的过程。Aggregation Reflections相当对计算指标做所选维度的grouping sets。类似于kylin 预聚合。
Advanced Data Reflection Menus
高级菜单中,可以对Reflections进行具体细节的加速配置,如
- 为a raw reflection选择columns子集,这在源表有很多列,而查询只需要一个子集是有帮助。
- 对reflection进行sort和partition配置,配置特定类型的reflection