Search in sources :

Example 1 with Page

use of com.facebook.presto.spi.Page in project presto by prestodb.

the class BlackHolePageSourceProvider method createPageSource.

@Override
public ConnectorPageSource createPageSource(ConnectorTransactionHandle transactionHandle, ConnectorSession session, ConnectorSplit split, List<ColumnHandle> columns) {
    BlackHoleSplit blackHoleSplit = (BlackHoleSplit) split;
    ImmutableList.Builder<Type> builder = ImmutableList.builder();
    for (ColumnHandle column : columns) {
        builder.add(((BlackHoleColumnHandle) column).getColumnType());
    }
    List<Type> types = builder.build();
    Page page = generateZeroPage(types, blackHoleSplit.getRowsPerPage(), blackHoleSplit.getFieldsLength());
    return new BlackHolePageSource(page, blackHoleSplit.getPagesCount(), executorService, blackHoleSplit.getPageProcessingDelay());
}
Also used : ColumnHandle(com.facebook.presto.spi.ColumnHandle) Type(com.facebook.presto.spi.type.Type) FixedWidthType(com.facebook.presto.spi.type.FixedWidthType) VarcharType(com.facebook.presto.spi.type.VarcharType) Varchars.isVarcharType(com.facebook.presto.spi.type.Varchars.isVarcharType) ImmutableList(com.google.common.collect.ImmutableList) Page(com.facebook.presto.spi.Page)

Example 2 with Page

use of com.facebook.presto.spi.Page in project presto by prestodb.

the class TestOrcPageSourceMemoryTracking method testTableScanOperator.

@Test
public void testTableScanOperator() throws Exception {
    // Numbers used in assertions in this test may change when implementation is modified,
    // feel free to change them if they break in the future
    DriverContext driverContext = testPreparer.newDriverContext();
    SourceOperator operator = testPreparer.newTableScanOperator(driverContext);
    assertEquals(driverContext.getSystemMemoryUsage(), 0);
    long memoryUsage = -1;
    for (int i = 0; i < 20; i++) {
        assertFalse(operator.isFinished());
        Page page = operator.getOutput();
        assertNotNull(page);
        page.getBlock(1);
        if (memoryUsage == -1) {
            memoryUsage = driverContext.getSystemMemoryUsage();
            assertBetweenInclusive(memoryUsage, 460000L, 469999L);
        } else {
            assertEquals(driverContext.getSystemMemoryUsage(), memoryUsage);
        }
    }
    memoryUsage = -1;
    for (int i = 20; i < 40; i++) {
        assertFalse(operator.isFinished());
        Page page = operator.getOutput();
        assertNotNull(page);
        page.getBlock(1);
        if (memoryUsage == -1) {
            memoryUsage = driverContext.getSystemMemoryUsage();
            assertBetweenInclusive(memoryUsage, 460000L, 469999L);
        } else {
            assertEquals(driverContext.getSystemMemoryUsage(), memoryUsage);
        }
    }
    memoryUsage = -1;
    for (int i = 40; i < 50; i++) {
        assertFalse(operator.isFinished());
        Page page = operator.getOutput();
        assertNotNull(page);
        page.getBlock(1);
        if (memoryUsage == -1) {
            memoryUsage = driverContext.getSystemMemoryUsage();
            assertBetweenInclusive(memoryUsage, 360000L, 369999L);
        } else {
            assertEquals(driverContext.getSystemMemoryUsage(), memoryUsage);
        }
    }
    assertFalse(operator.isFinished());
    assertNull(operator.getOutput());
    assertTrue(operator.isFinished());
    assertEquals(driverContext.getSystemMemoryUsage(), 0);
}
Also used : DriverContext(com.facebook.presto.operator.DriverContext) SourceOperator(com.facebook.presto.operator.SourceOperator) Page(com.facebook.presto.spi.Page) Test(org.testng.annotations.Test)

Example 3 with Page

use of com.facebook.presto.spi.Page in project presto by prestodb.

the class TestOrcPageSourceMemoryTracking method testPageSource.

@Test
public void testPageSource() throws Exception {
    // Numbers used in assertions in this test may change when implementation is modified,
    // feel free to change them if they break in the future
    ConnectorPageSource pageSource = testPreparer.newPageSource();
    assertEquals(pageSource.getSystemMemoryUsage(), 0);
    long memoryUsage = -1;
    for (int i = 0; i < 20; i++) {
        assertFalse(pageSource.isFinished());
        Page page = pageSource.getNextPage();
        assertNotNull(page);
        Block block = page.getBlock(1);
        if (memoryUsage == -1) {
            // Memory usage before lazy-loading the block
            assertBetweenInclusive(pageSource.getSystemMemoryUsage(), 180000L, 189999L);
            // trigger loading for lazy block
            createUnboundedVarcharType().getSlice(block, block.getPositionCount() - 1);
            memoryUsage = pageSource.getSystemMemoryUsage();
            // Memory usage after lazy-loading the actual block
            assertBetweenInclusive(memoryUsage, 460000L, 469999L);
        } else {
            assertEquals(pageSource.getSystemMemoryUsage(), memoryUsage);
            // trigger loading for lazy block
            createUnboundedVarcharType().getSlice(block, block.getPositionCount() - 1);
            assertEquals(pageSource.getSystemMemoryUsage(), memoryUsage);
        }
    }
    memoryUsage = -1;
    for (int i = 20; i < 40; i++) {
        assertFalse(pageSource.isFinished());
        Page page = pageSource.getNextPage();
        assertNotNull(page);
        Block block = page.getBlock(1);
        if (memoryUsage == -1) {
            // Memory usage before lazy-loading the block
            assertBetweenInclusive(pageSource.getSystemMemoryUsage(), 180000L, 189999L);
            // trigger loading for lazy block
            createUnboundedVarcharType().getSlice(block, block.getPositionCount() - 1);
            memoryUsage = pageSource.getSystemMemoryUsage();
            // Memory usage after lazy-loading the actual block
            assertBetweenInclusive(memoryUsage, 460000L, 469999L);
        } else {
            assertEquals(pageSource.getSystemMemoryUsage(), memoryUsage);
            // trigger loading for lazy block
            createUnboundedVarcharType().getSlice(block, block.getPositionCount() - 1);
            assertEquals(pageSource.getSystemMemoryUsage(), memoryUsage);
        }
    }
    memoryUsage = -1;
    for (int i = 40; i < 50; i++) {
        assertFalse(pageSource.isFinished());
        Page page = pageSource.getNextPage();
        assertNotNull(page);
        Block block = page.getBlock(1);
        if (memoryUsage == -1) {
            // Memory usage before lazy-loading the block
            assertBetweenInclusive(pageSource.getSystemMemoryUsage(), 90000L, 99999L);
            // trigger loading for lazy block
            createUnboundedVarcharType().getSlice(block, block.getPositionCount() - 1);
            memoryUsage = pageSource.getSystemMemoryUsage();
            // Memory usage after lazy-loading the actual block
            assertBetweenInclusive(memoryUsage, 360000L, 369999L);
        } else {
            assertEquals(pageSource.getSystemMemoryUsage(), memoryUsage);
            // trigger loading for lazy block
            createUnboundedVarcharType().getSlice(block, block.getPositionCount() - 1);
            assertEquals(pageSource.getSystemMemoryUsage(), memoryUsage);
        }
    }
    assertFalse(pageSource.isFinished());
    assertNull(pageSource.getNextPage());
    assertTrue(pageSource.isFinished());
    assertEquals(pageSource.getSystemMemoryUsage(), 0);
    pageSource.close();
}
Also used : Block(com.facebook.presto.spi.block.Block) Page(com.facebook.presto.spi.Page) ConnectorPageSource(com.facebook.presto.spi.ConnectorPageSource) Test(org.testng.annotations.Test)

Example 4 with Page

use of com.facebook.presto.spi.Page in project presto by prestodb.

the class TestJoinProbeCompiler method testSingleChannel.

@Test(dataProvider = "hashEnabledValues")
public void testSingleChannel(boolean hashEnabled) throws Exception {
    taskContext.addPipelineContext(0, true, true).addDriverContext();
    ImmutableList<Type> types = ImmutableList.of(VARCHAR, DOUBLE);
    ImmutableList<Type> outputTypes = ImmutableList.of(VARCHAR);
    List<Integer> outputChannels = ImmutableList.of(0);
    LookupSourceSupplierFactory lookupSourceSupplierFactory = joinCompiler.compileLookupSourceFactory(types, Ints.asList(0));
    // crate hash strategy with a single channel blocks -- make sure there is some overlap in values
    List<Block> varcharChannel = ImmutableList.of(BlockAssertions.createStringSequenceBlock(10, 20), BlockAssertions.createStringSequenceBlock(20, 30), BlockAssertions.createStringSequenceBlock(15, 25));
    List<Block> extraUnusedDoubleChannel = ImmutableList.of(BlockAssertions.createDoubleSequenceBlock(10, 20), BlockAssertions.createDoubleSequenceBlock(20, 30), BlockAssertions.createDoubleSequenceBlock(15, 25));
    LongArrayList addresses = new LongArrayList();
    for (int blockIndex = 0; blockIndex < varcharChannel.size(); blockIndex++) {
        Block block = varcharChannel.get(blockIndex);
        for (int positionIndex = 0; positionIndex < block.getPositionCount(); positionIndex++) {
            addresses.add(encodeSyntheticAddress(blockIndex, positionIndex));
        }
    }
    Optional<Integer> hashChannel = Optional.empty();
    List<List<Block>> channels = ImmutableList.of(varcharChannel, extraUnusedDoubleChannel);
    if (hashEnabled) {
        ImmutableList.Builder<Block> hashChannelBuilder = ImmutableList.builder();
        for (Block block : varcharChannel) {
            hashChannelBuilder.add(TypeUtils.getHashBlock(ImmutableList.<Type>of(VARCHAR), block));
        }
        types = ImmutableList.of(VARCHAR, DOUBLE, BigintType.BIGINT);
        hashChannel = Optional.of(2);
        channels = ImmutableList.of(varcharChannel, extraUnusedDoubleChannel, hashChannelBuilder.build());
        outputChannels = ImmutableList.of(0, 2);
        outputTypes = ImmutableList.of(VARCHAR, BigintType.BIGINT);
    }
    LookupSource lookupSource = lookupSourceSupplierFactory.createLookupSourceSupplier(taskContext.getSession().toConnectorSession(), addresses, channels, hashChannel, Optional.empty()).get();
    JoinProbeCompiler joinProbeCompiler = new JoinProbeCompiler();
    JoinProbeFactory probeFactory = joinProbeCompiler.internalCompileJoinProbe(types, outputChannels, Ints.asList(0), hashChannel);
    Page page = SequencePageBuilder.createSequencePage(types, 10, 10, 10);
    Page outputPage = new Page(page.getBlock(0));
    if (hashEnabled) {
        page = new Page(page.getBlock(0), page.getBlock(1), TypeUtils.getHashBlock(ImmutableList.of(VARCHAR), page.getBlock(0)));
        outputPage = new Page(page.getBlock(0), page.getBlock(2));
    }
    JoinProbe joinProbe = probeFactory.createJoinProbe(lookupSource, page);
    // verify channel count
    assertEquals(joinProbe.getOutputChannelCount(), outputChannels.size());
    PageBuilder pageBuilder = new PageBuilder(outputTypes);
    for (int position = 0; position < page.getPositionCount(); position++) {
        assertTrue(joinProbe.advanceNextPosition());
        pageBuilder.declarePosition();
        joinProbe.appendTo(pageBuilder);
        assertEquals(joinProbe.getCurrentJoinPosition(), lookupSource.getJoinPosition(position, page, page));
    }
    assertFalse(joinProbe.advanceNextPosition());
    assertPageEquals(outputTypes, pageBuilder.build(), outputPage);
}
Also used : LookupSource(com.facebook.presto.operator.LookupSource) LongArrayList(it.unimi.dsi.fastutil.longs.LongArrayList) ImmutableList(com.google.common.collect.ImmutableList) Page(com.facebook.presto.spi.Page) SequencePageBuilder(com.facebook.presto.SequencePageBuilder) PageBuilder(com.facebook.presto.spi.PageBuilder) JoinProbe(com.facebook.presto.operator.JoinProbe) Type(com.facebook.presto.spi.type.Type) BigintType(com.facebook.presto.spi.type.BigintType) JoinProbeFactory(com.facebook.presto.operator.JoinProbeFactory) Block(com.facebook.presto.spi.block.Block) LongArrayList(it.unimi.dsi.fastutil.longs.LongArrayList) ImmutableList(com.google.common.collect.ImmutableList) List(java.util.List) LookupSourceSupplierFactory(com.facebook.presto.sql.gen.JoinCompiler.LookupSourceSupplierFactory) Test(org.testng.annotations.Test)

Example 5 with Page

use of com.facebook.presto.spi.Page in project presto by prestodb.

the class BenchmarkDecimalOperators method execute.

private List<Page> execute(BaseState state) {
    ImmutableList.Builder<Page> pages = ImmutableList.builder();
    Page inputPage = state.getInputPage();
    PageBuilder pageBuilder = state.getPageBuilder();
    PageProcessor processor = state.getProcessor();
    int currentPosition = 0;
    while (currentPosition < PAGE_SIZE) {
        pageBuilder.reset();
        currentPosition = processor.process(null, inputPage, currentPosition, inputPage.getPositionCount(), pageBuilder);
        pages.add(pageBuilder.build());
    }
    return pages.build();
}
Also used : PageProcessor(com.facebook.presto.operator.PageProcessor) ImmutableList(com.google.common.collect.ImmutableList) Page(com.facebook.presto.spi.Page) PageBuilder(com.facebook.presto.spi.PageBuilder)

Aggregations

Page (com.facebook.presto.spi.Page)85 Test (org.testng.annotations.Test)39 MaterializedResult (com.facebook.presto.testing.MaterializedResult)29 Block (com.facebook.presto.spi.block.Block)20 Type (com.facebook.presto.spi.type.Type)19 PlanNodeId (com.facebook.presto.sql.planner.plan.PlanNodeId)14 WindowOperatorFactory (com.facebook.presto.operator.WindowOperator.WindowOperatorFactory)13 PageBuilder (com.facebook.presto.spi.PageBuilder)11 ImmutableList (com.google.common.collect.ImmutableList)11 DictionaryBlock (com.facebook.presto.spi.block.DictionaryBlock)8 LazyBlock (com.facebook.presto.spi.block.LazyBlock)8 SortOrder (com.facebook.presto.spi.block.SortOrder)7 RowPagesBuilder (com.facebook.presto.RowPagesBuilder)6 RunLengthEncodedBlock (com.facebook.presto.spi.block.RunLengthEncodedBlock)6 MethodDefinition (com.facebook.presto.bytecode.MethodDefinition)5 Parameter (com.facebook.presto.bytecode.Parameter)5 ConnectorPageSource (com.facebook.presto.spi.ConnectorPageSource)5 ArrayType (com.facebook.presto.type.ArrayType)5 BytecodeBlock (com.facebook.presto.bytecode.BytecodeBlock)4 Scope (com.facebook.presto.bytecode.Scope)4