use of org.apache.druid.query.filter.BloomKFilter in project druid by druid-io.
the class BloomFilterExpressionsTest method testAddDouble.
@Test
public void testAddDouble() {
Expr expr = Parser.parse("bloom_filter_add(1.234, bloomy)", macroTable);
ExprEval eval = expr.eval(inputBindings);
Assert.assertEquals(BloomFilterExpressions.BLOOM_FILTER_TYPE, eval.type());
Assert.assertTrue(eval.value() instanceof BloomKFilter);
Assert.assertTrue(((BloomKFilter) eval.value()).testDouble(SOME_DOUBLE));
expr = Parser.parse("bloom_filter_add(double, bloomy)", macroTable);
eval = expr.eval(inputBindings);
Assert.assertEquals(BloomFilterExpressions.BLOOM_FILTER_TYPE, eval.type());
Assert.assertTrue(eval.value() instanceof BloomKFilter);
Assert.assertTrue(((BloomKFilter) eval.value()).testDouble(SOME_DOUBLE));
}
use of org.apache.druid.query.filter.BloomKFilter in project druid by druid-io.
the class BloomFilterExpressionsTest method testAddString.
@Test
public void testAddString() {
Expr expr = Parser.parse("bloom_filter_add('foo', bloomy)", macroTable);
ExprEval eval = expr.eval(inputBindings);
Assert.assertEquals(BloomFilterExpressions.BLOOM_FILTER_TYPE, eval.type());
Assert.assertTrue(eval.value() instanceof BloomKFilter);
Assert.assertTrue(((BloomKFilter) eval.value()).testString(SOME_STRING));
expr = Parser.parse("bloom_filter_add(string, bloomy)", macroTable);
eval = expr.eval(inputBindings);
Assert.assertEquals(BloomFilterExpressions.BLOOM_FILTER_TYPE, eval.type());
Assert.assertTrue(eval.value() instanceof BloomKFilter);
Assert.assertTrue(((BloomKFilter) eval.value()).testString(SOME_STRING));
}
use of org.apache.druid.query.filter.BloomKFilter in project druid by druid-io.
the class BloomFilterOperatorConversion method toDruidFilter.
@Nullable
@Override
public DimFilter toDruidFilter(final PlannerContext plannerContext, RowSignature rowSignature, @Nullable VirtualColumnRegistry virtualColumnRegistry, final RexNode rexNode) {
final List<RexNode> operands = ((RexCall) rexNode).getOperands();
final DruidExpression druidExpression = Expressions.toDruidExpression(plannerContext, rowSignature, operands.get(0));
if (druidExpression == null) {
return null;
}
String base64EncodedBloomKFilter = RexLiteral.stringValue(operands.get(1));
final byte[] decoded = StringUtils.decodeBase64String(base64EncodedBloomKFilter);
BloomKFilter filter;
BloomKFilterHolder holder;
try {
filter = BloomFilterSerializersModule.bloomKFilterFromBytes(decoded);
holder = BloomKFilterHolder.fromBloomKFilter(filter);
} catch (IOException ioe) {
throw new RuntimeException("Failed to deserialize bloom filter", ioe);
}
if (druidExpression.isSimpleExtraction()) {
return new BloomDimFilter(druidExpression.getSimpleExtraction().getColumn(), holder, druidExpression.getSimpleExtraction().getExtractionFn(), null);
} else if (virtualColumnRegistry != null) {
String virtualColumnName = virtualColumnRegistry.getOrCreateVirtualColumnForExpression(druidExpression, operands.get(0).getType());
if (virtualColumnName == null) {
return null;
}
return new BloomDimFilter(virtualColumnName, holder, null, null);
} else {
return null;
}
}
use of org.apache.druid.query.filter.BloomKFilter in project druid by druid-io.
the class BloomFilterAggregatorTest method testAggregateLongValues.
@Test
public void testAggregateLongValues() throws IOException {
TestLongColumnSelector selector = new TestLongColumnSelector(Arrays.asList(LONG_VALUES1));
LongBloomFilterAggregator agg = new LongBloomFilterAggregator(selector, MAX_NUM_VALUES, true);
for (Long ignored : LONG_VALUES1) {
aggregateColumn(Collections.singletonList(selector), agg);
}
BloomKFilter bloomKFilter = BloomKFilter.deserialize((ByteBuffer) valueAggregatorFactory.finalizeComputation(agg.get()));
String serialized = filterToString(bloomKFilter);
Assert.assertEquals(serializedLongFilter, serialized);
}
use of org.apache.druid.query.filter.BloomKFilter in project druid by druid-io.
the class BloomFilterAggregatorTest method testAggregateDoubleValues.
@Test
public void testAggregateDoubleValues() throws IOException {
TestDoubleColumnSelector selector = new TestDoubleColumnSelector(Arrays.asList(DOUBLE_VALUES1));
DoubleBloomFilterAggregator agg = new DoubleBloomFilterAggregator(selector, MAX_NUM_VALUES, true);
for (Double ignored : DOUBLE_VALUES1) {
aggregateColumn(Collections.singletonList(selector), agg);
}
BloomKFilter bloomKFilter = BloomKFilter.deserialize((ByteBuffer) valueAggregatorFactory.finalizeComputation(agg.get()));
String serialized = filterToString(bloomKFilter);
Assert.assertEquals(serializedDoubleFilter, serialized);
}
Aggregations