Task 类有变量 queryState。queryState 包含变量 lineageState。LineageState 用于为任务执行回调中用到的血缘信息。
为了掌握 LineageState,需要先掌握以下的几个类。
TableAliasInfo 是 LineageInfo 的静态内部类。有两个变量,alias 是表的别名,table 是表对象。
public static class TableAliasInfo implements Serializable {
String alias;
private Table table;
}
baseColumnInfo
baseColumnInfo 是 LineageInfo 的静态内部类。有两个变量,tabAlias 是表的别名对象,column 是列对象。
public static class baseColumnInfo implements Serializable {
private TableAliasInfo tabAlias;
private FieldSchema column;
}
DataContainer 数据容器
表或者分区数据容器。因为查询的结果输出可能到一个表中,也有可能是表的一个分区。DataContainer 类可以包括这两种类型。
public static class DataContainer implements Serializable {
// 表的信息,如果数据容器是表
private final Table tab;
// 分区信息,如果数据容器是分区
private final Partition part;
}
DependencyType
DependencyType 是 LineageInfo 的静态内部枚举类。
有 3 个成员:
SIMPLE - 简单依赖:代表此列是其他表的列字段,没有经过任何转换。如 T2.c1 = T1.c1.expression - 表达式依赖:代表此列是从 UDF, UDAF, UDTF 或者集合操作(如 union 两个集合列)的结果。如 T2.c1 = T1.c1 + T3.c1.script - 脚本依赖:代表此列是用户脚本的输出结果。用户的脚本通过 TRANSFORM, MAP 或 REDUCE 语法或者从 PTF 执行链的结果。(PTF – PartitionedTableFunction:表分区函数)
public static enum DependencyType {
SIMPLE, expression, script
}
DependencyKey
DependencyKey 表示一个字段。DependencyKey 用于索引映射 protected Map
public static class DependencyKey implements Serializable {
// key 的数据容器
private final DataContainer dc;
// key 的字段信息。
private final FieldSchema fld;
}
Dependency
// 用于跟踪 base column 的依赖信息
public static class Dependency implements Serializable {
private DependencyType type;
private String expr;
private Set baseCols;
}
Predicate
Predicate 是 LineageInfo 的静态内部类。
public static class Predicate implements Serializable {
private String expr;
private Set baseCols = new linkedHashSet();
}
LineageInfo
public class LineageInfo implements Serializable {
protected Map index;
}
LineageState
public class LineageState implements Serializable {
private final Map dirToFop;
private Index index;
private final LineageInfo linfo;
public LineageState() {
dirToFop = new HashMap<>();
linfo = new LineageInfo();
index = new Index();
}
}



