Search in sources :

Example 1 with AnotB

use of org.apache.datasketches.theta.AnotB in project druid by druid-io.

the class SketchHolder method sketchSetOperation.

public static SketchHolder sketchSetOperation(Func func, int sketchSize, Object... holders) {
    // the final stages of query processing, ordered sketch would be of no use.
    switch(func) {
        case UNION:
            Union union = (Union) SetOperation.builder().setNominalEntries(sketchSize).build(Family.UNION);
            for (Object o : holders) {
                ((SketchHolder) o).updateUnion(union);
            }
            return SketchHolder.of(union);
        case INTERSECT:
            Intersection intersection = (Intersection) SetOperation.builder().setNominalEntries(sketchSize).build(Family.INTERSECTION);
            for (Object o : holders) {
                intersection.intersect(((SketchHolder) o).getSketch());
            }
            return SketchHolder.of(intersection.getResult(false, null));
        case NOT:
            if (holders.length < 1) {
                throw new IllegalArgumentException("A-Not-B requires at least 1 sketch");
            }
            if (holders.length == 1) {
                return (SketchHolder) holders[0];
            }
            Sketch result = ((SketchHolder) holders[0]).getSketch();
            for (int i = 1; i < holders.length; i++) {
                AnotB anotb = (AnotB) SetOperation.builder().setNominalEntries(sketchSize).build(Family.A_NOT_B);
                result = anotb.aNotB(result, ((SketchHolder) holders[i]).getSketch());
            }
            return SketchHolder.of(result);
        default:
            throw new IllegalArgumentException("Unknown sketch operation " + func);
    }
}
Also used : Intersection(org.apache.datasketches.theta.Intersection) AnotB(org.apache.datasketches.theta.AnotB) Sketch(org.apache.datasketches.theta.Sketch) Union(org.apache.datasketches.theta.Union)

Aggregations

AnotB (org.apache.datasketches.theta.AnotB)1 Intersection (org.apache.datasketches.theta.Intersection)1 Sketch (org.apache.datasketches.theta.Sketch)1 Union (org.apache.datasketches.theta.Union)1