Skip to content

Commit

Permalink
Change TupleDomainOrcPredicate to use UTF8 slices
Browse files Browse the repository at this point in the history
  • Loading branch information
nileema committed Mar 30, 2015
1 parent 2e34244 commit b09336b
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 15 deletions.
Expand Up @@ -28,7 +28,6 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.primitives.Primitives;
import io.airlift.slice.Slice;
import io.airlift.slice.Slices;

import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -115,7 +114,7 @@ else if (boxedJavaType == Double.class && columnStatistics.getDoubleStatistics()
return createDomain(boxedJavaType, hasNullValue, columnStatistics.getDoubleStatistics());
}
else if (boxedJavaType == Slice.class && columnStatistics.getStringStatistics() != null) {
return createDomain(boxedJavaType, hasNullValue, columnStatistics.getStringStatistics(), Slices::utf8Slice);
return createDomain(boxedJavaType, hasNullValue, columnStatistics.getStringStatistics());
}
return Domain.create(SortedRangeSet.all(boxedJavaType), hasNullValue);
}
Expand Down
Expand Up @@ -32,6 +32,7 @@
import static com.facebook.presto.orc.metadata.CompressionKind.ZLIB;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
import static io.airlift.slice.Slices.utf8Slice;

public class DwrfMetadataReader
implements MetadataReader
Expand Down Expand Up @@ -222,8 +223,8 @@ private static StringStatistics toStringStatistics(OrcProto.StringStatistics str
}

return new StringStatistics(
stringStatistics.hasMinimum() ? stringStatistics.getMinimum() : null,
stringStatistics.hasMaximum() ? stringStatistics.getMaximum() : null);
stringStatistics.hasMinimum() ? utf8Slice(stringStatistics.getMinimum()) : null,
stringStatistics.hasMaximum() ? utf8Slice(stringStatistics.getMaximum()) : null);
}

private static OrcType toType(OrcProto.Type type)
Expand Down
Expand Up @@ -31,6 +31,7 @@
import static com.facebook.presto.orc.metadata.CompressionKind.UNCOMPRESSED;
import static com.facebook.presto.orc.metadata.CompressionKind.ZLIB;
import static com.google.common.base.Preconditions.checkState;
import static io.airlift.slice.Slices.utf8Slice;

public class OrcMetadataReader
implements MetadataReader
Expand Down Expand Up @@ -226,8 +227,8 @@ private static StringStatistics toStringStatistics(OrcProto.StringStatistics str
}

return new StringStatistics(
stringStatistics.hasMinimum() ? stringStatistics.getMinimum() : null,
stringStatistics.hasMaximum() ? stringStatistics.getMaximum() : null);
stringStatistics.hasMinimum() ? utf8Slice(stringStatistics.getMinimum()) : null,
stringStatistics.hasMaximum() ? utf8Slice(stringStatistics.getMaximum()) : null);
}

private static DateStatistics toDateStatistics(OrcProto.DateStatistics dateStatistics, boolean isRowGroup)
Expand Down
Expand Up @@ -13,26 +13,28 @@
*/
package com.facebook.presto.orc.metadata;

import io.airlift.slice.Slice;

public class StringStatistics
implements RangeStatistics<String>
implements RangeStatistics<Slice>
{
private final String minimum;
private final String maximum;
private final Slice minimum;
private final Slice maximum;

public StringStatistics(String minimum, String maximum)
public StringStatistics(Slice minimum, Slice maximum)
{
this.minimum = minimum;
this.maximum = maximum;
}

@Override
public String getMin()
public Slice getMin()
{
return minimum;
}

@Override
public String getMax()
public Slice getMax()
{
return maximum;
}
Expand Down
Expand Up @@ -23,6 +23,7 @@
import com.facebook.presto.spi.Range;
import com.facebook.presto.spi.SortedRangeSet;
import io.airlift.slice.Slice;
import io.airlift.slice.Slices;
import org.testng.annotations.Test;

import static com.facebook.presto.orc.TupleDomainOrcPredicate.getDomain;
Expand Down Expand Up @@ -164,7 +165,9 @@ public void testString()

private static ColumnStatistics stringColumnStats(Long numberOfValues, String minimum, String maximum)
{
return new ColumnStatistics(numberOfValues, null, null, null, new StringStatistics(minimum, maximum), null);
Slice minSlice = (minimum == null ? null : Slices.utf8Slice(minimum));
Slice maxSlice = (maximum == null ? null : Slices.utf8Slice(maximum));
return new ColumnStatistics(numberOfValues, null, null, null, new StringStatistics(minSlice, maxSlice), null);
}

@Test
Expand Down
Expand Up @@ -16,6 +16,7 @@
import com.facebook.presto.orc.metadata.ColumnStatistics;
import com.google.common.collect.Iterables;
import com.google.common.collect.Ordering;
import io.airlift.slice.Slices;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector.PrimitiveCategory;
Expand Down Expand Up @@ -269,12 +270,12 @@ protected boolean chunkMatchesStats(List<String> chunk, ColumnStatistics columnS
// statistics can be missing for any reason
if (columnStatistics.getStringStatistics() != null) {
// verify min
if (!columnStatistics.getStringStatistics().getMin().equals(Ordering.natural().nullsLast().min(chunk))) {
if (!columnStatistics.getStringStatistics().getMin().equals(Slices.utf8Slice(Ordering.natural().nullsLast().min(chunk)))) {
return false;
}

// verify max
if (!columnStatistics.getStringStatistics().getMax().equals(Ordering.natural().nullsFirst().max(chunk))) {
if (!columnStatistics.getStringStatistics().getMax().equals(Slices.utf8Slice(Ordering.natural().nullsFirst().max(chunk)))) {
return false;
}
}
Expand Down

0 comments on commit b09336b

Please sign in to comment.