dremio SourceMetadataManager 服务简单说明
SourceMetadataManager 对于dremio 来说是一个比较重要的东西,它是包含在ManagedStoragePlugin中的一个能力
所以每个存储扩展都包含了一个SourceMetadataManager,而且ManagedStoragePlugin 会利用SourceMetadataManager
的能力管理系统元数据
SourceMetadataManager 的职责
主要是进行source 元数据的同步,主要包含了即席查询,以及后台刷新,即席查询的主要是在添加source 以及测试场景,后台
是基于任务调度执行的,同时还包含了对于元数据的存储(kvstorage)
类图
说明:SourceMetadataManager包含了两大类即席刷新以及,后台任务刷新,从上图也可以看出来
即席查询元数据处理
从上图也可以看出依赖关系,实际上就是一个实现RefreshRunner的子类,包含了几个数据刷新,以及存储元数据的方法
注意依赖了一个MetadataBridge 设计比较有意思(实现了一个锁,确保ManagedStoragePlugin与元数据管理的安全)
refreshDatasetNames 的实现就类用了每个存储扩展包的元数据接口定义了,如果实现了SupportsListingDatasets 就可以获取列表了
具体是如下一个接口的实现
public interface SupportsListingDatasets {
/**
* Returns a listing of dataset handles, where each handle represents a dataset in the source.
*
* @param options options
* @return listing of dataset handles, not null
*/
DatasetHandleListing listDatasetHandles(GetDatasetOption
throws ConnectorException;
}
其他函数功能参考详细参考源码,同时后台任务的处理与类似,只是是基于任务调度执行的
一个参考sql 执行调用链
- schema 获取的
说明
以上关于SourceMetadataManager只是简单的介绍,同时比较零碎,后期提供应该会结合组件将功能串起来
参考资料
sabot/kernel/src/main/java/com/dremio/exec/catalog/SourceMetadataManager.java