public ColumnHolder build() { Preconditions.checkState(type != null, "Type must be set."); return new SimpleColumnHolder( new ColumnCapabilitiesImpl() .setType(type) .setDictionaryEncoded(dictionaryEncoded) .setHasBitmapIndexes(bitmapIndex != null) .setHasSpatialIndexes(spatialIndex != null) .setHasMultipleValues(hasMultipleValues) .setFilterable(filterable), columnSupplier, bitmapIndex, spatialIndex ); } }
private ColumnCapabilitiesImpl makeCapabilitiesFromValueType(ValueType type) { ColumnCapabilitiesImpl capabilities = new ColumnCapabilitiesImpl(); capabilities.setDictionaryEncoded(type == ValueType.STRING); capabilities.setHasBitmapIndexes(type == ValueType.STRING); capabilities.setType(type); return capabilities; }
@Override public ColumnCapabilities capabilities(String columnName) { return new ColumnCapabilitiesImpl().setType(outputType); }
capabilities = columnCapabilities.get(dimension); if (capabilities == null) { capabilities = new ColumnCapabilitiesImpl(); capabilities.setType(ValueType.STRING); capabilities.setDictionaryEncoded(true); capabilities.setHasBitmapIndexes(true); columnCapabilities.put(dimension, capabilities); if (!capabilities.hasMultipleValues() && dimsKey != null && handler.getLengthOfEncodedKeyComponent(dimsKey) > 1) { capabilities.setHasMultipleValues(true);
String dimName = dimSchema.getName(); ColumnCapabilitiesImpl capabilities = makeCapabilitiesFromValueType(type); capabilities.setHasBitmapIndexes(dimSchema.hasBitmapIndex()); capabilities.setHasSpatialIndexes(true); } else { DimensionHandler handler = DimensionHandlerUtils.getHandlerFromCapabilities( ColumnCapabilitiesImpl timeCapabilities = new ColumnCapabilitiesImpl(); timeCapabilities.setType(ValueType.LONG); columnCapabilities.put(ColumnHolder.TIME_COLUMN_NAME, timeCapabilities);
timeCapabilities = new ColumnCapabilitiesImpl().setType(ValueType.LONG).setHasMultipleValues(false);
private void mergeCapabilities( final List<IndexableAdapter> adapters, final List<String> mergedDimensions, final Map<String, ValueType> metricsValueTypes, final Map<String, String> metricTypeNames, final List<ColumnCapabilitiesImpl> dimCapabilities ) { final Map<String, ColumnCapabilitiesImpl> capabilitiesMap = new HashMap<>(); for (IndexableAdapter adapter : adapters) { for (String dimension : adapter.getDimensionNames()) { ColumnCapabilities capabilities = adapter.getCapabilities(dimension); capabilitiesMap.computeIfAbsent(dimension, d -> new ColumnCapabilitiesImpl()).merge(capabilities); } for (String metric : adapter.getMetricNames()) { ColumnCapabilities capabilities = adapter.getCapabilities(metric); capabilitiesMap.computeIfAbsent(metric, m -> new ColumnCapabilitiesImpl()).merge(capabilities); metricsValueTypes.put(metric, capabilities.getType()); metricTypeNames.put(metric, adapter.getMetricType(metric)); } } for (String dim : mergedDimensions) { dimCapabilities.add(capabilitiesMap.get(dim)); } }
@Test(expected = IllegalArgumentException.class) public void testCloser() throws Exception { final long timestamp = System.currentTimeMillis(); IncrementalIndex toPersist = IncrementalIndexTest.createIndex(null); IncrementalIndexTest.populateIndex(timestamp, toPersist); ColumnCapabilitiesImpl capabilities = (ColumnCapabilitiesImpl) toPersist.getCapabilities("dim1"); capabilities.setHasSpatialIndexes(true); final File tempDir = temporaryFolder.newFolder(); final File v8TmpDir = new File(tempDir, "v8-tmp"); final File v9TmpDir = new File(tempDir, "v9-tmp"); try { indexMerger.persist(toPersist, tempDir, indexSpec, null); } finally { if (v8TmpDir.exists()) { Assert.fail("v8-tmp dir not clean."); } if (v9TmpDir.exists()) { Assert.fail("v9-tmp dir not clean."); } } }
capabilities = columnCapabilities.get(dimension); if (capabilities == null) { capabilities = new ColumnCapabilitiesImpl(); capabilities.setType(ValueType.STRING); capabilities.setDictionaryEncoded(true); capabilities.setHasBitmapIndexes(true); columnCapabilities.put(dimension, capabilities); if (!capabilities.hasMultipleValues() && dimsKey != null && handler.getLengthOfEncodedKeyComponent(dimsKey) > 1) { capabilities.setHasMultipleValues(true);
@Override public ColumnCapabilities getColumnCapabilities(String columnName) { ColumnCapabilitiesImpl caps; if ("value".equals(columnName)) { caps = new ColumnCapabilitiesImpl(); caps.setType(ValueType.FLOAT); caps.setDictionaryEncoded(false); caps.setHasBitmapIndexes(false); } else { caps = new ColumnCapabilitiesImpl(); caps.setType(ValueType.STRING); caps.setDictionaryEncoded(true); caps.setHasBitmapIndexes(true); } return caps; } };
@Override public ColumnCapabilities capabilities(String columnName) { final ValueType valueType = columnName.indexOf('.') < 0 ? ValueType.COMPLEX : ValueType.STRING; return new ColumnCapabilitiesImpl().setType(valueType); }
String dimName = dimSchema.getName(); ColumnCapabilitiesImpl capabilities = makeCapabilitiesFromValueType(type); capabilities.setHasBitmapIndexes(dimSchema.hasBitmapIndex()); capabilities.setHasSpatialIndexes(true); } else { DimensionHandler handler = DimensionHandlerUtils.getHandlerFromCapabilities( ColumnCapabilitiesImpl timeCapabilities = new ColumnCapabilitiesImpl(); timeCapabilities.setType(ValueType.LONG); columnCapabilities.put(ColumnHolder.TIME_COLUMN_NAME, timeCapabilities);
timeCapabilities = new ColumnCapabilitiesImpl().setType(ValueType.LONG).setHasMultipleValues(false);
private void mergeCapabilities( final List<IndexableAdapter> adapters, final List<String> mergedDimensions, final Map<String, ValueType> metricsValueTypes, final Map<String, String> metricTypeNames, final List<ColumnCapabilitiesImpl> dimCapabilities ) { final Map<String, ColumnCapabilitiesImpl> capabilitiesMap = Maps.newHashMap(); for (IndexableAdapter adapter : adapters) { for (String dimension : adapter.getDimensionNames()) { ColumnCapabilities capabilities = adapter.getCapabilities(dimension); capabilitiesMap.computeIfAbsent(dimension, d -> new ColumnCapabilitiesImpl()).merge(capabilities); } for (String metric : adapter.getMetricNames()) { ColumnCapabilities capabilities = adapter.getCapabilities(metric); capabilitiesMap.computeIfAbsent(metric, m -> new ColumnCapabilitiesImpl()).merge(capabilities); metricsValueTypes.put(metric, capabilities.getType()); metricTypeNames.put(metric, adapter.getMetricType(metric)); } } for (String dim : mergedDimensions) { dimCapabilities.add(capabilitiesMap.get(dim)); } }
TestColumn(ValueType type) { columnCapabilities = new ColumnCapabilitiesImpl() .setType(type) .setDictionaryEncoded(type == ValueType.STRING) // set a fake value to make string columns .setHasBitmapIndexes(type == ValueType.STRING) .setHasSpatialIndexes(false) .setHasMultipleValues(false); }
private ColumnCapabilitiesImpl makeCapabilitiesFromValueType(ValueType type) { ColumnCapabilitiesImpl capabilities = new ColumnCapabilitiesImpl(); capabilities.setDictionaryEncoded(type == ValueType.STRING); capabilities.setHasBitmapIndexes(type == ValueType.STRING); capabilities.setType(type); return capabilities; }
@Nullable @Override public ColumnCapabilities getColumnCapabilities(String columnName) { if (ColumnHolder.TIME_COLUMN_NAME.equals(columnName)) { // TIME_COLUMN_NAME is handled specially; override the provided rowSignature. return new ColumnCapabilitiesImpl().setType(ValueType.LONG); } else { final ValueType valueType = rowSignature.get(columnName); // Do _not_ set isDictionaryEncoded or hasBitmapIndexes, because Row-based columns do not have those things. return valueType != null ? new ColumnCapabilitiesImpl().setType(valueType) : null; } } }
@Test public void testSerde() throws Exception { String json = mapper.writeValueAsString(new ColumnCapabilitiesImpl() .setDictionaryEncoded(true) .setHasBitmapIndexes(true) .setHasMultipleValues(true) .setHasSpatialIndexes(true) .setType(ValueType.COMPLEX) .setFilterable(true)); Assert.assertFalse(json.contains("filterable")); ColumnCapabilities cc = mapper.readValue(json, ColumnCapabilitiesImpl.class); Assert.assertEquals(ValueType.COMPLEX, cc.getType()); Assert.assertTrue(cc.isDictionaryEncoded()); Assert.assertFalse(cc.isRunLengthEncoded()); Assert.assertTrue(cc.hasSpatialIndexes()); Assert.assertTrue(cc.hasMultipleValues()); Assert.assertTrue(cc.hasBitmapIndexes()); Assert.assertFalse(cc.isFilterable()); }
@Override public ColumnCapabilities capabilities(String columnName) { return new ColumnCapabilitiesImpl().setType(ValueType.LONG); }
public ColumnHolder build() { Preconditions.checkState(type != null, "Type must be set."); return new SimpleColumnHolder( new ColumnCapabilitiesImpl() .setType(type) .setDictionaryEncoded(dictionaryEncoded) .setHasBitmapIndexes(bitmapIndex != null) .setHasSpatialIndexes(spatialIndex != null) .setHasMultipleValues(hasMultipleValues) .setFilterable(filterable), columnSupplier, bitmapIndex, spatialIndex ); } }