Search in sources :

Example 1 with BloomKFilterHolder

use of org.apache.druid.query.filter.BloomKFilterHolder 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;
    }
}
Also used : RexCall(org.apache.calcite.rex.RexCall) DruidExpression(org.apache.druid.sql.calcite.expression.DruidExpression) BloomDimFilter(org.apache.druid.query.filter.BloomDimFilter) IOException(java.io.IOException) BloomKFilter(org.apache.druid.query.filter.BloomKFilter) BloomKFilterHolder(org.apache.druid.query.filter.BloomKFilterHolder) RexNode(org.apache.calcite.rex.RexNode) Nullable(javax.annotation.Nullable)

Aggregations

IOException (java.io.IOException)1 Nullable (javax.annotation.Nullable)1 RexCall (org.apache.calcite.rex.RexCall)1 RexNode (org.apache.calcite.rex.RexNode)1 BloomDimFilter (org.apache.druid.query.filter.BloomDimFilter)1 BloomKFilter (org.apache.druid.query.filter.BloomKFilter)1 BloomKFilterHolder (org.apache.druid.query.filter.BloomKFilterHolder)1 DruidExpression (org.apache.druid.sql.calcite.expression.DruidExpression)1