public Session getSession() { return taskContext.getSession(); }
public Session getSession() { return taskContext.getSession(); }
private static TaskHandle createTaskHandle( TaskStateMachine taskStateMachine, TaskContext taskContext, OutputBuffer outputBuffer, LocalExecutionPlan localExecutionPlan, TaskExecutor taskExecutor) { TaskHandle taskHandle = taskExecutor.addTask( taskStateMachine.getTaskId(), outputBuffer::getUtilization, getInitialSplitsPerNode(taskContext.getSession()), getSplitConcurrencyAdjustmentInterval(taskContext.getSession()), getMaxDriversPerTask(taskContext.getSession())); taskStateMachine.addStateChangeListener(state -> { if (state.isDone()) { taskExecutor.removeTask(taskHandle); for (DriverFactory factory : localExecutionPlan.getDriverFactories()) { factory.noMoreDrivers(); } } }); return taskHandle; }
@Test public void testEmptyProbe() { TaskContext taskContext = createTaskContext(); RowPagesBuilder buildPages = rowPagesBuilder(ImmutableList.of(GEOMETRY, VARCHAR)) .row(POLYGON_A, "A") .row(null, "null") .pageBreak() .row(POLYGON_B, "B"); RowPagesBuilder probePages = rowPagesBuilder(ImmutableList.of(GEOMETRY, VARCHAR)); MaterializedResult expected = resultBuilder(taskContext.getSession(), ImmutableList.of(VARCHAR, VARCHAR)).build(); assertSpatialJoin(taskContext, INNER, buildPages, probePages, expected); }
@Test public void testEmptyBuild() { TaskContext taskContext = createTaskContext(); RowPagesBuilder buildPages = rowPagesBuilder(ImmutableList.of(GEOMETRY, VARCHAR)); RowPagesBuilder probePages = rowPagesBuilder(ImmutableList.of(GEOMETRY, VARCHAR)) .row(POINT_X, "x") .row(null, "null") .row(POINT_Y, "y") .pageBreak() .row(POINT_Z, "z") .pageBreak() .row(POINT_W, "w"); MaterializedResult expected = resultBuilder(taskContext.getSession(), ImmutableList.of(VARCHAR, VARCHAR)).build(); assertSpatialJoin(taskContext, INNER, buildPages, probePages, expected); }
@Test public void testEmptyBuildPage() { TaskContext taskContext = createTaskContext(); // build List<Type> buildTypes = ImmutableList.of(VARCHAR); RowPagesBuilder buildPages = rowPagesBuilder(buildTypes) .pageBreak(); // probe List<Type> probeTypes = ImmutableList.of(VARCHAR); RowPagesBuilder probePages = rowPagesBuilder(probeTypes); List<Page> probeInput = probePages .row("A") .row("B") .pageBreak() .build(); NestedLoopJoinOperatorFactory joinOperatorFactory = newJoinOperatorFactoryWithCompletedBuild(taskContext, buildPages); // expected MaterializedResult expected = resultBuilder(taskContext.getSession(), concat(probeTypes, buildPages.getTypes())) .build(); assertOperatorEquals(joinOperatorFactory, taskContext.addPipelineContext(0, true, true, false).addDriverContext(), probeInput, expected); }
@Test public void testDistributedSpatialSelfJoin() { TaskContext taskContext = createTaskContext(); DriverContext driverContext = taskContext.addPipelineContext(0, true, true, true).addDriverContext(); RowPagesBuilder pages = rowPagesBuilder(ImmutableList.of(GEOMETRY, VARCHAR, INTEGER)) .row(POLYGON_A, "A", 1) .row(POLYGON_A, "A", 2) .row(null, "null", null) .pageBreak() .row(POLYGON_B, "B", 0) .row(POLYGON_B, "B", 2); MaterializedResult expected = resultBuilder(taskContext.getSession(), ImmutableList.of(VARCHAR, VARCHAR)) .row("A", "A") .row("A", "B") .row("B", "A") .row("B", "B") .build(); PagesSpatialIndexFactory pagesSpatialIndexFactory = buildIndex(driverContext, (build, probe, r) -> build.intersects(probe), Optional.empty(), Optional.of(2), Optional.of(KDB_TREE_JSON), Optional.empty(), pages); OperatorFactory joinOperatorFactory = new SpatialJoinOperatorFactory(2, new PlanNodeId("test"), INNER, pages.getTypes(), Ints.asList(1), 0, Optional.of(2), pagesSpatialIndexFactory); assertOperatorEquals(joinOperatorFactory, driverContext, pages.build(), expected); }
@Test public void testEmptyProbePage() { TaskContext taskContext = createTaskContext(); // build List<Type> buildTypes = ImmutableList.of(VARCHAR); RowPagesBuilder buildPages = rowPagesBuilder(buildTypes) .row("A") .row("B") .pageBreak() .row("C"); // probe List<Type> probeTypes = ImmutableList.of(VARCHAR); RowPagesBuilder probePages = rowPagesBuilder(probeTypes); List<Page> probeInput = probePages .pageBreak() .build(); NestedLoopJoinOperatorFactory joinOperatorFactory = newJoinOperatorFactoryWithCompletedBuild(taskContext, buildPages); // expected MaterializedResult expected = resultBuilder(taskContext.getSession(), concat(probeTypes, buildPages.getTypes())) .build(); assertOperatorEquals(joinOperatorFactory, taskContext.addPipelineContext(0, true, true, false).addDriverContext(), probeInput, expected); }
@Test public void testEmptyBuildLeftJoin() { TaskContext taskContext = createTaskContext(); RowPagesBuilder buildPages = rowPagesBuilder(ImmutableList.of(GEOMETRY, VARCHAR)); RowPagesBuilder probePages = rowPagesBuilder(ImmutableList.of(GEOMETRY, VARCHAR)) .row(POINT_X, "x") .row(null, "null") .row(POINT_Y, "y") .pageBreak() .row(POINT_Z, "z") .pageBreak() .row(POINT_W, "w"); MaterializedResult expected = resultBuilder(taskContext.getSession(), ImmutableList.of(VARCHAR, VARCHAR)) .row("x", null) .row("null", null) .row("y", null) .row("z", null) .row("w", null) .build(); assertSpatialJoin(taskContext, LEFT, buildPages, probePages, expected); }
@Test public void testDistributedSpatialJoin() { TaskContext taskContext = createTaskContext(); DriverContext driverContext = taskContext.addPipelineContext(0, true, true, true).addDriverContext(); RowPagesBuilder buildPages = rowPagesBuilder(ImmutableList.of(GEOMETRY, VARCHAR, INTEGER)) .row(POLYGON_A, "A", 1) .row(POLYGON_A, "A", 2) .row(null, "null", null) .pageBreak() .row(POLYGON_B, "B", 0) .row(POLYGON_B, "B", 2); RowPagesBuilder probePages = rowPagesBuilder(ImmutableList.of(GEOMETRY, VARCHAR, INTEGER)) .row(POINT_X, "x", 2) .row(null, "null", null) .row(POINT_Y, "y", 2) .pageBreak() .row(POINT_Z, "z", 0); MaterializedResult expected = resultBuilder(taskContext.getSession(), ImmutableList.of(VARCHAR, VARCHAR)) .row("x", "A") .row("y", "A") .row("y", "B") .row("z", "B") .build(); PagesSpatialIndexFactory pagesSpatialIndexFactory = buildIndex(driverContext, (build, probe, r) -> build.contains(probe), Optional.empty(), Optional.of(2), Optional.of(KDB_TREE_JSON), Optional.empty(), buildPages); OperatorFactory joinOperatorFactory = new SpatialJoinOperatorFactory(2, new PlanNodeId("test"), INNER, probePages.getTypes(), Ints.asList(1), 0, Optional.of(2), pagesSpatialIndexFactory); assertOperatorEquals(joinOperatorFactory, driverContext, probePages.build(), expected); }
@Test public void testSpatialJoin() { TaskContext taskContext = createTaskContext(); RowPagesBuilder buildPages = rowPagesBuilder(ImmutableList.of(GEOMETRY, VARCHAR)) .row(POLYGON_A, "A") .row(null, "null") .pageBreak() .row(POLYGON_B, "B"); RowPagesBuilder probePages = rowPagesBuilder(ImmutableList.of(GEOMETRY, VARCHAR)) .row(POINT_X, "x") .row(null, "null") .row(POINT_Y, "y") .pageBreak() .row(POINT_Z, "z") .pageBreak() .row(POINT_W, "w"); MaterializedResult expected = resultBuilder(taskContext.getSession(), ImmutableList.of(VARCHAR, VARCHAR)) .row("x", "A") .row("y", "A") .row("y", "B") .row("z", "B") .build(); assertSpatialJoin(taskContext, INNER, buildPages, probePages, expected); }
@Test public void testSpatialLeftJoin() { TaskContext taskContext = createTaskContext(); RowPagesBuilder buildPages = rowPagesBuilder(ImmutableList.of(GEOMETRY, VARCHAR)) .row(POLYGON_A, "A") .row(null, "null") .pageBreak() .row(POLYGON_B, "B"); RowPagesBuilder probePages = rowPagesBuilder(ImmutableList.of(GEOMETRY, VARCHAR)) .row(POINT_X, "x") .row(null, "null") .row(POINT_Y, "y") .pageBreak() .row(POINT_Z, "z") .pageBreak() .row(POINT_W, "w"); MaterializedResult expected = resultBuilder(taskContext.getSession(), ImmutableList.of(VARCHAR, VARCHAR)) .row("x", "A") .row("null", null) .row("y", "A") .row("y", "B") .row("z", "B") .row("w", null) .build(); assertSpatialJoin(taskContext, LEFT, buildPages, probePages, expected); }
MaterializedResult expected = MaterializedResult.resultBuilder(taskContext.getSession(), concat(probeTypes, buildTypes)).build(); assertOperatorEquals(joinOperatorFactory, taskContext.addPipelineContext(0, true, true, false).addDriverContext(), probeInput, expected, true, getHashChannels(probePages, buildPages));
MaterializedResult expected = MaterializedResult.resultBuilder(taskContext.getSession(), concat(probeTypes, buildTypes)) .row("a", "a") .row("a", "a")
MaterializedResult expected = resultBuilder(taskContext.getSession(), concat(probeTypes, buildPages.getTypes())) .row("A", "a") .row("A", null)
MaterializedResult expected = MaterializedResult.resultBuilder(taskContext.getSession(), concat(probeTypes, buildTypes)) .row("a", "a") .row("a", "a")
MaterializedResult expected = resultBuilder(taskContext.getSession(), concat(probeTypes, buildPages.getTypes())) .row("A", "a") .row("B", "a")
MaterializedResult expected = MaterializedResult.resultBuilder(taskContext.getSession(), concat(probePages.getTypesWithoutHash(), buildPages.getTypesWithoutHash())) .row("20", 1020L, 2020L, "20", 30L, 40L) .row("21", 1021L, 2021L, "21", 31L, 41L)
MaterializedResult expected = MaterializedResult.resultBuilder(taskContext.getSession(), concat(probeTypes, buildTypes)) .row("a", "a") .row(null, null)
MaterializedResult expected = MaterializedResult.resultBuilder(taskContext.getSession(), concat(probeTypes, buildPages.getTypesWithoutHash())) .row("a", "a") .row("a", "a")