use of com.facebook.presto.common.block.DictionaryBlock in project presto by prestodb.
the class TestDictionaryBlock method testEstimatedDataSizeForStats.
@Test
public void testEstimatedDataSizeForStats() {
int positionCount = 10;
int dictionaryPositionCount = 100;
Slice[] expectedValues = createExpectedValues(positionCount);
DictionaryBlock dictionaryBlock = createDictionaryBlock(expectedValues, dictionaryPositionCount);
for (int position = 0; position < dictionaryPositionCount; position++) {
assertEquals(dictionaryBlock.getEstimatedDataSizeForStats(position), expectedValues[position % positionCount].length());
}
}
use of com.facebook.presto.common.block.DictionaryBlock in project presto by prestodb.
the class TestDictionaryBlock method testCompact.
@Test
public void testCompact() {
Slice[] expectedValues = createExpectedValues(5);
DictionaryBlock dictionaryBlock = createDictionaryBlockWithUnreferencedKeys(expectedValues, 10);
assertEquals(dictionaryBlock.isCompact(), false);
DictionaryBlock compactBlock = dictionaryBlock.compact();
assertNotEquals(dictionaryBlock.getDictionarySourceId(), compactBlock.getDictionarySourceId());
assertEquals(compactBlock.getDictionary().getPositionCount(), (expectedValues.length / 2) + 1);
assertBlock(compactBlock.getDictionary(), TestDictionaryBlock::createBlockBuilder, new Slice[] { expectedValues[0], expectedValues[1], expectedValues[3] });
assertDictionaryIds(compactBlock, 0, 1, 1, 2, 2, 0, 1, 1, 2, 2);
assertEquals(compactBlock.isCompact(), true);
DictionaryBlock reCompactedBlock = compactBlock.compact();
assertEquals(reCompactedBlock.getDictionarySourceId(), compactBlock.getDictionarySourceId());
}
use of com.facebook.presto.common.block.DictionaryBlock in project presto by prestodb.
the class TestDictionaryBlock method testLogicalSizeInBytes.
@Test
public void testLogicalSizeInBytes() {
// The 10 Slices in the array will be of lengths 0 to 9.
Slice[] expectedValues = createExpectedValues(10);
// The dictionary within the dictionary block is expected to be a VariableWidthBlock of size 95 bytes.
// 45 bytes for the expectedValues Slices (sum of seq(0,9)) and 50 bytes for the position and isNull array (total 10 positions).
DictionaryBlock dictionaryBlock = createDictionaryBlock(expectedValues, 100);
assertEquals(dictionaryBlock.getDictionary().getLogicalSizeInBytes(), 95);
// The 100 positions in the dictionary block index to 10 positions in the underlying dictionary (10 each).
// Logical size calculation accounts for 4 bytes of offset and 1 byte of isNull. Therefore the expected unoptimized
// size is 10 times the size of the underlying dictionary (VariableWidthBlock).
assertEquals(dictionaryBlock.getLogicalSizeInBytes(), 95 * 10);
// With alternating nulls, we have 21 positions, with the same size calculation as above.
dictionaryBlock = createDictionaryBlock(alternatingNullValues(expectedValues), 210);
assertEquals(dictionaryBlock.getDictionary().getPositionCount(), 21);
assertEquals(dictionaryBlock.getDictionary().getLogicalSizeInBytes(), 150);
// The null positions should be included in the logical size.
assertEquals(dictionaryBlock.getLogicalSizeInBytes(), 150 * 10);
Block longArrayBlock = createRandomLongsBlock(100, 0.5f);
DictionaryBlock dictionaryDictionaryBlock = createRandomDictionaryBlock(createRandomDictionaryBlock(longArrayBlock, 50), 10);
assertEquals(dictionaryDictionaryBlock.getDictionary().getLogicalSizeInBytes(), 450);
assertEquals(dictionaryDictionaryBlock.getLogicalSizeInBytes(), 90);
DictionaryBlock dictionaryRleBlock = createRandomDictionaryBlock(createRLEBlock(1, 50), 10);
assertEquals(dictionaryRleBlock.getDictionary().getLogicalSizeInBytes(), 450);
assertEquals(dictionaryRleBlock.getLogicalSizeInBytes(), 90);
}
use of com.facebook.presto.common.block.DictionaryBlock in project presto by prestodb.
the class TestDictionaryBlock method testSizeInBytes.
@Test
public void testSizeInBytes() {
Slice[] expectedValues = createExpectedValues(10);
DictionaryBlock dictionaryBlock = createDictionaryBlock(expectedValues, 100);
assertEquals(dictionaryBlock.getSizeInBytes(), dictionaryBlock.getDictionary().getSizeInBytes() + (100 * SIZE_OF_INT));
}
use of com.facebook.presto.common.block.DictionaryBlock in project presto by prestodb.
the class TestDictionaryBlock method testCompactAllKeysReferenced.
@Test
public void testCompactAllKeysReferenced() {
Slice[] expectedValues = createExpectedValues(5);
DictionaryBlock dictionaryBlock = createDictionaryBlock(expectedValues, 10);
DictionaryBlock compactBlock = dictionaryBlock.compact();
// When there is nothing to compact, we return the same block
assertEquals(compactBlock.getDictionary(), dictionaryBlock.getDictionary());
assertEquals(compactBlock.getPositionCount(), dictionaryBlock.getPositionCount());
for (int position = 0; position < compactBlock.getPositionCount(); position++) {
assertEquals(compactBlock.getId(position), dictionaryBlock.getId(position));
}
assertEquals(compactBlock.isCompact(), true);
}
Aggregations