Search in sources :

Example 21 with DictionaryBlock

use of com.facebook.presto.common.block.DictionaryBlock in project presto by prestodb.

the class TestDictionaryAwarePageProjection method testDictionaryProcessingEnableDisable.

@Test(dataProvider = "forceYield")
public void testDictionaryProcessingEnableDisable(boolean forceYield) {
    DictionaryAwarePageProjection projection = createProjection();
    // function will always processes the first dictionary
    DictionaryBlock ineffectiveBlock = createDictionaryBlock(100, 20);
    testProjectRange(ineffectiveBlock, DictionaryBlock.class, projection, forceYield);
    testProjectFastReturnIgnoreYield(ineffectiveBlock, projection);
    // dictionary processing can reuse the last dictionary
    // in this case, we don't even check yield signal; make yieldForce to false
    testProjectList(ineffectiveBlock, DictionaryBlock.class, projection, false);
    // last dictionary not effective, so dictionary processing is disabled
    DictionaryBlock effectiveBlock = createDictionaryBlock(10, 100);
    testProjectRange(effectiveBlock, LongArrayBlock.class, projection, forceYield);
    testProjectList(effectiveBlock, LongArrayBlock.class, projection, forceYield);
    // last dictionary effective, so dictionary processing is enabled again
    testProjectRange(ineffectiveBlock, DictionaryBlock.class, projection, forceYield);
    testProjectFastReturnIgnoreYield(ineffectiveBlock, projection);
    // dictionary processing can reuse the last dictionary
    // in this case, we don't even check yield signal; make yieldForce to false
    testProjectList(ineffectiveBlock, DictionaryBlock.class, projection, false);
    // last dictionary not effective, so dictionary processing is disabled again
    testProjectRange(effectiveBlock, LongArrayBlock.class, projection, forceYield);
    testProjectList(effectiveBlock, LongArrayBlock.class, projection, forceYield);
}
Also used : DictionaryBlock(com.facebook.presto.common.block.DictionaryBlock) Test(org.testng.annotations.Test)

Example 22 with DictionaryBlock

use of com.facebook.presto.common.block.DictionaryBlock in project presto by prestodb.

the class TestDictionaryAwarePageProjection method testDictionaryBlockWithFailure.

@Test(dataProvider = "forceYield")
public void testDictionaryBlockWithFailure(boolean forceYield) {
    DictionaryBlock block = createDictionaryBlockWithFailure(10, 100);
    testProjectFails(block, DictionaryBlock.class, forceYield);
}
Also used : DictionaryBlock(com.facebook.presto.common.block.DictionaryBlock) Test(org.testng.annotations.Test)

Example 23 with DictionaryBlock

use of com.facebook.presto.common.block.DictionaryBlock in project presto by prestodb.

the class TestDictionaryAwarePageFilter method testDictionaryProcessingEnableDisable.

@Test
public void testDictionaryProcessingEnableDisable() {
    TestDictionaryFilter nestedFilter = new TestDictionaryFilter(true);
    DictionaryAwarePageFilter filter = new DictionaryAwarePageFilter(nestedFilter);
    DictionaryBlock ineffectiveBlock = createDictionaryBlock(100, 20);
    DictionaryBlock effectiveBlock = createDictionaryBlock(10, 100);
    // function will always processes the first dictionary
    nestedFilter.setExpectedType(LongArrayBlock.class);
    testFilter(filter, ineffectiveBlock, true);
    // last dictionary not effective, so dictionary processing is disabled
    nestedFilter.setExpectedType(DictionaryBlock.class);
    testFilter(filter, effectiveBlock, true);
    // last dictionary not effective, so dictionary processing is enabled again
    nestedFilter.setExpectedType(LongArrayBlock.class);
    testFilter(filter, ineffectiveBlock, true);
    // last dictionary not effective, so dictionary processing is disabled again
    nestedFilter.setExpectedType(DictionaryBlock.class);
    testFilter(filter, effectiveBlock, true);
}
Also used : DictionaryBlock(com.facebook.presto.common.block.DictionaryBlock) Test(org.testng.annotations.Test)

Example 24 with DictionaryBlock

use of com.facebook.presto.common.block.DictionaryBlock in project urban-eureka by errir503.

the class TestPageSplitterUtil method testSplitDictionaryBlock.

@Test
public void testSplitDictionaryBlock() {
    // create a huge dictionary with a single entry
    Block dictionary = createSlicesBlock(Slices.utf8Slice(new String(new char[1_000_000])));
    // make every row in the block identical to the single entry in the dictionary
    DictionaryBlock dictionaryBlock = createRandomDictionaryBlock(dictionary, 50000);
    List<Page> pages = splitPage(new Page(dictionaryBlock), 1000);
    assertEquals(pages.size(), 2);
}
Also used : BlockAssertions.createRandomDictionaryBlock(com.facebook.presto.block.BlockAssertions.createRandomDictionaryBlock) DictionaryBlock(com.facebook.presto.common.block.DictionaryBlock) BlockAssertions.createRandomDictionaryBlock(com.facebook.presto.block.BlockAssertions.createRandomDictionaryBlock) RunLengthEncodedBlock(com.facebook.presto.common.block.RunLengthEncodedBlock) BlockAssertions.createSlicesBlock(com.facebook.presto.block.BlockAssertions.createSlicesBlock) DictionaryBlock(com.facebook.presto.common.block.DictionaryBlock) Block(com.facebook.presto.common.block.Block) Page(com.facebook.presto.common.Page) SequencePageBuilder.createSequencePage(com.facebook.presto.SequencePageBuilder.createSequencePage) PageSplitterUtil.splitPage(com.facebook.presto.execution.buffer.PageSplitterUtil.splitPage) Test(org.testng.annotations.Test)

Example 25 with DictionaryBlock

use of com.facebook.presto.common.block.DictionaryBlock in project urban-eureka by errir503.

the class Page method getRelatedDictionaryBlocks.

private Map<DictionaryId, DictionaryBlockIndexes> getRelatedDictionaryBlocks() {
    Map<DictionaryId, DictionaryBlockIndexes> relatedDictionaryBlocks = new HashMap<>();
    for (int i = 0; i < blocks.length; i++) {
        Block block = blocks[i];
        if (block instanceof DictionaryBlock) {
            DictionaryBlock dictionaryBlock = (DictionaryBlock) block;
            relatedDictionaryBlocks.computeIfAbsent(dictionaryBlock.getDictionarySourceId(), id -> new DictionaryBlockIndexes()).addBlock(dictionaryBlock, i);
        }
    }
    return relatedDictionaryBlocks;
}
Also used : DictionaryId(com.facebook.presto.common.block.DictionaryId) Arrays(java.util.Arrays) HashMap(java.util.HashMap) Math.min(java.lang.Math.min) String.format(java.lang.String.format) ArrayList(java.util.ArrayList) List(java.util.List) DictionaryBlock(com.facebook.presto.common.block.DictionaryBlock) ClassLayout(org.openjdk.jol.info.ClassLayout) SizeOf.sizeOf(io.airlift.slice.SizeOf.sizeOf) Map(java.util.Map) Objects.requireNonNull(java.util.Objects.requireNonNull) DictionaryId.randomDictionaryId(com.facebook.presto.common.block.DictionaryId.randomDictionaryId) Block(com.facebook.presto.common.block.Block) HashMap(java.util.HashMap) DictionaryId(com.facebook.presto.common.block.DictionaryId) DictionaryId.randomDictionaryId(com.facebook.presto.common.block.DictionaryId.randomDictionaryId) DictionaryBlock(com.facebook.presto.common.block.DictionaryBlock) DictionaryBlock(com.facebook.presto.common.block.DictionaryBlock) Block(com.facebook.presto.common.block.Block)

Aggregations

DictionaryBlock (com.facebook.presto.common.block.DictionaryBlock)123 Test (org.testng.annotations.Test)64 Block (com.facebook.presto.common.block.Block)63 BlockAssertions.createRandomDictionaryBlock (com.facebook.presto.block.BlockAssertions.createRandomDictionaryBlock)30 RunLengthEncodedBlock (com.facebook.presto.common.block.RunLengthEncodedBlock)28 Slice (io.airlift.slice.Slice)26 Page (com.facebook.presto.common.Page)25 BlockBuilder (com.facebook.presto.common.block.BlockBuilder)22 Slices.utf8Slice (io.airlift.slice.Slices.utf8Slice)22 BlockAssertions.createLongSequenceBlock (com.facebook.presto.block.BlockAssertions.createLongSequenceBlock)14 LongArrayBlock (com.facebook.presto.common.block.LongArrayBlock)14 DictionaryId (com.facebook.presto.common.block.DictionaryId)12 LazyBlock (com.facebook.presto.common.block.LazyBlock)12 BlockAssertions.createLongsBlock (com.facebook.presto.block.BlockAssertions.createLongsBlock)10 DictionaryId.randomDictionaryId (com.facebook.presto.common.block.DictionaryId.randomDictionaryId)10 BlockAssertions.createRLEBlock (com.facebook.presto.block.BlockAssertions.createRLEBlock)8 BlockAssertions.createRandomLongsBlock (com.facebook.presto.block.BlockAssertions.createRandomLongsBlock)8 BlockAssertions.createSlicesBlock (com.facebook.presto.block.BlockAssertions.createSlicesBlock)8 Type (com.facebook.presto.common.type.Type)8 BlockAssertions.createLongDictionaryBlock (com.facebook.presto.block.BlockAssertions.createLongDictionaryBlock)6