Task 类有变量 queryState。queryState 包含变量 lineageState。LineageState 用于为任务执行回调中用到的血缘信息。
为了掌握 LineageState,需要先掌握以下的几个类。
TableAliasInfo 是 LineageInfo 的静态内部类。有两个变量,alias 是表的别名,table 是表对象。
public static class TableAliasInfo implements Serializable { String alias; private Table table; }
baseColumnInfobaseColumnInfo 是 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
Predicate 是 LineageInfo 的静态内部类。
public static class Predicate implements Serializable { private String expr; private Set
public class LineageInfo implements Serializable { protected Map
public class LineageState implements Serializable { private final Map