这是BigDansing这篇论文的一些笔记,希望对您有所帮助。
1.基础
- Semantics
Detect GenFix
v v
->UDF->Violation->Possible Fixes
- UDF
U:用户自定义的关系
D:拒绝约束(t1,t2=>f(t1,t2) = 1)
F:函数依赖(F(x)=y)
- 动作
Dirty Database + Rules
=>A repair => D’
D’ 不会违反规则,或者只存在无法修复(不存在possible fixes)的规则违反
- 架构
- 逻辑层
- 允许用户以简单的方式表达各种数据质量规则
- 有五个逻辑运算符:
- Scope:定义了规则的相关数据
- Block:定义了可能发生冲突的数据单元组
- Iterate:枚举了候选冲突
- Detect:决定了候选冲突是否是真的冲突
- GenFix:为每一个冲突生成一个可能的修复集合
- 用户定义逻辑运算符以及运算顺序,或者提供声明性的规则
- 物理层
- 这一层,BD收到一个逻辑计划,然后转化成物理操作组成的优化过的物理计划。
- 实现方式有基于散列、基于范围。
- 主要优化步骤:计划整合/数据访问优化
- 执行层
- 决定了如何在底层的并行数据处理框架中执行物理计划,将物理计划转换为执行计划,它由一系列依赖于系统的操作组成,如Spark或MapReduce作业。
- BD在底层系统上运行生成的执行计划,然后收集所有的违规行为和这个执行产生的可能的修复,因此通过为逻辑运算符提供几行代码,用户可以获得并行数据处理框架的优势。
- 逻辑层
- 其他
- BD一旦收集了一系列违规和可能的修复,就会继续修复(清楚)脏数据,此处修复过程和规则数量以及其语义无关,因为修复算法只考虑了一组违规行为及可能的修复。
- 在Chap5,论文提出了两种不同的方法来实现分布式设置中的现有算法,扩展中保留了原始算法的正确性和中止属性,专业的用户可以插入自己的修复算法。在扩展算法中,每个修复步骤都可以通过possible fixes贪心地消除冲突,并最小化成本函数(见2.1节)。
- 注意,修复步骤可能会引入新的违规,并且新的步骤可能决定再次更新这些单元,所以为了确定终止,算法在迭代了固定次数以后(用户自定义),在这种单元上放置一个特殊变量,从而消除未来在同一个数据上产生新的冲突的可能性。
- BD一旦收集了一系列违规和可能的修复,就会继续修复(清楚)脏数据,此处修复过程和规则数量以及其语义无关,因为修复算法只考虑了一组违规行为及可能的修复。
2.Rule Specification
- 前言
- 五个逻辑运算符:Scope,Block,Iterate,Detect,GenFix
- 后两个是为数据清洗过程建模的两个通用运算符
- 前三个确保了BD高效、可扩展地执行。
- Scope减少了必须处理的数据量
- Block减少了候选冲突生成的搜索空间
- Iterate有效地便利已经被缩小的搜索空间,从而生成所有候选冲突
- 注意,这五个运算符本身不修改修复过程,系统将这些操作符与生成的或用户提供的BD作业转化成逻辑计划。
- 五个逻辑运算符:Scope,Block,Iterate,Detect,GenFix
- Logical Operators
- 如前所述,DB通过数据单元Us来定义输入的数据,逻辑操作符也是运行在这上面的。它虽是个细粒度的模型,但是它允许以高度并行的方式应用运算符减少成本。
- 五个运算符的定义(系统会自动为声明性规则声称表):
- Scope:从数据集中删除不相关的数据单元(prune?)
- 如论文图2中,Scope根据φF,将原数据库进行删减仅仅保留了zipcode和city的数据。
- Block:将共享了相同的blocking key的数据进行分组
- 对每个数据单元U,Block会输出一个阻塞键
- Block运算符可以增加BD的可扩展性,因为它可以缩小可能发生违规的数据单元数量。如论文图2中,Block根据属性zipcode对元组进行分组,使得三个块拥有不同的zipcode。这样分组后,冲突仅可能发生在块内,而不会跨块。
- Iterate:定义如何组织数据单元产生候选冲突
- 数据单元列表组成的列表将作为输入,输出一个U,或者一个U组成的列表
- 此运算符可以避免以O(n^2)的复杂度产生候选冲突。如图二中,Iterate通过每个块内的两个元组的每个唯一组合,仅仅产生四对,而不是13对。
- Detect:将单个U/一对U或一个列表oUs作为输入,输出一个冲突列表,可能为空。
- 上述三种输入类型可以用来区分输入的不同粒度,以此实现更好的并行化。
- GenFix:为冲突计算一个可能的修复集合。
- 如,若只能修改右侧值,GenFix会为每个检测到的违规产生一个可能的修复:t2 [city] = t4 [city],t6 [city] = t4 [city].
- Scope:从数据集中删除不相关的数据单元(prune?)
- 另外,为了更好的指定不同运算符之间的数据流,我们引入一个标签来标记数据项并跟踪它的处理方式。
- 和DBMS相反,BD的操作符实UDF,允许用户插入任何逻辑,因此我们不限制特定的数据模型。但为了便于说明,我们所有的例子都基于关系数据模型。
- 规划过程
- BD的逻辑层将一组标记的逻辑运算符与作业一起作为输入,并输出逻辑计划。通过检查是否定义了所有被引用的逻辑运算符并且至少一个Detect被指定来确定提交的工作是否正确,以此启动系统。
- 在验证了提交的作业之后,BD生成一个逻辑计划:
- 必须至少有一个输入数据集Di
- 可能有一个或多个Scope运算符
- 可能有一个Block操作符或更多链接到Iterate操作符
- 必须至少有一个可能产生冲突集合的Detect操作符