Transcription

1 The VLDB Journal (2014) 23: DOI /s z REGULAR PAPER Sampling from repairs of conditional functional dependency violations George Beskales Ihab F. Ilyas Lukasz Golab Artur Galiullin Received: 1 July 2012 / Revised: 8 March 2013 / Accepted: 9 April 2013 / Published online: 26 April 2013 Springer-Verlag Berlin Heidelberg 2013 Abstract Violations of functional dependencies (FDs) and conditional functional dependencies (CFDs) are common in practice, often indicating deviations from the intended data semantics. These violations arise in many contexts such as data integration and Web data extraction. Resolving these violations is challenging for a variety of reasons, one of them being the exponential number of possible repairs. Most of the previous work has tackled this problem by producing a single repair that is nearly optimal with respect to some metric. In this paper, we propose a novel data cleaning approach that is not limited to finding a single repair, namely sampling from the space of possible repairs. We give several motivating scenarios where sampling from the space of CFD repairs is desirable, we propose a new class of useful repairs, and we present an algorithm that randomly samples from this space in an efficient way. We also show how to restrict the space of repairs based on constraints that reflect the accuracy of different parts of the database. We experimentally evaluate our algorithms against previous approaches to show the utility and efficiency of our approach. Keywords Data cleaning Conditional functional dependency Integrity constraint violation Sampling repairs G. Beskales (B) I. F. Ilyas Qatar Computing Research Institute, Doha, Qatar I. F. Ilyas L. Golab A. Galiullin University of Waterloo, Waterloo, Canada A. Galiullin 1 Introduction Data quality is a key requirement for effective data analysis and processing. In many situations, the quality of business and scientific data is impaired by various sources of noise (e.g., heterogeneity of data formats, imperfection of information extractors, and imprecision of data generating devices). This leads to data quality problems such as missing values [14,26], violated integrity constraints [4,9,23], and duplicate records [16,27]. These problems cost enterprises billions of dollars annually and may have unpredictable consequences in mission-critical tasks [15]. Databases that experience data quality problems are usually referred to as unclean/dirty databases. The process of data cleaning refers to detecting and correcting errors in the data. A great deal of effort has been directed to improving the effectiveness and efficiency of data cleaning. Functional dependencies (FDs) can be thought of as integrity constraints that encode data semantics. In that sense, violations of FDs indicate deviations from the expected semantics, possibly caused by data quality problems. In practice, FDs tend to break after integrating heterogeneous data or extracting data from the Web. Even in a traditional database, unknown FDs may be hidden in a complex evolving schema, or the database administrator may choose not to enforce some FDs for various reasons. For example, Fig. 1 shows a database instance and a set of FDs, some of which are violated (e.g., tuples t 2 and t 3 violate ZIP City, tuples t 2 and t 3 violate Name SSN,City, and tuples t 1 and t 4 violate ZIP State,City). There may be many ways to modify a table so that it satisfies a set of FDs. One is to delete the offending tuples (ideally, delete the fewest possible such tuples) such that the remainder satisfies all the FDs [10,11]. For example, we can repair the relation instance in Fig. 1 by deleting t 1 and t 3. However,

2 104 G. Beskales et al. Fig. 1 An inconsistent database and possible repairs deleting an entire tuple may result in loss of clean information iff only one of its attribute values is incorrect. Alternatively, we can modify selected attribute values (we do not consider adding new tuples as this would not fix any existing violations). For example, Fig. 1 shows two possible repairs obtained by modifying some attribute values; question marks indicate that an attribute value (to which we refer as a cell) can be modified to one of several values in order to satisfy the FDs. One extension of FDs is conditional functional dependencies (CFDs), which are frequently used in the context of data cleaning [8,12,17]. A CFD consists of a template FD and a tableau that contains a set of patterns. The role of the patterns is restricting the scope of the template FD to a specific set of tuples in the database instance and/or restricting the righthand-side (RHS) attribute of the template FD to a certain constant. Clearly, FDs represent a subclass of CFDs. For instance, an example CFD defined on the database in Fig. 1 is (City State, ( LA, CA )). This CFD indicates that FD City State holds for tuples with City = LA. Also,State must be equal to CA for these tuples. Another CFD is (State, ZIP City,( MI,_,_)), which indicates that the FD State, ZIP City holds for tuples with State = MI. In this paper, we present a novel approach to resolving violations of FDs and CFDs, which is to sample from the space of possible repairs. Our technique is complementary to existing data quality and cleaning tools, and, as we will show, it is useful in various practical situations. 1.1 Motivating examples Independently of how we choose to repair constraint violations, different repair frameworks have appeared in previous work. One approach is to produce a single, nearly optimal repair, in terms of the number of deletions or attribute modifications (e.g., [9,12,23]). For instance, we might prefer Repair 2 in Fig. 1 because it makes fewer modifications. The main shortcoming of this approach is that all other possible repairs, including other minimal repairs, are discarded. A second approach consistent query answering computes answers to selected classes of queries that are valid in every reasonable repair [4,10,11,20,30,31]. In Fig. 1, a consistent answer of the query that selects all tuples with ZIP code 90101, with respect to the two illustrated repairs, is {t 4 }. However, consistent query answering may produce empty results iff there are multiple ways of repairing the same tuple. A third approach is to have a domain expert manually clean the data. Unfortunately, this approach does not scale well with the data size and requires constant attention from the expert. We argue that one-shot cleaning algorithms and consistent query answering do not address the needs of at least the following applications. Interactive data cleaning Consider an interactive data cleaning process, where several possible CFD repairs (of a whole table, a subset of a table, or a single tuple) are suggested to the user. The user may then perform some of the suggested repairs and request a new set of suggestions, in which previously performed repairs do not change. For example, in Fig. 1, Repair 1 and Repair 2 provide two alternatives for modifying each tuple in the database. A user might prefer changing t 1 according to Repair 1 and prefer changing t 2 according to Repair 2. Note that this application is not tied to a specific query, so consistent answers are not suitable. Moreover, the application requires several suggested repairs, but not necessarily all possible repairs, to be generated at any given time. Hence, computing a single repair is not sufficient. Uncertain query answering We can generalize the notion of consistent query answering to an approach that computes probabilistic query answers as though each possible repair was a possible world. Even if generating all repairs is intractable, computing a subset of the possible repairs may be sufficient to obtain meaningful answers. One example of such a framework is the Monte Carlo Database (MCDB) [22]. Again, computing a single repair or a consistent query answer is not sufficient for this application. 1.2 Challenges and contributions Our motivating applications have the following requirements and challenges in common. Due to the exponential space of possible FD and CFD repairs, we may not be able to, or may not want to, generate all possible repairs. Instead, the challenge lies in finding a meaningful subset of repairs that is sufficiently large and can be generated in an efficient way.

3 Sampling from repairs of Conditional functional dependency violations 105 We need to ensure that the constraints that reflect the user s confidence in the data (e.g., specifying which cells must remain unchanged) are satisfied during the repairing process. In this paper, we propose a novel data cleaning technique that accommodates our motivating applications and addresses the above challenges. Our approach is based on efficiently generating a sample from a meaningful repair space. Our contributions in this paper are as follows. We introduce a novel space of possible repairs, called cardinality-set-minimal, that combines the advantages of two existing spaces: set-minimal and cardinalityminimal. We give an efficient algorithm for generating a sample of cardinality-set-minimal repairs of FD violations. A major challenge here is the interplay among violations of FDs: repairing a tuple that violates one FD may introduce a new violation of another FD. Note that although existing heuristics for finding a single nearly optimal repair may be modified to generate multiple random repairs, they do not give any guarantees on the space of generated repairs (more details in Sect. 9). We introduce a mechanism that partitions the input instance into disjoint blocks that can be repaired independently in order to significantly improve the efficiency of repair sampling. We describe a modification of our approach that allows users to specify constraints on the set of cells that reflect the user s confidence in the accuracy of data. We use a confidence model that is different from previous work (e.g., [9,12,23]), where database tuples are associated with weights reflecting their accuracy (refer to Sects. 3, 5.3, and 9.2). We extend our sampling algorithm to generate repairs of CFD violations. We also conduct an experimental study to show the scalability of our repair sampling technique. The remainder of the paper is organized as follows. In Sect. 2, we describe the notation used in this paper. In Sect. 3, we define our space of possible repairs. In Sect. 4, we discuss repairing violations of a single FD. In Sect. 5, we introduce our approach to sample from the new space of possible repairs for violations of multiple FDs and we show how to enforce user-defined hard constraints. In Sect. 6, we improve the efficiency of the sampling algorithm by partitioning the data into separately repairable blocks. In Sect. 7, we extend our sampling algorithm to support CFDs. In Sect. 8, we present an experimental study of our sampling approach. In Sect. 9,we discuss related work and explain why previous data cleaning algorithms cannot be extended to generate a sample from a well-defined space of repairs. We conclude the paper with final remarks in Sect Notation and definitions Let R be a relation schema consisting of m attributes, denoted (A 1,...,A m ). We use the notation A 1, A 2,...,A k to represent the union of the concatenated attributes (i.e, {A 1, A 2,...,A k }). Let Dom(A) be the domain of an attribute A. We denote by I an instance of R consisting of n tuples, each of which belongs to the domain Dom(A 1 )... Dom(A m ) and has a unique identifier. We denote by TIDs(I ) the identifiers of tuples in I and use the terms tuple and tuple identifier interchangeably. Let ADom(A, I ) be the active domain of attribute A in I, which is defined as the set of values of attribute A that appear in tuples of I (i.e., ADom(A, I ) = Π A (I )). We refer to an attribute A R of a tuple t TIDs(I ) as a cell. Each cell C is identified by a pair (t, A) consisting of the tuple t TIDs(I ) and the attribute A R. Fora set of attributes X R, we denote by (t, X) the set of cells {(t, A) : A X}. We denote by CIDs(I ) ={(t, A) : t TIDs(I ), A R} the set of all cell identifiers in I.We denote by I (t, A) the value of a cell (t, A) in an instance I. If the instance I is clear from the context, we write t[a] instead of I (t, A). For two attribute sets X, Y R, anfdx Y holds on an instance I, denoted I X Y, iff for every two tuples t 1, t 2 in I such that t 1 [X] =t 2 [X], t 1 [Y ]=t 2 [Y ].Thesetof FDs defined over R is denoted as Σ. We assume that Σ is minimal and in canonical form [2]; each FD is in the form X A, where X R and A R. I is inconsistent with respect to Σ iff I violates at least one FD in Σ. For an FD X A, we refer to X as the left-hand-side (LHS) attributes, and we refer to A as the RHS attribute. A recent generalization of FDs, named CFDs, has been proposed in [8]. CFDs are regular FDs that are defined only on a subset of tuples. A CFD is defined as a pair (X A, t c ), where X A is an FD, and t c is a (pattern) tuple whose attributes are XA. Each attribute of t c can be either a constant or an unnamed variable _. An instance tuple t matches pattern tuple t c on X, written t[x] t c [X], iff B X (t c [B] = t[b] t c [B] = _). CFDs are divided into two variants: variable CFDs, where t c [A] =_, and constant CFDs, where t c [A] is a constant. A variable CFD (X A, t c ) indicates that for any two tuples t 1, t 2, t 1 [X] = t 2 [X] t c [X] t 1 [A] = t 2 [A]. A constant CFD (X A, t c ) indicates that for each tuple t, t[x] t c [X] t[a] =t c [A]. Without loss of generality, we assume that for a constant CFD (X A, t c ), all values in t p [X] are constant [17].

4 106 G. Beskales et al. For example, consider a relation Address (StreetNumber, StreetName, City, Country, PostalCode). A constant CFD defined over Address is (PostalCode City, (N2L3G1, Waterloo)), which indicates that for all tuples with PostalCode = N2L3G1, City must be equal to Waterloo. An example of a variable CFD on relation Address is (Country, PostalCode StreetName, (UK, _, _)), which indicates that for pairs of tuples with Country = UK and equal values of PostalCode, their StreetName values must be equal. In general, there is a large number of FD repairs for a given database instance. In this paper, we use the notion of V-instances, which was introduced in [23], to concisely represent data instances. In V-instances, cells can be either set to constants or to variables that can be instantiated in a specific way. Definition 1 (V-instance) Given a set of variables {v1 A, v2 A,...} for each attribute A R, a V-instance of R is an instance of R where each cell (t, A) can be assigned to either a constant in Dom(A) or a variable from the set {v1 A,vA 2,...}. A V-instance I represents multiple ground (i.e., variable free) instances of R that can be obtained by assigning variables in I as follows. Each variable vi A in attribute A in I can be assigned to any value from Dom(A)\ADom(A, I ) and such that no two distinct variables vi A and v A j have equal values. Finding at least one ground instance for a V-instance is always possible iff the number of domain values for each attribute is larger than the number of tuples in the input database (e.g., in case of unbounded and high-cardinality domains). In this paper, we assume that all attributes satisfy this condition. Handling the case in which attribute domains are bounded and have low cardinality is left for future work. The main use of variables in the context of repairing FD violations is representing unknown values that emerge from modifying the LHS attributes of a violated FD. In the remainder of the paper, we refer to a V-instance as simply an instance. 3 Spaces of possible repairs A repair of an inconsistent instance I with respect to a set of FDs Σ is another instance I that satisfies Σ. In general, violations of FDs can be repaired by either deleting erroneous tuples (e.g., [10,24]) or changing erroneous cells (e.g., [9,23]). In this paper, we only consider repairs obtained by modifying tuple attributes. An FD repair is formally defined as follows: Definition 2 (FD repair) Given a set of FDs Σ defined over a relation R, and an instance I of R that does not satisfy Σ, a repair of I is another instance I of R such that I Σ, TIDs(I ) = TIDs(I ) and CIDs(I ) = CIDs(I ). That is, a repair I of an inconsistent instance I is an instance that satisfies Σ and has the same set of tuple and cell identifiers (i.e., tuples or columns are not added or deleted). We denote by Repairs(I,Σ) the set of all possible repairs of an instance I w.r.t. Σ. LetΔ(I, I ) be the identifiers of cells that have different values in I and I, that is, Δ(I, I ) = {C CIDs(I ) : I (C) = I (C)}. For example, in Fig. 2, Δ(I, I 2 ) ={(t 2, B), (t 3, B)}. Also,we denote by λ(i, I ) the set of changes made in I in order to obtain I, where each change is represented as a pair of a cell and the new value assigned to this cell in I. Formally, λ(i, I ) ={(C, x) : I (C) = I (C) x = I (C)}. For example, in Fig. 2, λ(i, I 4 ) ={((t 1, A), 7), ((t 1, B), 3)}. It is useful to filter out repairs that are less likely to represent the actual clean database. A widely used criterion is the minimality of changes (e.g., [9 12,21,23]). Frequently used definitions for minimality of changes are described as follows. Definition 3 (Cardinality-minimal repair [23]) A repair I of I is cardinality-minimal iff there is no repair I of I such that Δ(I, I ) < Δ(I, I ). That is, a repair I of I is cardinality-minimal iff the number of changed cells in I is the minimum across all repairs of I. A weighted version of the cardinality-minimal repairs is used in [9,12]. Each cell C is associated with a weight in the range [0, 1], denoted w(c), reflecting the confidence placed by user in the accuracy of C. Also, the distance between any two values x and y is measured using a distance function dis(x, y). The cost of a repair I of I is defined as follows. cost(i, I ) = w(c) dis ( I (C), I (C) ) (1) C Δ(I,I ) Definition 4 (Cost-minimal repair [9]) A repair I of I is cost-minimal iff there is no repair I of I such that cost(i, I )<cost(i, I ). Another definition of minimal repairs uses set-containment for describing minimality of changes. Definition 5 (Set-minimal repair [4,24]) A repair I of I is set-minimal iff there is no repair I of I such that λ(i, I ) λ(i, I ). That is, a repair I of I is set-minimal if no strict subset of the changed cells in I can be reverted to their original values in I without violating Σ. Note that we use the symbol to indicate strict (proper) subset (also written as in other publications). Previous approaches that generate a single repair of an inconsistent relation instance typically find a nearly optimal

5 Sampling from repairs of Conditional functional dependency violations 107 Fig. 2 Examples of various types of repairs Fig. 3 The relationship between spaces of possible repairs cost-minimal or cardinality-minimal repair (finding a costminimal or a cardinality-minimal repair is NP-hard [9,10, 23]). In contrast, prior work on consistent query answering considers set-minimal repairs [11,21]. Repairs that are not set-minimal are not desirable since they involve unnecessary changes [4,11,24]. We introduce a novel space of repairs called cardinalityset-minimal. Our goal is to provide a space of repairs that can be sampled in an efficient manner and is neither too restrictive (e.g., cost-minimal or cardinality-minimal) nor too large (e.g., set-minimal). Definition 6 (Cardinality-set-minimal repair) A repair I of I is cardinality-set-minimal iff there is no repair I of I such that Δ(I, I ) Δ(I, I ). That is, a repair I of I is cardinality-set-minimal iff no subset C of the changed cells in I can be reverted to their original values in I without violating Σ, even if we allow modifying the cells in Δ(I, I )\C to other values. In Fig. 2, we show various types of repairs of an instance I, with the changed cells grayed out. Repair I 1 is cardinalityminimal because no other repair has fewer changed cells. Repair I 1 is also cardinality-set-minimal and set-minimal. Repairs I 2 and I 3 are set-minimal because reverting any subset of the changed cells to the values in I will violate A B. On the other hand, I 3 is not cardinality-set-minimal (or cardinality-minimal) because reverting t 2 [B] and t 3 [B] back to 3 and changing t 1 [B] to 3 instead of 5 gives a repair of I, which is the same as I 1. Repair I 4 is not set-minimal because I 4 still satisfies A B after reverting t 1 [A] to 1. The relationship among various minimal repairs is depicted in Fig. 3 and described in the following lemma. Lemma 1 The set of cardinality-minimal repairs is a subset of cardinality-set-minimal repairs. The set of cardinality-setminimal repairs is a subset of set-minimal repairs. Finally, the set of cost-minimal repairs is a subset of set-minimal repairs if for each cell C CIDs(I ), w(c) >0. Proof For any two repairs I and I of I, Δ(I, I ) Δ(I, I ) Δ(I, I ) < Δ(I, I ) This implies that for any repair I of I, I Repairs(I,Σ) ( Δ(I, I ) < Δ(I, I ) ) I Repairs(I,Σ) ( Δ(I, I ) Δ(I, I ) ) Therefore, if I is a cardinality-minimal repair, I is cardinality-set-minimal. Similarly, for any two repairs I and I of I, λ(i, I ) λ(i, I ) Δ(I, I ) Δ(I, I ) C Δ(I, I ) ( I (C) = I (C) ) and thus, λ(i, I ) λ(i, I ) Δ(I, I ) Δ(I, I ) I Repairs(I,Σ) ( Δ(I, I ) Δ(I, I ) ) I Repairs(I,Σ) ( λ(i, I ) λ(i, I ) ) Thus, if I is a cardinality-set-minimal repair, I is setminimal as well. Since dis is a distance function, for each two different values x and y, dis(x, y) >0. Also, for each cell C, w(c) >0. It follows: λ(i, I ) λ(i, I ) cost(i, I )<cost(i, I ) and, I Repairs(I,Σ) ( cost(i, I ) cost(i, I ) ) I Repairs(I,Σ) ( λ(i, I ) λ(i, I ) ) In other words, if I is a cost-minimal repair, I is setminimal as well. In general, cost-minimal repairs are not necessarily cardinality-minimal or cardinality-set-minimal, and vice versa. However, for a constant weighting function w (i.e.,all cells are equally trusted) and a constant distance function dis (i.e., the distance between any pair of values is the same), the set of cost-minimal repairs and the set of cardinality-minimal repairs coincide.

6 108 G. Beskales et al. 4 Repairing violations of a single FD In this section, we discuss how to generate various types of repairs when Σ consists of a single FD. First, we define the concept of clean cells and relate it to cardinality-minimal and cardinality-set-minimal repairs. We define a clean set of cells C CIDs(I ) with respect to a set of FDs Σ as follows. Definition 7 (Clean cells) A set of cells C in an instance I is clean iff there is at least one repair I Repairs(I,Σ)such that C C, I (C) = I (C). That is, a set of cells in an instance I is clean if their values in I can remain unchanged while obtaining a repair of I. For example, in Fig. 2, thesets{(t 1, A), (t 1, B), (t 2, A)} and {(t 1, B), (t 2, A), (t 2, B)} are clean, while the set {(t 1, A), (t 1, B), (t 2, A), (t 2, B)} is not clean. Definition 8 (Maximum set of clean cells) A set of cells C is a maximum clean set iff C is clean and no other clean set has greater cardinality than C. For example, {(t 1, A), (t 2, A), (t 2, B), (t 3, A), (t 3, B)} and {(t 1, B), (t 2, A), (t 2, B), (t 3, A), (t 3, B)} in Fig. 2 are maximum clean sets. Definition 9 (Maximal set of clean cells) AsetofcellsC is a maximal clean set iff C is clean and no strict superset of C is clean. For example, the sets {(t 1, A), (t 1, B), (t 2, A), (t 3, B)} and {(t 1, A), (t 2, A), (t 2, B), (t 3, A), (t 3, B)} in Fig. 2 are maximal clean sets. In the following theorem, we establish the link between clean cells and cardinality-minimal and cardinality-setminimal repairs. Theorem 1 Given an input instance I and a set of FDs Σ, a repair I of I with respect to Σ is cardinality-set-minimal iff the set of unchanged cells in I (i.e., C I Ds(I )\Δ(I, I )) is a maximal clean set of cells. A repair I of I with respect to Σ is cardinality-minimal iff the set of unchanged cells in I is a maximum clean set. Proof We prove the if condition of the first statement as follows. Let C = CIDs(I )\Δ(I, I ) be a maximal clean set of cells. We cannot add any cell to C without making C unclean. Based on the definition of clean cells (Definition 7), there does not exist any other repair of I that has a set of unchanged cells C that is a strict superset of C (i.e., I Repairs(I, Σ)(Δ(I, I ) Δ(I, I )). Thus, I is a cardinality-set-minimal repair. We prove the only if condition of the first statement as follows. Let I be a cardinality-set-minimal repair of I.The set C = CIDs(I )\Δ(I, I ) is a clean set of cells because I is a repair. Because I is cardinality-set-minimal, no cells in Δ(I, I ) can be reverted back to their original values without violating Σ, even if we allow remodifying other changed cells (i.e., I Repairs(I, Σ)(Δ(I, I ) Δ(I, I ))). It follows that we cannot extend C by adding one or more cells without violating the clean cells property. It follows that C is a maximal clean set of cells. Similarly, we can prove the second statement in the theorem by replacing the set-containment minimality criterion with the set-cardinality-minimality criterion. In general, obtaining a maximum clean set of cells (and hence a cardinality-minimal repair) is NP-complete [23]. However, as we will show shortly, finding a maximum clean set of cells for a single FD can be done in PTIME. On the other hand, obtaining a maximal clean set of cells (and hence a cardinality-set-minimal repair) can still be done in PTIME for multiple FDs (Sect. 5). Based on Theorem 1, we can generate a cardinality-setminimal repair by obtaining a maximal clean set and modifying the remaining cells suitably. In this section, we assume there is a single FD in Σ, and we extend our algorithm to multiple FDs in Sect. 5. Assuming that Σ contains an FD X A, we describe in Algorithm 1 how to generate a maximal clean set of cells, namely CleanSet, and how to change the cells outside CleanSet in order to obtain a cardinalityset-minimal repair. Algorithm 1 is a randomized algorithm and thus invoking it multiple times gives a random sample of cardinality-setminimal repairs. Moreover, it is possible to modify the algorithm to generate cardinality-minimal repairs (for a single FD) as we show later in this section. Algorithm 1 Gen-Repair-1FD(I,X A) 1: CleanSet 2: I I 3: for each tuple t TIDs(I ) (based on a random iteration order) do 4: if (t, XA) CleanSet such that I (t, X) = I (t, X) and I (t, A) = I (t, A) then 5: randomly select k 1 cells from (t, X) {(t, A)} and add them to CleanSet,wherek is the number of attributes in X {A} 6: else 7: add (t, X) and (t, A) to CleanSet 8: end if 9: end for 10: for each cell (t, A i ) CIDs(I )\CleanSet do 11: if A i X (i.e., A i is a left-hand-side attribute) then 12: assign any value c Dom(A i ) to I (t, A i ) such that (t, XA) CleanSet where I (t, X) = I (t, X) I (t, A) = I (t, A) 13: else 14: locate a tuple t such that (t, XA) CleanSet and I (t, X) = I (t, X) 15: I (t, A) I (t, A) 16: end if 17: add (t, A i ) to CleanSet 18: end for 19: return I

7 Sampling from repairs of Conditional functional dependency violations 109 Fig. 4 An example of repairing violations of a single FD A B In lines 3 9, the algorithm iterates over the tuples in I in random order and expands the set CleanSet by inserting cells that are consistent with the cells already in CleanSet.In lines 10 18, unclean cells are updated accordingly to obtain a cardinality-set-minimal repair I. The set CleanSet constructed in lines 3 9 represents a clean set of cells because (1) all complete tuples in the set CleanSet are consistent w.r.t. X A, and (2) we can find an assignment to the cells that are not in CleanSet such that X A is not violated. That is, for each tuple t such that (t, X) CleanSet and (t, A) CleanSet,weset(t, A) to the value of A of the first tuple processed by the algorithm with attributes X equal to t[x]. Also, for each tuple t such that (t, B) CleanSet, for an attribute B X, and (t, A) CleanSet, we assign (t, B) to a value from Dom(B) that results in no violations of X A. Such a value must exist, assuming that Dom(B) is unbounded. The set CleanSet is a maximal clean set since adding any cell (t, A i ) from CIDs(I )\CleanSet to CleanSet results in a violation of X A. Thus, the constructed instance is a cardinality-set-minimal repair. In order to generate a sample of cardinality-set-minimal repairs, we run Algorithm 1 multiple times. Each run will generate a maximal clean set (by iterating over each tuple in random order in line 3) and modify the remaining tuples to satisfy the FD. In Fig. 4, we show an example of repairing a single FD A B. To generate a cardinality-set-minimal repair, we first obtain a maximal clean set of cells; say the algorithm chooses {(t 1, A), (t 1, B), (t 2, B), (t 3, A)}. Then, we obtain a cardinality-set-minimal repair by setting the value of the unclean cell (t 2, A) to 2 and (t 3, B) to 2. Obtaining a maximum clean set of cells, and hence, a cardinality-minimal repair can be performed in PTIME when Σ contains a single FD. To do so, lines 3 9 in Algorithm 1 can be changed as follows to obtain a maximum clean set. For each group of tuples with the same value of attributes X, we first insert (t, XA) into CleanSet for each tuple t whose attribute A is associated with the most frequent value of A across all tuples in the group. For the remaining tuples in the group, we insert randomly selected k 1 cells per tuple, where k = X {A}. Clearly, each one of these tuples must have at least one cell changed, which is the cell that is not inserted into CleanSet. Thus, it is not possible to obtain a clean set of cells with greater cardinality than CleanSet (i.e., CleanSet is a maximum clean set of cells). Updating the unclean cells in lines remains unchanged. For example, returning to Fig. 4, the value 3 is the most frequently occurring value of B for A = 1, so first we add (t 2, A), (t 2, B), (t 3, A), and (t 3, B) to CleanSet., Then, we consider (t 1, A) and (t 1, B) next. The latest cell inserted into CleanSet is modified to resolve the violation. For example, if (t 1, A) is considered first in line 3, we will change the value of (t 1, B) from two to three in line 15. Otherwise, we will change the value of (t 1, A) from one to, say, two, in line Sampling possible repairs for multiple FDs The results indicated by Theorem 1 carry over to the case of multiple FDs in Σ. However, obtaining a maximum clean set is now equivalent to obtaining a repair with the minimum number of cell changes, which is NP-hard [23]. Fortunately, generating a maximal clean set remains doable in PTIME, as we show in this section. The sampling space should be neither too restrictive (and thus missing too many repairs) nor too large (and thus sampling repairs with very low probability of being correct). We argue that the cardinality-set-minimal space provides this balance, and we thus target sampling from this space. Our sampling algorithm for multiple FDs is based on Theorem 1. We randomly pick a maximal clean set of cells C, and then, we randomly change cells outside C in a way that satisfies Σ. The organization of this section is as follows. First, we provide an algorithm to detect whether a set of cells is clean in Sect. 5.1, and we show how to generate a maximal clean set of cells. Then, we introduce a sampling algorithm in Sect. 5.2 that samples from the space of cardinality-setminimal repairs. In Sect. 5.3, we define two forms of hard constraints that specify the user confidence in cells and we show how to enforce them. 5.1 Generating a maximal clean set of cells In the following, we determine whether a set of cells is clean. We observe that it is not enough to verify that the cells in C do not violate any FDs, that is, checking that (t 1, XA), (t 2, XA) C, X A Σ such that (t 1 [X] = t 2 [X] t 1 [A] = t 2 [A])). For example, consider Fig. 5, which shows a set of non-empty cells in an instance. Assume that we need to determine if the shown cells are clean. Although the shown cells do not directly violate any FD in Σ (i.e., we cannot find a pair of tuples that violates Σ), no repair may contain the current values of those cells regardless of the val-

8 110 G. Beskales et al. Fig. 5 Checking whether the six non-empty cells are clean ues of the other cells. This is because t 1 [A] =t 2 [A] implies t 1 [C] =t 2 [C] (by A C) and t 2 [B] =t 3 [B] implies that t 2 [C] =t 3 [C] (by B C). Thus, t 1 [C], t 2 [C] and t 3 [C] have to be equal in any repair. However, t 1 [C] = t 3 [C] in the shown instance. To determine whether a set of cells C is clean, we need to capture the equality constraints over the cells in I that are imposed by the FDs in Σ. Then, we check for contradictions between these constraints and the values of cells in C. We model equality constraints as an equivalence relation over cells in I, denoted E. Equivalence relations have been used for the same purpose in previous data cleaning algorithms (e.g., [9,12]). We denote by ec(e, C i ) the equivalence class E E to which a cell C i belongs according to E. We denote by merging two equivalence classes in E replacing them by a new equivalence class that is equal to their union. Algorithm 2 builds the equivalence relation E given a set of cells C in an instance I. Algorithm 2 BuildEquivRel(C,I,Σ) 1: let TIDs(C) be the set of tuple identifiers involved in C, {t : (t, A) C} 2: let Attrs(C) be the set of attributes involved in C, {A : (t, A) C} 3: let E be an initial equivalence relation on the set {(t, A) : t TIDs(C), A Attrs(C)} such that the cells in C that belong to the same attribute and have equal values in I are in the same equivalence class, and all other cells outside C belong to separate (singleton) classes 4: while t 1, t 2 TIDs(C), A Attrs(C), X Attrs(C), X A Σ such that B X (ec(e,(t 1, B)) = ec(e,(t 2, B))), and ec(e,(t 1, A)) = ec(e,(t 2, A)) do 5: merge the equivalence classes ec(e,(t 1, A)) and ec(e,(t 2, A)) 6: end while 7: return E Figure 5 shows an example of the initial and final equivalence relations that are built by Algorithm 2. The equivalence class {(t 1, C), (t 2, C), (t 3, C)} in the final equivalence relation indicates that these three cells must be equal in any repair in which the six non-empty cells are unchanged. This is clearly infeasible since (t 1, C) and (t 3, C) have different values, which means that the set of six non-empty cells is not clean. In general, a set of cells C in I is clean with respect to Σ, denoted isclean(c, I,Σ,E), iff every two cells in C that belong to the same equivalence class in E have the same value in I. Lemma 2 Given a set of cells C in an instance I and a set of FDs Σ, let E be the outcome of procedure BuildEquivRel(C, I,Σ). C is clean iff C i, C j C, ec(e, C i ) = ec(e, C j ) implies that I (C i ) = I (C j ). Proof We prove the only if direction as follows. Let C be a clean set of cells in I, and let I be the non-empty subset of repairs of I whose cells in C are unchanged (i.e., I I (Δ(I, I ) C = )). The proof consists of two steps. We first prove that each pair of cells in I belonging to the same equivalence class in E have equal values in every I I. Second, we prove that each pair of cells in C belonging to the same equivalence class in E have equal values in I. We prove the first part as follows. Based on Algorithm 2, for every two cells (t 1, A) and (t 2, A) that belong to the same equivalence class, we have two possibilities: (t 1, A) and (t 2, A) were placed in the same equivalence class in line 3 in Algorithm 2. In other words, (t 1, A) and (t 2, A) belong to C and I (t 1, A) = I (t 2, A), and thus, I (t 1, A) = I (t 2, A) for all I I,or (t 1, A) and (t 2, A) were placed in the same equivalence class in line 5 in Algorithm 2. In this case, there must exist an FD X A Σ such that for all B X, (t 1, B) and (t 2, B) belong to the same equivalence class. Recursively, we can prove that for all B X, I (t 1, B) = I (t 2, B). The fact that I X A implies that I (t 1, A) = I (t 2, A). The second part of the proof is trivial since each cell in C has the same value in I and all repairs in I, and thus C i, C j C (ec(e, C i ) = ec(e, C j ) I (C i ) = I (C j )). We prove the if direction as follows. Consider the case where C i, C j C (ec(e, C i ) = ec(e, C j ) I (C i ) = I (C j )). We need to prove that the set I (i.e., the set of repairs of I that do not change cells in C) is not empty. We construct one instance I I as follows. We assign each cell in C in I to the same value in I (i.e., C C, I (C) = I (C)). We iterate over all other cells outside C in random order. Each cell that belongs to a singleton equivalence class in E or belongs to a tuple that is not mentioned in C is set to a new variable. For each cell C that belongs to a non-singleton equivalence class E E that includes at least one cell with an assigned value (call it x), we set I (C) to x. Finally, for each cell C that belongs to a non-singleton equivalence class E E whose cells are not assigned to any values yet, we assign C toanew variable. Now, we show that the constructed instance I is indeed a repair. The construction method of I as well as the fact that C i, C j C (ec(e, C i ) = ec(e, C j ) I (C i ) = I (C j )) ensure that cells belonging to the same equivalence class in

9 Sampling from repairs of Conditional functional dependency violations 111 E are assigned to the same value in I. Also, all cells in I that have equal values belong to the same equivalence class. This is true for cells assigned to variables in I since we can only assign a cell C to an old variable v i if C belongs to an equivalence class that contains another cell already assigned to v i. On the other hand, a cell C can be assigned to a constant c only if C belongs to an equivalence class that contains one or more cells from C whose values are equal to c. Also, Algorithm 2 places all cells in C with the same value into the same equivalence class. It follows that cells in I that are assigned to constants and have equal values are in the same equivalence classes. For every two tuples t 1, t 2 I and for every FD X A Σ, I (t 1, X) = I (t 2, X) implies that for all B X, (t 1, B) and (t 2, B) belong to the same equivalence class. Therefore, (t 1, A) and (t 2, A) must belong to the same equivalence class as well (refer to lines 4 6 in Algorithm 2), and thus I (t 1, A) = I (t 2, A). This proves that I Σ and thus I is not empty (i.e., cells in C are clean). Next, we show how to randomly pick a maximal clean setofcells,giveni and Σ. We describe our procedure in Algorithm 3. Algorithm 3 GetMaxCleanSet(I,Σ) 1: DefineasetCleanSet and initialize it to 2: for each cell C CIDs(I ) (based on a random iteration order) do 3: E BuildEquivRel(CleanSet {C}, I,Σ) 4: if isclean(cleanset {C}, I,Σ,E) then 5: CleanSet CleanSet {C} 6: end if 7: end for 8: return CleanSet Algorithm 3 starts with an empty set of clean cells and attempts to add cells to the clean set, one cell at a time, in random order. The algorithm terminates when all the cells have been considered. We prove its correctness below. Lemma 3 The sets of cells returned by Algorithm 3 are maximal clean sets. Proof Given a set of clean cells returned by Algorithm 3, denoted C, we need to prove that for any subset of CIDs(I )\C (call it S), C S is not clean. First, we prove that if a set C is not clean, then any superset of C is not clean as well. Let C 1 and C 2 be two sets of cells in an instance I such that C 1 C 2.LetE 1 (respectively, E 2 )be the outcome of BuildEquivRel(C 1, I,Σ) (respectively, BuildEquivRel(C 2, I,Σ). By analyzing Algorithm 2,we reach that each equivalence class in E 1 must be contained in another equivalence class in E 2. Therefore, if there exist two cells in C 1 that belong to the same equivalence class in E 1 and have different values in I (i.e., C 1 is not clean), the two cells must belong to the same equivalence class in E 2, which means that C 2 is not clean as well. Assume, to the contrary, that S CIDs(I )\C such that C S is clean. Clearly, every cell C in S has been rejected in line 4 in Algorithm 3, which means that C s {C} is not clean, where C s is the subset of C that is constructed up to the point of rejecting C.ThesetC S is a superset of C s {C}. Therefore, C S is not clean, a contradiction. Complexity analysis Let n be the number of tuples in the input instance I and m be the number of attributes in I.In Algorithm 2, the maximum number of merges of equivalence classes is less than the number of tuples that appear in C multiplied by the number of attributes that appear in C. Each merge operation can be done in a constant time (for all practical database sizes) using the find-union algorithm [29]. Therefore, the complexity of Algorithm 2 is in O(n m). Evaluating isclean can be done in O(n m) using a hash table structure. That is, all cells belonging to the same equivalence class are hashed to a unique bucket, and we associate each bucket with the values of the inserted cells so far. Upon insertion of each cell, we only need to compare the cell value to the bucket value to determine the cleanness of the cells. A straightforward implementation of Algorithm 3 has a complexity of O(n 2 m 2 ). 5.2 Sampling cardinality-set-minimal repairs In this section, we present a randomized algorithm for generating cardinality-set-minimal repairs (Algorithm 4). This algorithm is a generalized version of the procedure we described in the proof of Lemma 2. The first step is constructing a maximal clean set of cells, denoted MaxCleanCells (line 2). The algorithm iteratively cleans the cells outside MaxCleanCells and adds them to a set called Cleaned. Initially, Cleaned is equal to MaxCleanCells. In each iteration, the algorithm assigns a value to the current cell (t, A) such that Cleaned {(t, A)} becomes clean. Specifically, if (t, A) belongs to a nonsingleton equivalence class in E that contains other cells previously inserted into Cleaned, the only choice is to set I (t, A) to the same value as the other cells in the equivalence class (lines 6, 7). Otherwise, we randomly choose one of the following three alternative values for I t, A): (1)a constant that is randomly selected from ADom(A, I ), (2)a variable that is randomly selected from the set of variables previously used in attribute A in I, or (3) a new variable v A j (line 8). For the first and second alternatives, we need to make sure that the selected constant or variable makes the set Cleaned {(t, A)} clean. One simple approach is to keep picking a constant (similarly, a variable) at random until this condition is met. In the worst case, we can select up to n constants (similarly, n variables), where n is the number

10 112 G. Beskales et al. 1. Every generated instance I is a repair of I with respect to Σ. 2. Every generated repair I is cardinality-set-minimal. 3. Every cardinality-set-minimal repair of I can be generated by the algorithm. Fig. 6 An example of executing Algorithm 4 of tuples in the input instance. The third alternative, which is setting I (t, A) to a new variable, guarantees that the set Cleaned {(t, A)} becomes clean. In fact, enforcing the third alternative at every iteration reduces Algorithm 4 tothe repairing algorithm described in the proof of Lemma 2.The algorithm terminates when all the cells have been added to Cleaned and returns the resulting instance I. Algorithm 4 Gen-Repair(I,Σ) 1: I I 2: MaxCleanCells GetMaxCleanSet(I,Σ) 3: Cleaned MaxCleanCells 4: E BuildEquivRel(Cleaned, I,Σ) 5: for each (t, A) CIDs(I )\MaxCleanCells (based on a random iteration order) do 6: if (t, A) belongs to a non-singleton equivalence class in E that contains other cells in Cleaned then 7: assign I (t, A) to the value (either a constant or a variable) of the other cells in ec(e,(t, A)) Cleaned 8: else 9: randomly set I (t, A) to one of three alternatives: a randomly selected constant from ADom(A, I ), a randomly selected variable vi A that was previously used in I, or a fresh variable v A j such that Cleaned {(t, A)} becomes clean 10: end if 11: Cleaned Cleaned {(t, A)} 12: E BuildEquivRel(Cleaned, I,Σ) 13: end for 14: return I We show an example of executing Algorithm 4 in Fig. 6. The algorithm obtains a maximal clean set, which is shown as the middle relation, and changes the two unclean cells (t 2, B) and (t 3, A). Because (t 2, B) exists in the same equivalence class as (t 1, B), the algorithm assigns the value of (t 1, B) to (t 2, B). For the cell (t 3, A), the algorithm chooses to assign a fresh variable, v1 A, to it. In the following theorem, we prove the correctness of Algorithm 4. Theorem 2 Every instance that is generated by Algorithm 4 is a cardinality-set-minimal repair. Additionally, all cardinality-set-minimal repairs can be generated by Algorithm 4. Proof We need to prove the following points. First, we prove that every instance I generated by Algorithm 4 is a repair of I with respect to Σ. In other words, we need to show that all cells in a generated repair I represent a clean set. Initially, the set Cleaned = MaxCleanCells is clean with respect to Σ (based on Lemma 3). In each iteration, the algorithm adds a cell to Cleaned and changes this cell to ensure that the resulting version of Cleaned is clean as well. This is done by assigning a value to each newly added cell that satisfies the constraints represented by E. Upon termination, all cells in I are in Cleaned, which indicates that the resulting instance I satisfies Σ. Second, we prove that each generated repair is cardinalityset-minimal. The initial maximal clean set of cells, denoted MaxCleanCells, is not modified throughout the algorithm. Thus, the set of unchanged cells in any generated repair represents a maximal clean set of cells, which indicates that the generated repair is cardinality-set-minimal based on Theorem 1. Third, we prove that every cardinality-set-minimal repair can be generated by Algorithm 4. LetI be one such repair. First, note that I consists of some maximal clean set of cells C (Theorem 1). This clean set will be used by Algorithm 4 if the random iteration order in line 2 of Algorithm 3 is such that all the cells in C are considered first. Next, note that regardless of the iteration order in which Algorithm 4 processes the remaining cells CIDs(I )\C (line 5), each cell C processed in lines 6 10 can be assigned to the value in I to make Cleaned {C} clean. Assuming otherwise implies that there exists a subset of cells in I that is not clean, which contradicts the fact that I is a repair. It follows that any cardinality-setminimal repair I can be generated by Algorithm 4. Complexity analysis Obtaining a maximal clean set of cells costs O(n 2 m 2 ), where n denotes the number of tuples in I and m denotes the number of attributes. In Algorithm 4, the number of iterations is at most equal to the number of cells in I (i.e., n m). In each iteration, Algorithm 2 is invoked to build the equivalence classes of cells in Cleaned. Additionally, the condition iscleancan be evaluated for all possible constants and variables that appear in the attribute A in I (in the worst case). Hence, the complexity of each iteration is O(m n 2 ), and the overall complexity of Algorithm 4 is O(m 2 n 3 ). Note that if we restrict changing cells in line 9 to the third alternative only (i.e., assigning new variables to the cells), the complexity is reduced to O(n 2 m 2 ). Additionally, we can reduce the runtime of the algorithm by not recomputing the equivalence relation from scratch in every iteration.

11 Sampling from repairs of Conditional functional dependency violations User-defined hard constraints In this section, we modify our approach to generate a sample of repairs that is consistent with the user s confidence in the accuracy of the data. We discuss two possible ways to define the confidence of a cell, and we show how to modify our algorithm accordingly. The first method to specify cell confidence is to provide a set of cells T that are completely trusted. Such cells are considered clean, and thus, the cleaning algorithm must keep their values unchanged. Since the cleaning algorithm cannot change cells in T, we must first ensure that T itself is clean. To do so, we build the equivalence relationship E T over T using Algorithm 2 and check the value of isclean(t, I,Σ,E T ).IfT is unclean, we return an empty answer. Assuming that T is clean, we describe our modifications to the cleaning algorithm as follows. When creating a maximal clean set of cells using Algorithm 3, we insert the cells in T first into the set CleanSet (i.e., we initialize CleanSet to T in line 1 in the algorithm). The remainder of the algorithm remains unchanged. Finding a maximal clean set that is a superset of T is possible as long as T is clean. This modification produces repairs in which none of the cells in T are changed since Algorithm 4 does not change the cells in the maximal clean set generated by Algorithm 3. The second way to specify confidence is using a partial order relation to indicate the relative trust between pairs of cells. Consider a strict partial order c that is defined over CID(I ) such that C 1 c C 2 iff the user is more confident about the accuracy of C 1 than C 2. By definition, c is antisymmetric, which prevents contradicting beliefs about the confidence of different cells (i.e., if C 1 c C 2, then C 2 c C 1 ). Intuitively, if C 1 c C 2, we should prioritize changing C 2 over changing C 1. We formulate this requirement as follows. Definition 10 ( c -compatible repair) Given an instance I and a strict partial order relation c defined over cells in I,let LC(C i ) be defined as {C j CIDs(I ) : C i c C j }. A repair Intuitively of I is c -compatible iff there does not exist a repair I of I such that Reverted = Δ(I, I )\Δ(I, I ) is non-empty and Δ(I, I )\Δ(I, I ) C Reverted LC(C). That is, a repair I is c -compatible iff we cannot obtain another repair by reverting one or more changed cells in I back to their original values while allowing changing cells in I that are less confident than the reverted cells. It is possible to modify Algorithm 4 to only sample from c -compatible repairs as follows. Let c be a linear extension of c, which is a total order on cells in I such that for every C i and C j in CIDs(I ), ifc i c C j, then C i c C j [13]. In general, there exists multiple linear extensions for a given partial order. A random sample of linear extensions may be obtained using a (randomized) topological sorting algorithm (refer to [13] for more details). We modify Algorithm 3 by replacing the random selection of cells in line 2 by the order indicated by c, starting with the cell C such that C i CIDs(I )(C i c C). Lemma 4 Given that cells in line 2 in Algorithm 3 are selected based on c, each repair I of I generated by Algorithm 4 is a c -compatible repair. Proof Assume, for a contradiction, that a generated repair I is not a c -compatible repair. It follows that there exits a repair I such that Reverted = Δ(I, I )\Δ(I, I ) = and Δ(I, I )\Δ(I, I ) C Reverted LC(C). While building I, cells are processed in Algorithm 3 based on a total order c that extends c. Every cell in Δ(I, I )\Δ(I, I ) fails the cleanness test in line 4 in Algorithm 3 (otherwise it would be in CleanSet and not in Δ(I, I )). Let C 1 be the cell in Δ(I, I )\Δ(I, I ) that first failed the cleanness test according to c.letc pre be the cells inserted into CleanSet in Algorithm 3 before C 1. Because cells are processed according to c, cells in LC(C i) are processed after C i for each C i Δ(I, I )\Δ(I, I ). Thus, cells in C Reverted LC(C) are processed after C 1 and C pre C Reverted LC(C) =. It follows that C pre (Δ(I, I )\Δ(I, I )) =. Since cells in C pre are not changed in I (i.e., C pre Δ(I, I ) = ), C pre Δ(I, I ) = (i.e., cells in C pre are not changed in I ). But C pre {C 1 } is not clean and cannot remain completely unchanged in any repair of I. Thus, C 1 must be in Δ(I, I ), a contradiction. 6 Block-wise repairing In this section, we improve the efficiency of generating repairs by partitioning the input instance I into disjoint blocks, each of which represents a subset of cells in I, such that the blocks can be repaired independently. A similar idea has been previously used in the context in duplicate elimination where tuples are partitioned into blocks and each block is de-duplicated separately [5,25]. Partitioning an instance I into multiple disjoint blocks effectively splits a problem instance into a number of smaller instances, which results in a significant increase in performance. Also, such partitioning allows parallelization of the cleaning process (i.e., all blocks can be repaired in parallel). Furthermore, because subrepairs of individual blocks are independent, we effectively generate an exponentially larger number of repairs, which represents all possible combinations of subrepairs. That is, if instance I is partitioned into r blocks, and we generated k repairs for each partition, the sample size is effectively equal to k r. A simple strategy for partitioning I is to partition the attributes in R into multiple disjoint groups such that no FD in Σ spans more than one group of attributes (i.e., vertical

12 114 G. Beskales et al. partitioning). However, this strategy has a limited impact on the performance as it fails to reduce the number of tuples in each partition, which is the main complexity factor. In order to allow more aggressive partitioning of the input instance, where each block represents a set of cells, we have to restrict the values that can be assigned to cells in line 9 in Algorithm 4 to new variables (i.e., the third alternative). This restriction ensures that the modified cell (t, A) can never have a value equal to the value of any other cell (t, A) in other blocks. Thus, (t, A) cannot be a part of a violation of an FD that contains A in the LHS attributes. We refer to the modified versions of Algorithm 4 as Algorithm Block-Gen-Repair. Note that the modified version might miss some cardinality-set-minimal repairs as a result of restricting the new values of the changed cells, which might affect the quality of the generated sample of repairs. Modifying line 9 in Algorithm 4 allows deleting line 12, which reconstructs the equivalence relation E after modifying each cell. The reason is that the changes performed in line 7 and the modified version of line 9 do not alter the equivalence relation E. The only possible change to E in the original version of Algorithm 4 is caused by merging two equivalence classes due to changing a cell in line 7 to a constant or a variable that already exists in I (splitting an equivalence class is not possible under any circumstances). This case is not possible after modifying line 9 as described. In the following, we describe our partitioning algorithm. Let E 0 be the equivalence relation that is constructed over all cells in I (i.e., BuildEquivRel(C I Ds(I ), I,Σ)). Relation E 0 clusters cells into equivalence classes such that all pairs of cells that belong to the same attribute and might be assigned to the same constant throughout the execution of Block-Gen-Repair(I,Σ) are in the same equivalence class (refer to the proof of Theorem 3). Cells of the same attribute that belong to different equivalence classes can never have equal values since we can only assign new variables to LHS cells and different variables cannot be assigned to the same constants (Definition 1). For example, Fig. 7 shows an instance I and the corresponding equivalence relation E 0. Cells (t 1, C), (t 2, C), and (t 3, C) belong to the same equivalence class, which means that they may have equal values in some generated repairs. On the other hand, (t 1, B) and (t 2, B) belong to different equivalence classes, meaning that they can never have equal values. We use the equivalence relation E 0 to partition the input instance I such that any two tuples that belong to different blocks can never have equal values for the LHS attributes X, for all X A Σ (details are in Algorithm 5). Thus, any violation of FDs throughout the course of repairing I cannot span more than one block. In other words, repairing every block separately results in a repair for the entire instance I. In Fig. 7, we show an example of partitioning an instance. Initially, an equivalence relation E 0 is constructed on the input Algorithm 5 Partition(I,Σ) 1: E 0 BuildEquivRel(CIDs(I ), I,Σ) 2: Initialize the set of blocks P such that each cell in I belongs to a separate block 3: for each X A Σ do 4: for each pair of tuples t i, t j I such that B X, ec(e 0,(t i, B)) = ec(e 0,(t j, B)) do 5: merge the blocks of the cells (t i, XA) (t j, XA) 6: end for 7: end for 8: return P instance by invoking BuildEquivRel(C I Ds(I ), I,Σ). Each equivalence class is represented as a rectangle that surrounds the class members. We initially assign each cell to a separate block (i.e., cell (t 1, A) belongs to P 1, cell (t 2, A) belongs to P 2, and so on). For each FD X A, we locate tuples whose attributes X belong to the same equivalence classes and we merge the blocks of attributes XA of those tuples. For example, since the cells (t 1, A) and (t 2, A) belong to the same equivalence class and the FD A C Σ, we merge the blocks of (t 1, A), (t 2, A), (t 1, C), and (t 2, C).We continue the partitioning algorithm, and we return the final partitioning that is shown in the figure. We prove in Theorem 3 that the blocks generated by Algorithm 5 can be repaired separately using Algorithm Block-Gen-Repair. Theorem 3 Given a partitioning of cells in an instance I that is constructed by Algorithm Partition(I,Σ), repairing the individual blocks of cells separately using Algorithm Block-Gen-Repair results in a repair of I. Proof Let P 1,...,P r be the blocks of I generated by Algorithm 5, and let P i be a repair of P i generated by Algorithm Fig. 7 An example of partitioning an instance

13 Sampling from repairs of Conditional functional dependency violations 115 Block-Gen-Repair. We need to prove that the instance I that represents the union of all blocks P 1,...,P r satisfies Σ. We first give a road map of the proof as follows. LetE 0 be the outcome of the procedure BuildEquivRel (CIDs(I ), I,Σ). We prove that for any two cells (t 1, A) and (t 2, A), if there exists any possible repair I generated by Algorithm Block-Gen-Repair where I (t 1, A) = I (t 2, A), (t 1, A), and (t 2, A) must be in the same equivalence class in E 0. We prove that for each FD X A Σ, and for any two tuples t 1 and t 2,ifI (t 1, B) = I (t 2, B) for B X, then cells (t 1, X), (t 1, A), (t 2, X), and (t 2, A) are necessarily in the same block and thus I Σ. We first prove that, for any two cells (t 1, A) and (t 2, A), if I (t 1, A) = I (t 2, A) for any repair I generated by Algorithm Block-Gen-Repair, then (t 1, A) and (t 2, A) are in the same equivalence class in E 0.If(t 1, A) and (t 2, A) have equal values in I, they belong to the same equivalence class due to the initial step in creating E 0 (line3inalgorithm BuildEquivRel). Otherwise, (t 1, A) and (t 2, A) have different values in I, and at least one of them has been modified by Algorithm Block-Gen-Repair to have equal values in I. After modifying line 9 in Algorithm 4,we only assign new variables to cells in line 9 (i.e., they cannot be equal to any other cell). Therefore, the changed cells (i.e., (t 1, A), (t 2, A), or both) must have been changed in line 7 in (modified) Algorithm 4. Thus, both cells have to belong to the same equivalence class E in the equivalence relation E created by the repairing algorithm in line 4. Because the original values of (t 1, A) and (t 2, A) in I are different, E must have been created based on an FD X A Σ (refer to Algorithm 2). That is, there exists X A Σ such that for all B X, (t 1, B), and (t 2, B) belong to the same equivalence class in E that is maintained by the repairing algorithm. Because any repair must satisfy the constraints imposed by E, we deduce that for all B X, I (t 1, B) = I (t 2, B). We recursively prove that for all B X, (t 1, B) and (t 2, B) belong to the same equivalence class in E 0. Based on Algorithm BuildEquivRel and FD X A, (t 1, A) and (t 2, A) must be in the same equivalence class in E 0 as well. Now, we prove the second point. Given an FD X A Σ, let t 1 and t 2 be any tuples in I such that I (t 1, B) = I (t 2, B) for B X. For each attribute B X, if I (t 1, B) = I (t 2, B), then (t 1, B) and (t 2, B) areinthe same equivalence class in E 0. Based on Algorithm 5, cells (t 1, X), (t 1, A), (t 2, X), and (t 2, A) must be in the same block. Because each block P i satisfies Σ, itfollowsthat (t 1, X), (t 1, A), (t 2, X), and (t 2, A) satisfies X A. Thus, all pairs of tuples in I, which represents the union of all blocks P 1,...,P r, satisfy Σ. Complexity analysis The time complexity of Algorithm 5 is O(n m), where n is the number of tuples in I and m is the number of attributes. Building the equivalence relation E 0 is performed in O(n m). Furthermore, there are at most O(n m) merges done in lines 3 7 in Algorithm 5, each of which can be done in a constant time (for all practical database sizes) [29]. It follows that the overall complexity is O(n m). 7 Repairing violations of CFDs In this section, we extend our sampling algorithm to handle CFDs [8]. Let Σ be a set of CFDs {ϕ 1,ϕ 2,...} defined over a relation R. Each CFD ϕ i consists of a pair (X A, t p ) where X R, A R and t p represents the pattern tuple of the CFD (recall Sect. 2). We assume that CFDs in Σ are consistent (i.e., there exists a non-empty database that satisfies them). We divide the task of extending our cleaning algorithm into three subtasks: (1) changing the procedure of detecting whether a set of cells is clean, (2) changing the sampling algorithm, and (3) changing the block-wise repair algorithm. In the following sections, we address each one of these tasks. 7.1 Extending the clean cells algorithm The first step is to redefine the concept of V-instances for CFDs. In particular, the variables used in a V-instance can be only substituted by values in the attribute domains that do not appear in I or the CFD patterns. That is, a variable v A of attribute A can only be assigned to a value from i Dom(A)\ADom(A, I )\{t p [A] :(X B, t p ) Σ A X}. Also, two variables cannot be assigned to the same value. Based on this interpretation of variables in a V-instance, a variable v A i cannot match any constant in a CFD pattern t p ; it can only match the unnamed variable _. This modification is important in order to guarantee that whenever a variable appears in a LHS attribute of a tuple for a certain CFD, this tuple cannot violate the CFD. The role of the equivalence relation E that is introduced in Sect. 5.1 is capturing the equality constraints due to FDs in Σ. Constant CFDs impose different types of constraints: equating multiple cells to the constants defined in the CFD tableaux. Thus, we need to extend the equivalence relation by associating each equivalence class E E with a constant denoted E.c. If the cells of an equivalence class are not constrained to a specific constant, we set E.c to the unnamed variable _. In the following, we extend the procedure BuildEquiv Rel (Algorithm 2) to consider CFDs, resulting in procedure

14 116 G. Beskales et al. BuildEquivRel_CFD described in Algorithm 6.We also modify the algorithm to allow early termination as soon as we detect contradicting constraints (e.g., when trying to merge two equivalence classes E 1 and E 2 where E 1.c and E 2.c are equal to different constants). In this case, the algorithm returns, indicating that C is not clean. Otherwise, the algorithm returns the equivalence relation E indicating that C is clean. The algorithm builds the initial equivalence relation E based on the values of cells in C similar to Algorithm 2. For each equivalence class E in E, ife contains a cell from C,wesetE.c to the value of this cell in I. Otherwise, we set E.c to the unnamed variable _. The algorithm repeatedly selects two tuples that violate a variable CFD, or a single tuple that violates a constant CFD. If no such tuples are found, the algorithm returns E and terminates. For each pair of tuples t 1 and t 2 violating a variable CFD (X A, t p ), we merge the equivalence classes of the cells (t 1, A) and (t 2, A). If the values assigned to the merged equivalence classes do not match (i.e., two constants that are not equal), the algorithm returns and terminates (lines 9 and 14). Otherwise, the value of the resulting equivalence class E 12 is set to the most restricted value of the merged classes (line 10). For a single tuple t 1 that violates a constant CFD (X A, t p ),ifec(e,(t 1, A)).c is equal to the unnamed variable _, we set the value of ec(e,(t 1, A)).c to t p [A] and we merge this equivalence class with other classes with the same assigned value. Otherwise, the algorithm returns and terminates. We show in Fig. 8 an example of executing Algorithm 6. In Fig. 8a, we show the input CFDs and the set of cells that we need to check. In Fig. 8b, we show the initial equivalence relation E resulting from step 3 in Algorithm 6. Each equivalence class is shown as a black rectangle that surrounds its member cells, and the value of E.c is shown in a solid black circle at the upper right corner of each rectangle. The resulting equivalence relation is shown in Fig. 8c. For example, cell (t 1, A) matches the LHS of CFD (A B,(1, 1)). Thus, we change the constant associated with the equivalence class of (t 1, B) to 1. We do the same for t 2, and we merge the equivalence classes of (t 1, B) and (t 2, B) since they are associated with the same constant, 1. Also, cells (t 3, A) and (t 4, A) match the LHS of CFD (A B,(_, _)), and thus, we merge the equivalence classes of (t 3, B) and (t 4, B), and we set the constant of the resulting equivalence class to 1. We merge the two equivalence classes {(t 1, B), (t 2, B)} and {(t 3, B), (t 4, B)} since their associated constants are equal. We continue the process of merging the equivalence classes, and we show the final result in Fig. 8c. The shown set of cells is clean since we can find a non-empty equivalence relation. In the following lemma, we prove the correctness of Algorithm 6. Algorithm 6 BuildEquivRel_CFD(C,I,Σ) 1: let TIDs(C) be the set of tuples involved in C, {t : (t, A) C} 2: let Attrs(C) be the set of attributes involved in C, {A : (t, A) C} 3: let E be an initial equivalence relation on the set {(t, A) : t TIDs(C), A Attrs(C)} such that cells in C that belong to the same attribute and have equal values in I are in the same equivalence class, and all other cells outside C belong to separate (singleton) classes 4: for all E E, ife contains at least one cell from C, sete.c to the value of this cell in I. Otherwise, set E.c to _ 5: var_cfd_viols True 6: const_cfd_viols True 7: while var_cfd_viols = True or const_cfd_viols = True do 8: select two tuples t 1, t 2 TIDs(C) such that there exists a variable CFD (X A, t p ) Σ where B X (ec(e,(t 1, B)) = ec(e,(t 2, B)) ec(e,(t 1, B)).c t p [B]) and ec(e,(t 1, A)) = ec(e,(t 2, A)) (if no such tuples exist, set var_cfd_viols to False and skip to step 16) 9: if ec(e,(t 1, A)).c = _ ec(e,(t 2, A)).c = _ ec(e,(t 1, A)).c = ec(e,(t 2, A)).c then 10: merge the equivalence classes E 1 = ec(e,(t 1, A)) and E 2 = ec(e,(t 2, A)) into one equivalence class E 12 11: set E 12.c to the unnamed variable _ if E 1.c = E 2.c = _, and to E 1.c (respectively, E 2.c) ife 1.c (respectively, E 2.c) is a constant 12: if E 12.c is a constant and there exists another equivalence class E such that E.c = E 12.c,mergeE 12 and E 13: else 14: return 15: end if 16: select a tuple t 1 TIDs(C) such that there exists a constant CFD (X A, t p ) Σ where B X (ec(e,(t 1, B)).c t p [B]) and ec(e,(t 1, A)).c = t p [A] (if no such tuple exists, set const_cfd_viols to False and skip to step 23) 17: if ec(e,(t 1, A)).c = _ then 18: ec(e,(t 1, A)).c t p [A] 19: merge ec(e,(t 1, A)) with the equivalence class E of attribute A where E.c = t p [A] (if any) 20: else 21: return 22: end if 23: end while 24: return E Lemma 5 The set C in I is clean with respect to Σ iff procedure BuildEquivRel_CFD(C, I,Σ) returns an equivalence relation E that is not equal to. Proof First, we prove the if condition as follows. Let E = be the equivalence relation returned by BuildEquivRel_ CFD. We need to prove that the set C is clean. We approach the proof by showing how to construct a repair I of I such that the cells in C are unchanged. We construct I as follows. We assign each cell in C in I to the same value in I (i.e., C C, I (C) = I (C)). We iterate over all other cells outside C in random order. For each cell that belongs to an equivalence class E where E.c is a constant, we set the cell value to E.c. In the case that E.c = _, if E is a singleton equivalence class or the cell belongs to a tuple that is not mentioned in C, we set the cell value to

15 Sampling from repairs of Conditional functional dependency violations 117 (a) (b) (c) Fig. 8 An example of executing Algorithm 6: a Input CFDs and cells to be checked. b Initial equivalence relation. c Final equivalence relation a new variable. If E is a non-singleton equivalence class that includes at least one cell with an already assigned value (call it x), we set I (C) to x. Finally, if E is a non-singleton equivalence class E E whose cells are not assigned to any values yet, we assign the cell value to a new variable. Based on Algorithm 6 and our construction method of I, we list a number of facts as follows. For each E E, E.c is a constant iff E contains a cell from C (refer to line 3 in Algorithm 6). In this case, E.c is equal to the value of that cell. For each pair of classes E 1 and E 2 in the same attribute, if E 1.c and E 2.c are constants, then E 1.c = E 2.c. IfE.c = _, then all members in E are not in C and all members will be assigned to the same variable that is different from all other variables used in I (based on our construction method). For any cells (t 1, A) and (t 2, A) that have equal values in I, both cells belong to the same equivalence class in E. For any cells (t 1, A) and (t 2, A) that belong to the same equivalence class in E, both cells have the same value in I. Now, we show that the constructed instance I is indeed a repair. For every two tuples t 1, t 2 TIDs(I ) and for every variable CFD (X A, t p ) Σ, t 1 [X] =t 2 [X] t p [X] implies that for all B X, (t 1, B) and (t 2, B) belong to the same equivalence class E, and E.c t p [B]. Based on Algorithm 6, (t 1, A) and (t 2, A) are placed in the same equivalence class and thus I (t 1, A) = I (t 2, A). For each tuple t 1 TIDs(I ) and for each constant CFD (X A, t p ) Σ, t 1 [X] = t p [X] implies that ec(e,(t 1, B)).c = t p [B] for all B X. Based on Algorithm 6, ec(e,(t 1, A)).c = t p [A], and thus I (t 1, A) = t p [A]. This proves that I Σ, and thus, cells in C are clean. In the second part of the proof, we prove the only if condition. Let C be a set of cells that is clean. We need to show that BuildEquivRel_CFD(C, I,Σ) returns an equivalence relation E that is not equal to. We first highlight the steps of the proof as follows. Because C is clean, there exists at least one repair of I, I, in which the cells in C are unchanged. We prove that for each intermediate non-singleton equivalence class E that is created by Algorithm 6, the member cells of E have equal values in I. Also, for both singleton and nonsingleton intermediate equivalence classes, if E.c is a constant, all member cells of E in I must be equal to this constant. Based on the first fact, we show that Algorithm 6 cannot return. We prove the first point as follows. The initial equivalence relation constructed in line 3 satisfies the fact mentioned in the first point: for each non-singleton equivalence class E, all members of E belong to C and E.c is equal to the value of the member cells in I, which is equal to their value in I as well. Also, for all equivalence classes with E.c is a constant, the member cell(s) has/have to be in C and the value of the member cell(s) in I and I must be equal to E.c. For the equivalence classes that are subsequently created in Algorithm 6, the described fact still holds. Assume that this fact holds at a certain time of executing the algorithm. We show that this fact holds after creating a new equivalence class (i.e., when merging two existing classes or changing E.c from _ to a constant). Assume that a violation of a variable CFD (X A, t p ) Σ is detected in line 8 involving two tuples t 1 and t 2.ForB X, each pair of cells (t 1, B) and (t 2, B) belong to the same equivalence class E and E.c t p [B]. Thus, I (t 1, B) = I (t 2, B) t p [B] for B X. The equivalence class resulting from merging ec(e,(t 1, A)) and ec(e,(t 2, A)) has member cells that have equal values in I (i.e., I (t 1, A) = I (t 2, A)) because I Σ. Assume that we have a violation of constant CFD (X A, t p ) Σ detected in line 16 involving tuple t 1. Without loss of generality, we assume that all values in t p [X] are constants [17]. Following our assumption, ec(e,(t 1, B)).c = I (t 1, B) = t p [B] for all B X. Thus, I (t 1, A) = t p [A], which is consistent with the possible changing of ec(e,(t 1, A)).c to t p [A] and merging ec(e,(t 1, A)) with any other equivalence class E with E.c = t p [A]. We prove the second point as follows. Assume, to the contrary, that Algorithm 6 returns in line 14. It follows that there

16 118 G. Beskales et al. exist two tuples t 1 and t 2 that belong to an equivalence class E such that E.c t p [X] and thus I (t 1, X) = I (t 2, X). Also, (t 1, A) belongs to an equivalence class E 1, and (t 2, A) belongs to a different equivalence class E 2 such that E 1.c and E 2.c are different constants. It follows that I (t 1, A) = I (t 2, A), which cannot occur since I Σ. Assume, to the contrary, that Algorithm 6 returns in line 21. It follows that there exists a tuple t 1 that belongs to an equivalence class E such that E.c is a constant and E.c = I (t 1, X) = t p [X]. Also,t 1 [A] belongs to an equivalence class E 1 such that E 1.c is a constant and E 1.c = I (t 1, A) = t p [A], which cannot occur as I Σ. Thus, Algorithm 6 cannot return. 7.2 Extending the sampling algorithm (a) (b) The algorithm that generates a maximal clean set of cells (Algorithm 3) remains unchanged; we only need to replace the condition isclean(cleanset {C}, I,Σ,E) in line 4 with E =. The sampling algorithm, on the other hand, must take into consideration the additional constraints modeled by the extended equivalence classes. Algorithm 7 describes the modified sampling algorithm. The main modification is inserting a new condition in line 8 to capture the case where E.c is a constant. In this case, we must change the cell values in I to this constant. The remainder of the algorithm is similar to Algorithm 4. Algorithm 7 Gen-Repair-CFD(I,Σ) 1: I I 2: MaxCleanCells GetMaxCleanSet(I,Σ) 3: Cleaned MaxCleanCells 4: E BuildEquivRel_CFD(Cleaned, I,Σ) 5: for each (t, A) CIDs(I )\MaxCleanCells (based on a random iteration order) do 6: if (t, A) belongs to a non-singleton equivalence class in E that contains other cells in Cleaned then 7: set I (t, A) to the value (either a constant or a variable) of the other cells in ec(e,(t, A)) Cleaned 8: else if ec(e,(t, A)).c is a constant then 9: set I (t, A) to ec(e,(t, A)).c 10: else 11: randomly set I (t, A) to one of three alternatives: a randomly selected constant from ADom(A, I ), a randomly selected variable vi A that was previously used in I, or a fresh variable v A j such that Cleaned {(t, A)} becomes clean 12: end if 13: Cleaned Cleaned {(t, A)} 14: E BuildEquivRel_CFD(Cleaned, I,Σ) 15: end for 16: return I We show an example of generating a repair using Algorithm 7 in Fig. 9. InFig.9a, we show the input instance and the set of CFDs. In Fig. 9b, we show a maximal set of clean cells that is obtained using Algorithm 3, which in turn uses (c) Fig. 9 An example of executing Algorithm 7: a Input CFDs and relation instance to be checked. b A maximal set of clean cells. c The final repair Algorithm 6 for checking whether cells are clean. In Fig. 9c, we show the repair returned by Algorithm 7. Cells (t 1, B) and (t 4, B) belong to an equivalence class that is associated with a constant equal to 1. Thus, they are modified to the value 1. Cell (t 3, C) is associated with a singleton equivalence class that is not associated with a constant. Therefore, one possibility based on line 11 in Algorithm 7 is to assign (t 3, C) to a new variable. We show in the following theorem that repairs generated by Algorithm 7 are cardinality-set-minimal. Theorem 4 Every instance that is generated by Algorithm 7 is a cardinality-set-minimal repair. Proof The proof is similar to the proof of Theorem 2. We prove that every instance I generated by Algorithm 7 is a repair of I by showing that the set of cells in I is clean. Initially, the set Cleaned = MaxCleanCells is clean with respect to Σ (based on Lemmas 3 and 5). In each iteration, the algorithm adds a cell to Cleaned and changes this cell to ensure that the resulting version of Cleaned is clean as well. This is done by assigning a value to each newly added cell that satisfies the constraints represented by E. Upon termination, all cells in I are in Cleaned, which indicates that the resulting instance I satisfies Σ. Second, we prove that each generated repair is cardinalityset-minimal. The initial maximal clean set of cells, denoted MaxCleanCells, is not modified throughout the algorithm. Thus, the set of unchanged cells in any generated repair represents a maximal clean set of cells, which indicates that the generated repair is cardinality-set-minimal based on Theorem 1.

17 Sampling from repairs of Conditional functional dependency violations 119 Some cardinality-minimal repairs cannot be generated by Algorithm 7 due to the constraint that different variables in the generated repairs cannot be assigned to the same value (refer to Definition 1). It is possible to alter the definition of a V-instance to take into account all possible assignments to variables that result in a valid repair. However, we argue that the resulting substitution process will be too complicated for the end user to follow. Another alternative is to directly generate a ground instance using our sampling algorithm. In order to implement this alternative, we replace the three options in line 11 with only one option that assigns the cell (t, A) in I to a value from the domain of attribute A, Dom(A), such that the set Cleaned {(t, A)} is clean. 7.3 Extending block-wise repairing For the block-wise sampling algorithm, we need to restrict the values assigned to unclean cells in line 11 in Algorithm 7 to the third alternative only (i.e., assigning a new variable to the unclean cell) for the same reasons described in Sect. 6. Also, it is safe to remove line 14 which updates the equivalence relation E. We call the modified algorithm Block-Gen-Repair-CFD. The core of Algorithm 5, which partitions a given instance w.r.t. a set of FDs, is the fact that cells in different equivalence classes in E 0 cannot have equal values during the repairing process (Sect. 6). In the following, we show how to construct E 0 for CFDs in Σ as described in Algorithm 8. The key idea is to detect all possible violations of CFDs and to modify E 0 to reflect the possible ways of repairing the violations. Note that because E 0 corresponds to all possible executions of the randomized cleaning algorithm, each equivalence class E E 0 could be assigned to various constants (i.e., E.c is not fixed for all possible executions). Therefore, we extend the equivalence relation E 0 by associating each equivalence relation with a set of possible constants, denoted E.S. Algorithm 8 builds E 0 in a way that is similar to how Algorithm 6 builds E. The key difference is that Algorithm 8 does not terminate when contradicting constraints are found (e.g., when trying to merge two equivalence classes that are associated with different constants). Algorithm 6 views the constraints defined by equivalence classes as possible constraints, and thus, it allows merging contradicting equivalence classes and associates the resulting equivalence classes with the union of the constants associated with the merged classes (lines 7, 8, 11, 12). Algorithm 9 extends Algorithm 5 by checking for possible CFD violations instead of FD violations. This is achieved by extending the condition ec(e 0,(t i, B)) = ec(e 0,(t j, B)) in line 4 in Algorithm 5 to also check if the constant of ec(e 0,(t i, B)) can possibly match the LHS of the considered CFD. Also, we check whether each tuple t i could violate a constant CFD X A (lines 8 12). In this case, we merge the partitions of cells in (t i, XA). Algorithm 8 Build_E 0 _CFD(I,Σ) 1: let E 0 be an initial equivalence relation on all cells in I such that cells belonging to the same attribute and having equal values in I are in the same equivalence class 2: for all E E 0,setE.S to {v}, wherev is the value of the member cells in I 3: var_cfd_viols True 4: const_cfd_viols True 5: while var_cfd_viols = True or const_cfd_viols = True do 6: select any tuples t 1, t 2 TIDs(I ) such that there exists a variable CFD (X A, t p ) Σ where B X (ec(e,(t 1, B)) = ec(e,(t 2, B)) c ec(e,(t 1, B)).S(c t p [B])) and ec(e,(t 1, A)) = ec(e,(t 2, A)) (if no such tuples exist, set var_cfd_viols to False andskiptostep9) 7: merge the equivalence classes E 1 = ec(e,(t 1, A)) and E 2 = ec(e,(t 2, A)) into one equivalence class E 12 8: E 12.S E 1.S E 2.S 9: select any tuple t 1 TIDs(I ) such that there exists a constant CFD (X A, t p ) Σ where B X ( c ec(e,(t 1, B)).S (c t p [B])) and t p [A] ec(e,(t 1, A)).S (if no such tuple exists, set const_cfd_viols to False and skip to step 12) 10: Add t p [A] to ec(e,(t 1, A)).S 11: merge E 1 = ec(e,(t 1, A)) with the equivalence classes E 2 of attribute A where t p [A] E 2.S (if any) resulting in E 12 12: E 12.S E 1.S E 2.S 13: end while 14: return E 0 We show in Fig. 10 an example of partitioning an instance using Algorithm 9, which depends on Algorithm 8 to build E 0.InFig.10a, we show the input relation instance and the CFDs. In Fig. 10b, we show the initialization of E 0 that is performed in lines 1, 2 in Algorithm 8. Figure 10c shows relation E 0 resulting from Algorithm 8. For example, we merge the equivalence classes {(t 1, B)} and {(t 2, B), (t 3, B)} since t 1 [A] matches the LHS of CFD (A B,(1, 1)). The resulting equivalence class is associated with the constant set {1, 4}. The algorithm keeps merging the equivalence classes, and the final equivalence relation E 0 is returned. In Fig. 10d, we show the cell partitioning resulting from Algorithm 9. The algorithm starts with singleton blocks and merges blocks that could possibly contain a violation throughout the execution of the cleaning algorithm. For example, cells (t 1, A) and (t 1, B) could possibly violate the constant CFD (X A,(1, 1)), and thus, they are placed in the same block. Also, cells (t 1, BCD) and (t 2, BCD) could violate the variable CFD (BC D,(1, _, _)), and thus, their blocks are merged together. The algorithm terminates when all possible violations are processed. In the following, we prove the correctness of Algorithms 8 and 9.

18 120 G. Beskales et al. Algorithm 9 Partition_CFD(I,Σ) 1: E 0 = Build_E 0 _CFD(I,Σ) 2: Initialize the set of blocks P such that each cell in I belongs to a separate block 3: for each variable CFD (X A, t p ) Σ do 4: for each pair of tuples t i, t j I such that B X (ec(e 0,(t i, B)) = ec(e 0,(t j, B)) c ec(e 0,(t i, B)).S(c t p [B])) do 5: merge the blocks of the cells (t i, XA) (t j, XA) 6: end for 7: end for 8: for each constant CFD (X A, t p ) Σ do 9: for each tuple t i I such that B X ( c ec(e 0,(t i, B)).S(c t p [B])) do 10: merge the blocks of the cells in (t i, XA) 11: end for 12: end for 13: return P Lemma 6 Given E 0 constructed by procedure Build_E 0 _ CFD(I,Σ), every two cells that have equal values in at least one possible repair generated by Algorithm Block-Gen -Repair-CFD(I,Σ) are necessarily in the same equivalence class in E 0. Also, any cell that is assigned to a constant c in at least one repair generated by Algorithm Block-Gen-Repair-CFD(I,Σ) is necessarily in an equivalence class E in E 0 where c E.S. Proof The proof is divided into two steps as follows. We prove that if there exists any possible repair I generated by Algorithm Block-Gen-Repair-CFD in which (t 1, A) and (t 2, A) have the same value, (t 1, A) and (t 2, A) belong to the same equivalence class in E that is created in line 4 in Algorithm 7. Also, if a cell (t 1, A) is (a) (c) (b) (d) Fig. 10 An example of partitioning an instance: a Input CFDs and relation instance. b Initialization of E 0. c Final shape of E 0. d Partitioned instance assigned to a constant c in I, then (t 1, A) belongs to an equivalence class E in E where E.c = c. We prove that for each equivalence class E 1 E, there exists an equivalence class E 2 E 0 such that E 1 E 2. Also, if E 1.c is a constant, then E 1.c E 2.S. We prove the first point as follows. Given a specific maximal clean set of cells, the repair generated by Algorithm Block-Gen-Repair-CFD is identical to the repair constructed in the proof of Lemma 5 (modulo the randomization resulting from random selection of cells to be processed next). Thus, the five facts mentioned in the proof of Lemma 5 hold on any repair generated by Algorithm Block-Gen-Repair-CFD as well. It follows that if (t 1, A) and (t 2, A) have the same value in I, they belong to the same equivalence class in E. Also, if I (t 1, A) is a constant, then (t 1, A) belongs to an equivalence class E in E such that E.c = I (t 1, A). We prove the second point as follows. Let I c be an instance where each cell in MaxCleanCells has the same value as in I, and all other cells are assigned to unique variables. The equivalence relations E 0 = Build_E 0 _CFD(I c,σ) and E = BuildEquivRel_CFD(MaxCleanCells, I,Σ) are identical. That is, for each E 1 E, there exists E 2 E 0 such that E 1 = E 2 and ((E 1.c = _ E 2.S ={v i }) {E 1.c} =E 2.S). This is because the initial equivalence relations are equal (compare line 1 in Algorithm 8 and line 3 in Algorithm 6), and subsequent operations are identical. Now, assume that we replace one variable in I c with the value found in I. Clearly, no equivalence class in E 0 will be split; only merging equivalence classes could occur. Also, for each equivalence class E, Algorithm 8 can only replace a variable in E.S with a constant and possibly expand the set of constants in E.S. By repeating this process, we conclude that the equivalence classes in Build_E 0 _CFD(I c,σ) are contained in equivalence classes in Build_E 0 _CFD(I,Σ), and for each E 1 Build_E 0 _CFD(I c,σ), there exists E 2 Build_E 0 _CFD(I,Σ) such that E 1.S E 2.S, which completes the proof. Theorem 5 Given a partitioning of cells in an instance I that is constructed by Algorithm Partition_CFD(I,Σ), repairing the individual blocks of cells separately using Algorithm Block-Gen-Repair-CFD results in a repair of I. Proof We need to prove that for each variable CFD (X A, t p ) Σ, and for any two tuples t 1 and t 2,ifI (t 1, B) = I (t 2, B) t p [B] for all B X, then cells (t 1, X), (t 1, A), (t 2, X), and (t 2, A) are necessarily in the same block. Also, for each constant CFD (X A, t p ) Σ and for each tuple t 1,ifI (t 1, B) = t p [B] for all B X, the cells (t 1, X) and (t 1, A) are in the same block. Given a variable CFD (X A, t p ) Σ, lett 1 and t 2 be any tuples in I such that I (t 1, B) = I (t 2, B) t p [B]

19 Sampling from repairs of Conditional functional dependency violations 121 for all B X. For each attribute B X, since I (t 1, B) = I (t 2, B), (t 1, B), and (t 2, B) are in the same equivalence class in E 0 based on Lemma 6. Based on Algorithm 9, cells (t 1, X), (t 1, A), (t 2, X), and (t 2, A) must be in the same block. Given a constant CFD (X A, t p ) Σ, lett 1 be any tuple in I such that I (t 1, B) = t p [B] for all B X. For each attribute B X, since I (t 1, B) is a constant, (t 1, B) is in an equivalence class E in E 0 such that I (t 1, B) = E.c based on Lemma 6. Based on Algorithm 9, cells (t 1, X), (t 1, A) must be in the same block. 8 Experimental study In this section, we present an experimental evaluation of our approach. The goal of our experiments is twofold. First, we show that the proposed algorithms can efficiently generate random repairs. Second, we use our repair generator to study the correlation between the number of changes in a repair and the quality of the repair. For completeness, we implemented three previous approaches that deterministically repair FD/CFD violations [9,12,23]. The goal of these approaches is to obtain a single repair that is cost-minimal, which is an NP-hard problem. Since obtaining a cardinality-set-minimal repair can be done in PTIME, the running time of these algorithms is not directly comparable to that of our algorithm. However, we report the running times to put the performance of our algorithms into perspective. For example, these results can show how many repairs can be produced by our algorithm in the time taken to generate one repair using one of the previous algorithms. 8.1 Setup All experiments were conducted on a SunFire X4100 server with a Dual Core 2.2 GHz processor, and 8 GB of RAM. All computations are executed in memory. We used both synthetic and real data sets. The synthetic data is generated by a modified version of the UIS database generator [1]. This program produces a mailing list that has the following schema: RecordID, SSN, FirstName, MiddleInit, LastName, StNumber, StAddr, Apt, City, State, ZIP. The following FDs are defined on the schema: SSN FirstName, MiddleInit, LastName, StNumber, StAddr, Apt, City, State, ZIP FirstName, MiddleInit, LastName SSN, StNumber, StAddr, Apt, City, State, ZIP ZIP City, State We used the following constant CFDs (we omit the CFD tableaux for brevity; the tableau of each CFD is set to the most frequent 10 patterns). LastName StNumber LastName StAddr LastName Apt Also, we used the following variable CFDs (we omit the CFD tableaux for brevity; the LHS attributes in the tableaux are set to the most frequent 10 values where the FD holds). LastName City LastName State LastName ZIP We chose these CFDs based on the intuition that married couples, or families in general, with the same last name would have the same address. The UIS data generator was originally created to construct mailing lists that have duplicate records. We modified it to generate two instances: a clean instance I c and another instance I d that is obtained by marking random perturbations to cells in I c. These perturbations include modifying characters in attributes, swapping the first and last names, and replacing SSNs with all zeros to indicate missing values. To control the amount of perturbation, we use a parameter P pert that represents the probability of modifying a tuple t I c by altering one or more attributes. The default value for P pert is 5 %. Note that not every cell modification results in an CFD violation (e.g., changing attributes that are not mentioned in any CFD, or changing a LHS attribute to a unique value). The real data set we used consists of the census-income data 1, which is part of the UC Irvine Machine Learning Repository. We select 10,000 tuples from this data set to evaluate the quality of the generated repairs. The data set has 42 attributes. In the following, we briefly describe the attributes that appear in the FDs and CFDs we used. region_of_previous_residence: indicates the previous region of residence (if applicable). Possible values are Not in universe, South, Northeast, West, Midwest, Abroad. migration_code_change_in_reg: indicates whether the region of residence has changed. Possible values are Not in universe, Non-mover, Same county, Different county same state, Different state same division, Abroad, Different region, Different division same region. 1

20 122 G. Beskales et al. migration_code_move_within_reg: indicates whether a person has changed his/her residence within the same region. Possible values are Not in universe, Nonmover, Same county, Different county same state, Different state in West, Abroad, Different state in Midwest, Different state in South, Different state in Northeast. migration_code_change_in_msa: indicates whether a person has changed his/her Metropolitan Statistical Area of residence. Possible values are Not in universe, Non-mover, MSA to MSA, NonMSA to nonmsa, MSA to nonmsa, NonMSA to MSA, Abroad to MSA, Not identifiable, Abroad to nonmsa. live_in_this_house_1_year_ago: Indicates whether a person lived in the same house for more than one year. Possible values are Not in universe under 1 year, Yes, No. occupation_code: a code representing the person s occupation. Total number of codes is 47. major_occupation_code: a code representing the coarse-grained occupation of a person. There are 15 possible codes in total. industry_code: a code representing the detailed industry classification to which a person is associated. In total, there are 52 possible values. major_industry_code: a code representing the coarse-grained classification of the industry. There are 24 possible codes. education: indicates the education level of a person. income: indicates the total income of a person. The FDs are chosen from a discovered set that approximately held on our 10,000 tuple data sample, based on having a reasonable number of LHS attributes. The used FDs are as follows. region_of_previous_residence, migration_code_change_in_reg migration_code_move_within_reg occupation_code major_occupation_ code migration_code_change_in_msa live_ in_this_house_1_year_ago We also used the following CFDs. A constant CFD with FD template being education income. A variable CFD with FD template being industry_ code major_industry_code. The unconditional versions of these CFDs approximately hold for the database instance. We populate the tableau of each CFD with the most frequent 10 patterns. We use five approaches to clean the instance I d that are described as follows. Sampling: This approach implements Algorithm 7 for repairing FDs and CFDs. One optimization we introduced in our implementation is obtaining the equivalence relation E in an incremental way by updating E every time a cell is inserted instead of recomputing E from scratch. Block-wise: This approach partitions the input instance using Algorithm 5 into disjoint blocks, and then uses Algorithm Block-Gen-Repair-CFD (the modified version of Algorithm 7 for repairing each individual block. Vertex Cover [23]: This approach is based on modeling CFD violations as hyper-edges and using an approximate minimum vertex cover of the resulting hyper-graph to find a repair with a small number of changes. Greedy-RHS [9]: This approach repeatedly picks the FD violation that is cheapest to repair, based on the cost function described in Sect. 3, and fixes it. Modifications are only performed to the RHS attributes of the violated FDs. Greedy [12]: This approach extends the algorithm in [9] to repair violations of CFDs. This algorithm could possibly change the RHS and/or the LHS attributes of violated CFDs. The cost model that is used for implementing Algorithms Greedy and Greedy-RHS rely on a constant function, dis, that returns 1 for all pairs of different values and 0 for equal values (we found that more sophisticated metrics such as the Damerau Levenshtein (DL) distance did not improve the repairing quality). Each tuple is associated with a confidence weight that is inversely proportional to the number of violations each tuple is involved in. 8.2 Performance analysis We used the synthetic data set for evaluating the performance of the cleaning algorithms due to ability to manipulate the data size and the number of errors. In Fig. 11, we show the running time for generating one repair for violations of FDs only. We first fixed the perturbation probability at 5 % and used different numbers of tuples in the database. In the second experiment, we fixed the data size at 5,000 tuples and used various perturbation probabilities. We report the average runtime for generating five repairs. For Algorithm Block-wise, the cost of the initial partitioning of the input instance is amortized across the generated repairs. Algorithm Block-wise provides the best scalability, followed by Algorithm Sampling. More specifically, Algorithm Block-wise is more than one order of magnitude

Database design theory, Part I Functional dependencies Introduction As we saw in the last segment, designing a good database is a non trivial matter. The E/R model gives a useful rapid prototyping tool,

Big Data Cleaning Nan Tang Qatar Computing Research Institute, Doha, Qatar ntang@qf.org.qa Abstract. Data cleaning is, in fact, a lively subject that has played an important part in the history of data

CS787: Advanced Algorithms Lecture 5: Applications of Network Flow In the last lecture, we looked at the problem of finding the maximum flow in a graph, and how it can be efficiently solved using the Ford-Fulkerson

An Algorithmic Approach to Database Normalization M. Demba College of Computer Science and Information Aljouf University, Kingdom of Saudi Arabia bah.demba@ju.edu.sa ABSTRACT When an attempt is made to

Large induced subgraphs with all degrees odd A.D. Scott Department of Pure Mathematics and Mathematical Statistics, University of Cambridge, England Abstract: We prove that every connected graph of order

Lecture Notes on Database Normalization Chengkai Li Department of Computer Science and Engineering The University of Texas at Arlington April 15, 2012 I decided to write this document, because many students

ABSTRACT KEYWORD SEARCH OVER PROBABILISTIC RDF GRAPHS In many real applications, RDF (Resource Description Framework) has been widely used as a W3C standard to describe data in the Semantic Web. In practice,

POWER SETS AND RELATIONS L. MARIZZA A. BAILEY 1. The Power Set Now that we have defined sets as best we can, we can consider a sets of sets. If we were to assume nothing, except the existence of the empty

Data Quality in Information Integration and Business Intelligence Leopoldo Bertossi Carleton University School of Computer Science Ottawa, Canada : Faculty Fellow of the IBM Center for Advanced Studies

MA651 Topology. Lecture 6. Separation Axioms. This text is based on the following books: Fundamental concepts of topology by Peter O Neil Elements of Mathematics: General Topology by Nicolas Bourbaki Counterexamples

SOLUTIONS TO ASSIGNMENT 1 MATH 576 SOLUTIONS BY OLIVIER MARTIN 13 #5. Let T be the topology generated by A on X. We want to show T = J B J where B is the set of all topologies J on X with A J. This amounts

THE ROOMMATES PROBLEM DISCUSSED NATHAN SCHULZ Abstract. The stable roommates problem as originally posed by Gale and Shapley [1] in 1962 involves a single set of even cardinality 2n, each member of which

Unraveling versus Unraveling: A Memo on Competitive Equilibriums and Trade in Insurance Markets Nathaniel Hendren January, 2014 Abstract Both Akerlof (1970) and Rothschild and Stiglitz (1976) show that

Introduction to Logic in Computer Science: Autumn 2006 Ulle Endriss Institute for Logic, Language and Computation University of Amsterdam Ulle Endriss 1 Plan for Today Now that we have a basic understanding

CMSC 858T: Randomized Algorithms Spring 2003 Handout 8: The Local Lemma Please Note: The references at the end are given for extra reading if you are interested in exploring these ideas further. You are

Policy nalysis for dministrative Role Based ccess Control without Separate dministration Ping Yang Department of Computer Science, State University of New York at Binghamton, US Mikhail I. Gofman Department

Randomized algorithms March 10, 2005 1 What are randomized algorithms? Algorithms which use random numbers to make decisions during the executions of the algorithm. Why would we want to do this?? Deterministic

arxiv:1205.5492v1 [math.co] 24 May 2012 Partitioning edge-coloured complete graphs into monochromatic cycles and paths Alexey Pokrovskiy Departement of Mathematics, London School of Economics and Political

THE TURING DEGREES AND THEIR LACK OF LINEAR ORDER JASPER DEANTONIO Abstract. This paper is a study of the Turing Degrees, which are levels of incomputability naturally arising from sets of natural numbers.

No: 10 04 Bilkent University Monotonic Extension Farhad Husseinov Discussion Papers Department of Economics The Discussion Papers of the Department of Economics are intended to make the initial results

THE FUNDAMENTAL THEOREM OF ARBITRAGE PRICING 1. Introduction The Black-Scholes theory, which is the main subject of this course and its sequel, is based on the Efficient Market Hypothesis, that arbitrages

Enterprise Discovery Best Practices 1993-2015 Informatica Corporation. No part of this document may be reproduced or transmitted in any form, by any means (electronic, photocopying, recording or otherwise)

An Audit Environment for Outsourcing of Frequent Itemset Mining W. K. Wong The University of Hong Kong wkwong2@cs.hku.hk David W. Cheung The University of Hong Kong dcheung@cs.hku.hk Ben Kao The University

Chapter 7 Sealed-bid Auctions An auction is a procedure used for selling and buying items by offering them up for bid. Auctions are often used to sell objects that have a variable price (for example oil)

CHAPTER 7 GENERAL PROOF SYSTEMS 1 Introduction Proof systems are built to prove statements. They can be thought as an inference machine with special statements, called provable statements, or sometimes

CS 05: Algorithms (Grad) Feb 2-24, 2005 Approximating Set Cover. Definition An Instance (X, F ) of the set-covering problem consists of a finite set X and a family F of subset of X, such that every elemennt

Chapter 3 Linear Codes In order to define codes that we can encode and decode efficiently, we add more structure to the codespace. We shall be mainly interested in linear codes. A linear code of length

Massachusetts Institute of Technology Handout 6 18.433: Combinatorial Optimization February 20th, 2009 Michel X. Goemans 3. Linear Programming and Polyhedral Combinatorics Summary of what was seen in the

Chapter 4 Set Theory A set is a Many that allows itself to be thought of as a One. (Georg Cantor) In the previous chapters, we have often encountered sets, for example, prime numbers form a set, domains