dremio DatasetHandle 简单说明
DatasetHandle 主要是关于dataset handle 处理的,不同存储插件会有不同的具体实现,同时不同的表格式也会有不同的实现(iceberg,parquet)
功能简单介绍
主要是关于dataset如何处理的handle,实际的实现会包含一些上下文信息,当进行其他api 调用的时候 metadata 会有开销比较大的操作
同时获取dataset handles 的时候也会实现到此类,同时回去datasetstats 的服务也会使用到此类,同时注意进行状态处理的时候应该使用
比较小的内存,dremio 的存储插件中的 listDatasetHandles,getDatasetHandle,getDatasetMetadata方法会使用具体的实现(不同存储插件会有不同的实现)
- 默认接口定义
默认定义就包含一个方法,就是获取dataset 的实体路径
public interface DatasetHandle extends Unwrappable {
/**
* Get the path to the dataset.
*
* @return path to dataset, not null
*/
EntityPath getDatasetPath();
}
参考实现子类
以下是简单列出部分,实际的实现可以查看详细源码实现
使用
上边也简单介绍了,dremio 不少类会使用到,以下是一个简单的介绍
- DatasetHandleListing
主要实现需要返回一个可迭代的handles
Iterator<? extends DatasetHandle> iterator() throws ConnectorException;
- SourceMetadata
获取指定dataset 路径的handle以及getDatasetMetadata - SupportsListingDatasets
获取datasets 的handles 以及 - 存储插件中的getDatasetHandle
主要获取dataset 的 handle ,实际上是SourceMetadata 接口的一个实现 - 存储插件中的listDatasetHandles
是SupportsListingDatasets 接口的是一个实现 - 存储插件中的getDatasetMetadata
主要获取dataset 的元数据信息,实际上是SourceMetadata 接口的一个实现 - SupportsUnlimitedSplits
是否支持无限制splits 类 - MFunctionMetadata
表相关maco 操作使用的handle - CatalogImpl 实现
实际上是一个间接的使用,使用了内部的使用的MFunctionMetadata - DatasetManager
属于间接调用,使用了内部的存储插件获取handle信息
说明
以上只是一个简单的说明,实际使用到DatasetHandle 的地方还是比较多的,详细的可以参考源码,目前的设计我们每个存储插件都会使用到此类的一些实现
参考资料
sabot/kernel/src/main/java/com/dremio/exec/store/ischema/InfoSchemaStoragePlugin.java
sabot/kernel/src/main/java/com/dremio/exec/store/ischema/InformationSchemaTable.java
connector/src/main/java/com/dremio/connector/metadata/extensions/SupportsListingDatasets.java
connector/src/main/java/com/dremio/connector/metadata/SourceMetadata.java
sabot/kernel/src/main/java/com/dremio/exec/catalog/MFunctionMetadata.java
connector/src/main/java/com/dremio/connector/metadata/DatasetHandle.java
sabot/kernel/src/main/java/com/dremio/exec/catalog/DatasetManager.java
sabot/kernel/src/main/java/com/dremio/exec/catalog/CatalogImpl.java
connector/src/main/java/com/dremio/connector/metadata/EntityPath.java