Search in sources :

Example 6 with PartitionedOutputOperator

use of com.facebook.presto.operator.repartition.PartitionedOutputOperator in project presto by prestodb.

the class TestPartitionedOutputOperator method testOutputForSimplePageAndReplication.

@Test
public void testOutputForSimplePageAndReplication() {
    PartitionedOutputOperator partitionedOutputOperator = createPartitionedOutputOperator(true);
    for (int i = 0; i < PAGE_COUNT; i++) {
        partitionedOutputOperator.addInput(new Page(POSITIONS_PER_PAGE, NULL_BLOCK, TESTING_BLOCK));
    }
    partitionedOutputOperator.finish();
    OperatorContext operatorContext = partitionedOutputOperator.getOperatorContext();
    assertEquals(operatorContext.getOutputDataSize().getTotalCount(), PAGE_COUNT * PARTITION_COUNT * TESTING_PAGE_WITH_NULL_BLOCK.getSizeInBytes());
    assertEquals(operatorContext.getOutputPositions().getTotalCount(), PAGE_COUNT * PARTITION_COUNT * TESTING_PAGE_WITH_NULL_BLOCK.getPositionCount());
}
Also used : PartitionedOutputOperator(com.facebook.presto.operator.repartition.PartitionedOutputOperator) Page(com.facebook.presto.common.Page) Test(org.testng.annotations.Test)

Example 7 with PartitionedOutputOperator

use of com.facebook.presto.operator.repartition.PartitionedOutputOperator in project presto by prestodb.

the class TestPartitionedOutputOperator method createPartitionedOutputOperator.

private static PartitionedOutputOperator createPartitionedOutputOperator(boolean shouldReplicate) {
    PartitionFunction partitionFunction = new LocalPartitionGenerator(new InterpretedHashGenerator(ImmutableList.of(BIGINT), new int[] { 0 }), PARTITION_COUNT);
    OutputPartitioning outputPartitioning;
    if (shouldReplicate) {
        outputPartitioning = new OutputPartitioning(partitionFunction, ImmutableList.of(0), ImmutableList.of(Optional.empty()), true, OptionalInt.of(0));
    } else {
        outputPartitioning = new OutputPartitioning(partitionFunction, ImmutableList.of(0), ImmutableList.of(Optional.empty(), Optional.empty()), false, OptionalInt.empty());
    }
    PagesSerdeFactory serdeFactory = new PagesSerdeFactory(new BlockEncodingManager(), false);
    DriverContext driverContext = TestingTaskContext.builder(EXECUTOR, SCHEDULER, TEST_SESSION).setMemoryPoolSize(MAX_MEMORY).setQueryMaxTotalMemory(MAX_MEMORY).build().addPipelineContext(0, true, true, false).addDriverContext();
    OutputBuffers buffers = createInitialEmptyOutputBuffers(PARTITIONED);
    for (int partition = 0; partition < PARTITION_COUNT; partition++) {
        buffers = buffers.withBuffer(new OutputBuffers.OutputBufferId(partition), partition);
    }
    PartitionedOutputBuffer buffer = new PartitionedOutputBuffer("task-instance-id", new StateMachine<>("bufferState", SCHEDULER, OPEN, TERMINAL_BUFFER_STATES), buffers.withNoMoreBufferIds(), new DataSize(Long.MAX_VALUE, BYTE), () -> new SimpleLocalMemoryContext(newSimpleAggregatedMemoryContext(), "test"), SCHEDULER);
    buffer.registerLifespanCompletionCallback(ignore -> {
    });
    PartitionedOutputOperator.PartitionedOutputFactory operatorFactory;
    if (shouldReplicate) {
        operatorFactory = new PartitionedOutputOperator.PartitionedOutputFactory(buffer, PARTITION_MAX_MEMORY);
        return (PartitionedOutputOperator) operatorFactory.createOutputOperator(0, new PlanNodeId("plan-node-0"), REPLICATION_TYPES, Function.identity(), Optional.of(outputPartitioning), serdeFactory).createOperator(driverContext);
    } else {
        operatorFactory = new PartitionedOutputOperator.PartitionedOutputFactory(buffer, PARTITION_MAX_MEMORY);
        return (PartitionedOutputOperator) operatorFactory.createOutputOperator(0, new PlanNodeId("plan-node-0"), TYPES, Function.identity(), Optional.of(outputPartitioning), serdeFactory).createOperator(driverContext);
    }
}
Also used : PartitionedOutputBuffer(com.facebook.presto.execution.buffer.PartitionedOutputBuffer) SimpleLocalMemoryContext(com.facebook.presto.memory.context.SimpleLocalMemoryContext) PartitionedOutputOperator(com.facebook.presto.operator.repartition.PartitionedOutputOperator) LocalPartitionGenerator(com.facebook.presto.operator.exchange.LocalPartitionGenerator) PlanNodeId(com.facebook.presto.spi.plan.PlanNodeId) PagesSerdeFactory(com.facebook.presto.execution.buffer.PagesSerdeFactory) OutputBuffers.createInitialEmptyOutputBuffers(com.facebook.presto.execution.buffer.OutputBuffers.createInitialEmptyOutputBuffers) OutputBuffers(com.facebook.presto.execution.buffer.OutputBuffers) BlockEncodingManager(com.facebook.presto.common.block.BlockEncodingManager) DataSize(io.airlift.units.DataSize) OutputPartitioning(com.facebook.presto.sql.planner.OutputPartitioning)

Aggregations

PartitionedOutputOperator (com.facebook.presto.operator.repartition.PartitionedOutputOperator)7 Test (org.testng.annotations.Test)6 Page (com.facebook.presto.common.Page)5 BlockEncodingManager (com.facebook.presto.common.block.BlockEncodingManager)1 OutputBuffers (com.facebook.presto.execution.buffer.OutputBuffers)1 OutputBuffers.createInitialEmptyOutputBuffers (com.facebook.presto.execution.buffer.OutputBuffers.createInitialEmptyOutputBuffers)1 PagesSerdeFactory (com.facebook.presto.execution.buffer.PagesSerdeFactory)1 PartitionedOutputBuffer (com.facebook.presto.execution.buffer.PartitionedOutputBuffer)1 SimpleLocalMemoryContext (com.facebook.presto.memory.context.SimpleLocalMemoryContext)1 LocalPartitionGenerator (com.facebook.presto.operator.exchange.LocalPartitionGenerator)1 PlanNodeId (com.facebook.presto.spi.plan.PlanNodeId)1 OutputPartitioning (com.facebook.presto.sql.planner.OutputPartitioning)1 DataSize (io.airlift.units.DataSize)1