filters.add(supplier.get().build()); return filters; filters.add(supplier.get().addValueCondition(fieldName, lower).build()); } else { filters.add(supplier.get().addRangeCondition(fieldName, lower, upper).build()); filters.add(supplier.get().addValueCondition(fieldName, lower + 1).build()); } else if (lower + 2 < upper) { filters.add(supplier.get().addRangeCondition(fieldName, lower + 1, upper).build());
.addRangeCondition("type", "x", "z") .build(); .addValueCondition("type", "x") .addRangeCondition("time", null, 160000L) .build(); .addValueCondition("type", "nosuchthing") .build();
boolean success = testFilter(dataset, allPartitionDetails, PartitionFilter.builder() .addValueCondition("l", key.getField("l")) .addValueCondition("s", key.getField("s")) .addValueCondition("i", key.getField("i")) .build());
.addValueCondition("year", 2012) .addRangeCondition("month", 4, 7) .addValueCondition("market", "asia") .addRangeCondition("duration", 60 * minute, 90 * minute) .build();
filters.add(supplier.get().build()); return filters; filters.add(supplier.get().addValueCondition(fieldName, lower).build()); } else { filters.add(supplier.get().addRangeCondition(fieldName, lower, upper).build()); filters.add(supplier.get().addValueCondition(fieldName, lower + 1).build()); } else if (lower + 2 < upper) { filters.add(supplier.get().addRangeCondition(fieldName, lower + 1, upper).build());
final String path9 = "9:42"; final PartitionFilter filter9 = PartitionFilter.builder().addRangeCondition("hour", 9, null).build();
final PartitionFilter partitionFilter = PartitionFilter.builder().addRangeCondition("i", 1, 7).build(); final Predicate<PartitionDetail> predicate = new Predicate<PartitionDetail>() { @Override
List<Partition> consumedPartitions = Lists.newArrayList(); final PartitionFilter partitionFilter = PartitionFilter.builder().addRangeCondition("i", 1, 7).build(); final Predicate<PartitionDetail> predicate = new Predicate<PartitionDetail>() { @Override
inputArgs, PartitionFilter.builder().addRangeCondition("x", "na", "nx").build()); Map<String, String> outputArgs = new HashMap<>(); PartitionKey outputKey = PartitionKey.builder().addStringField("x", "xx").build();
@Test public void testSetGetInputPartitionFilter() throws Exception { Map<String, String> arguments = new HashMap<>(); PartitionFilter filter = PartitionFilter.builder() .addRangeCondition("i", 30, 40) .addValueCondition("l", 17L) .addValueCondition("s", "x") .build(); PartitionedFileSetArguments.setInputPartitionFilter(arguments, filter); Assert.assertEquals(filter, PartitionedFileSetArguments.getInputPartitionFilter(arguments)); arguments = new HashMap<>(); filter = PartitionFilter.builder() .addRangeCondition("i", 30, 40) .addValueCondition("s", "x") .build(); PartitionedFileSetArguments.setInputPartitionFilter(arguments, filter); Assert.assertEquals(filter, PartitionedFileSetArguments.getInputPartitionFilter(arguments)); arguments = new HashMap<>(); filter = PartitionFilter.ALWAYS_MATCH; PartitionedFileSetArguments.setInputPartitionFilter(arguments, filter); Assert.assertEquals(filter, PartitionedFileSetArguments.getInputPartitionFilter(arguments)); }
private static List<PartitionFilter> addLowerFilters(String[] fields, int position, PartitionKey keyLower, List<PartitionFilter> filters, Supplier<PartitionFilter.Builder> supplier) { if (position >= fields.length) { return filters; } String fieldName = fields[position]; int lower = (Integer) keyLower.getField(fieldName); // if this field is at the finest granularity (minutes), we must include its value in the range // otherwise we exclude it from the range and descend into the next finer granularity with a value // constraints on the current field name. For example: // - for hour:15/minute:10, we add a filter for hour>=16 (excluding 15) and descent for hour=15 // - now the remaining field is minute:10, we add a filter for minute>=10 (including 10) int lowerBound = position == fields.length - 1 ? lower : lower + 1; // only add the filter if this condition is satisfiable. For example, not for hour>=24 or month>=13 if (isSatisfiableLowerBound(fieldName, lowerBound)) { filters.add(supplier.get().addRangeCondition(fieldName, lowerBound, null).build()); } return addLowerFilters(fields, position + 1, keyLower, filters, nextSupplier(supplier, fieldName, lower)); }
private static List<PartitionFilter> addLowerFilters(String[] fields, int position, PartitionKey keyLower, List<PartitionFilter> filters, Supplier<PartitionFilter.Builder> supplier) { if (position >= fields.length) { return filters; } String fieldName = fields[position]; int lower = (Integer) keyLower.getField(fieldName); // if this field is at the finest granularity (minutes), we must include its value in the range // otherwise we exclude it from the range and descend into the next finer granularity with a value // constraints on the current field name. For example: // - for hour:15/minute:10, we add a filter for hour>=16 (excluding 15) and descent for hour=15 // - now the remaining field is minute:10, we add a filter for minute>=10 (including 10) int lowerBound = position == fields.length - 1 ? lower : lower + 1; // only add the filter if this condition is satisfiable. For example, not for hour>=24 or month>=13 if (isSatisfiableLowerBound(fieldName, lowerBound)) { filters.add(supplier.get().addRangeCondition(fieldName, lowerBound, null).build()); } return addLowerFilters(fields, position + 1, keyLower, filters, nextSupplier(supplier, fieldName, lower)); }
@Test(expected = IllegalArgumentException.class) public void testIncompatibleMatch() { PartitionFilter filter = PartitionFilter.builder() .addValueCondition("year", 2012) .addRangeCondition("month", 4, 7) .addValueCondition("market", "asia") .build(); // field of incompatible type filter.match(PartitionKey .builder() .addField("month", "january") .addField("market", "latin") .addField("year", 2012) .build()); }
private static List<PartitionFilter> addUpperFilters(String[] fields, int position, PartitionKey keyUpper, List<PartitionFilter> filters, Supplier<PartitionFilter.Builder> supplier) { if (position >= fields.length) { return filters; } String fieldName = fields[position]; int upper = (Integer) keyUpper.getField(fieldName); // only add the filter if this condition is satisfiable. For example, not for hour<0 or month<1 if (isSatisfiableUpperBound(fieldName, upper)) { filters.add(supplier.get().addRangeCondition(fieldName, null, upper).build()); } return addUpperFilters(fields, position + 1, keyUpper, filters, nextSupplier(supplier, fieldName, upper)); }
private static List<PartitionFilter> addUpperFilters(String[] fields, int position, PartitionKey keyUpper, List<PartitionFilter> filters, Supplier<PartitionFilter.Builder> supplier) { if (position >= fields.length) { return filters; } String fieldName = fields[position]; int upper = (Integer) keyUpper.getField(fieldName); // only add the filter if this condition is satisfiable. For example, not for hour<0 or month<1 if (isSatisfiableUpperBound(fieldName, upper)) { filters.add(supplier.get().addRangeCondition(fieldName, null, upper).build()); } return addUpperFilters(fields, position + 1, keyUpper, filters, nextSupplier(supplier, fieldName, upper)); }
private static <T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>> void addThreeConditionFilters(List<PartitionFilter> filters, String field1, T1[][] conditions1, String field2, T2[][] conditions2, String field3, T3[][] conditions3) { for (T1[] cond1 : conditions1) { for (T2[] cond2 : conditions2) { for (T3[] cond3 : conditions3) { filters.add(addCondition(addCondition(addCondition( PartitionFilter.builder(), field1, cond1), field2, cond2), field3, cond3).build()); } } } }
@Test(expected = IllegalStateException.class) public void testBuilderEmpty() { PartitionFilter.builder().build(); }
@Test(expected = IllegalArgumentException.class) public void testBuilderNullValue() { PartitionFilter.builder().<Long>addValueCondition("x", null).build(); }
@Test(expected = IllegalArgumentException.class) public void testBuilderEmptyField() { PartitionFilter.builder().addValueCondition("", 1).build(); }
@Test(expected = IllegalArgumentException.class) public void testBuilderEmptyField2() { PartitionFilter.builder().addRangeCondition("", 1, 2).build(); }