CatalogObject 是 Impala 所有元数据的公共接口,今天来看下都有哪些元数据对象。
# 总览
CatalogObject 是一个接口, 继承 HasName 接口。这个接口只有一个方法定义 public String getName();
,它是对象名称,用来排序的模式匹配。
CatalogObject 之上有很多个元数据对象,类图如下:
![](http://image.couplecoders.tech/CatalogObject (1).png)
可以看出,CatalogObject 主要是 Principal、Db、Table、Function 等,Catalog version 在 CatalogObjectImpl 中定义,初始值为 INITIAL_CATALOG_VERSION。
# Db
Db 除了继承 CatalogObjectImpl 之外,还实现了 FeDb 接口,首先来看下它。
# FeDb
它同样继承 HasName 接口,定义了 name 比较器。
Comparator<FeDb> NAME_COMPARATOR = new Comparator<FeDb>() { | |
@Override | |
public int compare(FeDb db1, FeDb db2) { | |
return db1.getName().compareTo(db2.getName()); | |
} | |
}; |
再来看下其他接口。
// 获取 MetaStore 的 Db 对象 | |
Database getMetaStoreDb(); | |
// 数据库是否包含某个表 | |
boolean containsTable(String tableName); | |
// 获取表 | |
FeTable getTable(String tbl); | |
// 获取缓存中的表 | |
FeTable getTableIfCached(String tbl); | |
// 获取所有的表名 | |
List<String> getAllTableNames(); | |
// 是否是系统数据库 | |
boolean isSystemDb(); | |
// 根据定义获取函数 | |
public Function getFunction(Function desc, Function.CompareMode mode); | |
// 根据名称获取函数 | |
List<Function> getFunctions(String functionName); | |
// 根据 category 和名称获取函数,category 分为 SCALAR、AGGREGATE 和 ANALYTIC | |
List<Function> getFunctions(TFunctionCategory category, String function); | |
// 根据 category 和正则获取函数 | |
List<Function> getFunctions(TFunctionCategory category, PatternMatcher patternMatcher); | |
// 获取函数个数 | |
int numFunctions(); | |
// 是否包含某个函数名称 | |
boolean containsFunction(String function); | |
// 返回 thrift 对象 | |
TDatabase toThrift(); | |
// 创建 Kudu ctas 对象 | |
FeKuduTable createKuduCtasTarget(Table msTbl, List<ColumnDef> columnDefs, | |
List<ColumnDef> primaryKeyColumnDefs, boolean isPrimaryKeyUnique, | |
List<KuduPartitionParam> kuduPartitionParams) throws ImpalaRuntimeException; | |
// 创建 Fs ctas 对象 | |
FeFsTable createFsCtasTarget(Table msTbl) throws CatalogException; | |
// 获取所属者 | |
String getOwnerUser(); |
# 变量 & 常量
// MetaStore db 对象 | |
private final AtomicReference<TDatabase> thriftDb_ = new AtomicReference<>(); | |
// 表缓存 | |
private final CatalogObjectCache<Table> tableCache_; | |
// 函数 | |
private final Map<String, List<Function>> functions_; |
# 方法
方法就不再看了,大部分是对 FeDb 接口的实现。
# 其他
Table、Function 等不再看了,比较细节。