@Override public int size() { return column.getCardinality(); }
@Override public String get(int index) { return column.lookupName(index); }
@Override public void close() throws IOException { column.close(); } };
/** * Get a particular row from a column, exactly as reported by the column. */ private static List<String> getRow(final DictionaryEncodedColumn<String> column, final int rowNumber) { final List<String> retVal = new ArrayList<>(); if (column.hasMultipleValues()) { column.getMultiValueRow(rowNumber).forEach(i -> retVal.add(column.lookupName(i))); } else { retVal.add(column.lookupName(column.getSingleValueRow(rowNumber))); } return retVal; } }
subsetList.toString(), uniqueValues.stream().sorted(Comparators.naturalNullsFirst()).collect(Collectors.toList()), IntStream.range(0, dictionaryColumn.getCardinality()) .mapToObj(dictionaryColumn::lookupName) .collect(Collectors.toList()) ); Assert.assertEquals(subsetList.toString(), hasMultipleValues, dictionaryColumn.hasMultipleValues()); Assert.assertEquals(subsetList.toString(), uniqueValues.size(), dictionaryColumn.getCardinality());
@Override public int indexOf(String value) { return column.lookupId(value); }
@Override default ColumnValueSelector<?> makeColumnValueSelector(ReadableOffset offset) { return makeDimensionSelector(offset, null); } }
private void assertDimCompression(QueryableIndex index, CompressionStrategy expectedStrategy) throws Exception { // Java voodoo if (expectedStrategy == null || expectedStrategy == CompressionStrategy.UNCOMPRESSED) { return; } DictionaryEncodedColumn encodedColumn = (DictionaryEncodedColumn) index.getColumnHolder("dim2").getColumn(); Object obj; if (encodedColumn.hasMultipleValues()) { Field field = StringDictionaryEncodedColumn.class.getDeclaredField("multiValueColumn"); field.setAccessible(true); obj = field.get(encodedColumn); } else { Field field = StringDictionaryEncodedColumn.class.getDeclaredField("column"); field.setAccessible(true); obj = field.get(encodedColumn); } // CompressedVSizeColumnarIntsSupplier$CompressedByteSizeColumnarInts // CompressedVSizeColumnarMultiIntsSupplier$CompressedVSizeColumnarMultiInts Field compressedSupplierField = obj.getClass().getDeclaredField("this$0"); compressedSupplierField.setAccessible(true); Object supplier = compressedSupplierField.get(obj); Field compressionField = supplier.getClass().getDeclaredField("compression"); compressionField.setAccessible(true); Object strategy = compressionField.get(supplier); Assert.assertEquals(expectedStrategy, strategy); }
@Override public int indexOf(T value) { return dict.lookupId(value); }
return ((DictionaryEncodedColumn<String>) column).makeDimensionSelector(offset, extractionFn); } else { return DimensionSelector.constant(null, extractionFn);
@Override public int size() { return dict.getCardinality(); }
@Override public T get(int index) { return dict.lookupName(index); }
@Override public int indexOf(String value) { return column.lookupId(value); }
@Override public void close() throws IOException { dict.close(); } };
@Override default ColumnValueSelector<?> makeColumnValueSelector(ReadableOffset offset) { return makeDimensionSelector(offset, null); } }
@Override public int getDimensionCardinality(String dimension) { ColumnHolder columnHolder = index.getColumnHolder(dimension); if (columnHolder == null) { return 0; } try (BaseColumn col = columnHolder.getColumn()) { if (!(col instanceof DictionaryEncodedColumn)) { return Integer.MAX_VALUE; } return ((DictionaryEncodedColumn) col).getCardinality(); } catch (IOException e) { throw new UncheckedIOException(e); } }
@Override public String get(int index) { return column.lookupName(index); }
@Override public int indexOf(T value) { return dict.lookupId(value); }
@Override public void close() throws IOException { column.close(); } };
return ((DictionaryEncodedColumn<String>) column).makeDimensionSelector(offset, extractionFn); } else { return DimensionSelectorUtils.constantSelector(null, extractionFn);