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 等不再看了,比较细节。