Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Port semi-join to WorkProcessorOperator #1119

Merged
merged 2 commits into from Jul 30, 2019

Conversation

Praveen2112
Copy link
Member

No description provided.

@cla-bot cla-bot bot added the cla-signed label Jul 13, 2019
public WorkProcessor.TransformationState<Page> process(Page inputPage)
{
if (!this.channelSetFuture.isDone()) {
return WorkProcessor.TransformationState.blocked(this.channelSetFuture);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

static import TransformationState

public WorkProcessor.TransformationState<Page> process(Page inputPage)
{
if (!this.channelSetFuture.isDone()) {
return WorkProcessor.TransformationState.blocked(this.channelSetFuture);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

technically, single input page will be buffered until future is done. We could account it's memory here

}

if (channelSet == null) {
channelSet = tryGetFutureValue(channelSetFuture).orElse(null);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

future must be done at this point, so tryGetFutureValue is not needed.
You can use io.airlift.concurrent.MoreFutures#checkSuccess instead


@Override
public WorkProcessor.TransformationState<Page> process(Page inputPage)
{
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you could short-circut here by checking inputPage==null early. This way we won't wait for future if probe side doesn't contain any data.

// add the new boolean column to the page
outputPage = page.appendColumn(blockBuilder.build());
}
if (inputPage != null && channelSet != null) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

channelSet cannot be null at this point

@Override
public WorkProcessor.TransformationState<Page> process(Page inputPage)
{
if (!this.channelSetFuture.isDone()) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would change this if too:

if (channelSet == null) {
  if (channelSetFuture.isDone()) {
   ...
  } else {
    return WorkProcessor.TransformationState.blocked(this.channelSetFuture);
  }
}

@Override
public WorkProcessor.TransformationState<Page> process(Page inputPage)
{
if (!this.channelSetFuture.isDone()) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is not needed

}

@Override
public WorkProcessor.TransformationState<Page> process(Page inputPage)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

static import TransformationState

@Praveen2112 Praveen2112 force-pushed the semi_join_processor branch 3 times, most recently from 654277f to d9ecd4f Compare July 17, 2019 08:10
@Praveen2112
Copy link
Member Author

@sopel39 Thanks for your comments. Have applied the comments.

@sopel39
Copy link
Member

sopel39 commented Jul 17, 2019

part of: #49


if (channelSet == null) {
if (!channelSetFuture.isDone()) {
localMemoryContext.setBytes(inputPage.getSizeInBytes());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: you could add comment that this will materialize page, but it shouldn't matter for first page

}
if (!contains && channelSet.containsNull()) {
blockBuilder.appendNull();
checkSuccess(channelSetFuture, "Set building failed");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Set building failed -> ChannelSet building failed

private final Optional<Integer> probeHashChannel;
private final LocalMemoryContext localMemoryContext;

private ChannelSet channelSet;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add @Nullable annotation

}
}
// add the new boolean column to the page
return TransformationState.ofResult(inputPage.appendColumn(blockBuilder.build()), true);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just use ofResult(T result)

this.channelSetFuture = requireNonNull(channelSetFuture, "hashProvider is null").getChannelSet();
this.probeJoinChannel = probeJoinChannel;
this.probeHashChannel = requireNonNull(probeHashChannel, "hashChannel is null");
this.localMemoryContext = requireNonNull(aggregatedMemoryContext, "AggregatedMemoryContext is null").newLocalMemoryContext(SemiJoinPages.class.getSimpleName());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AggregatedMemoryContext -> aggregatedMemoryContext

@sopel39
Copy link
Member

sopel39 commented Jul 17, 2019

minor comments

@Praveen2112
Copy link
Member Author

@sopel39 Have applied the comments.

if (channelSet == null) {
if (!channelSetFuture.isDone()) {
// This will materialize page but it shouldn't matter for the first page
localMemoryContext.setBytes(inputPage.getSizeInBytes());
Copy link
Member

@sopel39 sopel39 Jul 17, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dain this makes HashSemiJoinOperator keep first input page (to progress probe computations before build future is done). I don't think it's relevant memory usage. What do you think?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For more context we want to progress upstream operators computations (e.g aggregation) by pulling initial page from probe side when build side future is not done. In current operator model this is also the case. However, in current model computations are performed up to input of next upstream operator. In WorkProcessorOperator model computations are performed up to input of HashSemiJoinOperator.

@@ -11,6 +11,6 @@ node.environment=test
coordinator=false
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

commit message too long. This should go before port commit

@@ -11,6 +11,6 @@ node.environment=test
coordinator=false
http-server.http.port=8081
query.max-memory=1GB
query.max-memory-per-node=512MB
query.max-memory-per-node=768MB
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sql_tests.testcases.hive_tpch.q18 failed because exceeding node query memory limit. However it was already on the edge with top consuming operators:

Query exceeded per-node user memory limit of 512MB [Allocated: 511.83MB, Delta: 1.69MB,
Top Consumers: {HashBuilderOperator=363.73MB, HashAggregationOperator=144.22MB, PartitionedOutputOperator=42.01MB}]

HashSemiJoinOperator is not even on top consumers list

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was this change related to the PR?

Copy link
Member

@sopel39 sopel39 May 29, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Memory accounting was improved as part of this PR (and other work processor PRs). Also first page is hold until build side is ready. It tipped already borderline mem limit (this operator is not even one of the top consumers)

if (channelSet == null) {
if (!channelSetFuture.isDone()) {
// This will materialize page but it shouldn't matter for the first page
localMemoryContext.setBytes(inputPage.getSizeInBytes());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For more context we want to progress upstream operators computations (e.g aggregation) by pulling initial page from probe side when build side future is not done. In current operator model this is also the case. However, in current model computations are performed up to input of next upstream operator. In WorkProcessorOperator model computations are performed up to input of HashSemiJoinOperator.

@sopel39
Copy link
Member

sopel39 commented Jul 22, 2019

Some synthetic experiment:

presto> set session work_processor_pipelines=false;
SET SESSION
presto> explain analyze select * from hive.tpch_sf10_orc.lineitem where orderkey in (select orderkey+1 from hive.tpch_sf10_orc.lineitem where orderkey < 100) limit 10;
                                                                                                                                                                                 Query Plan
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Fragment 1 [SINGLE]
     CPU: 3.04ms, Scheduled: 23.36ms, Input: 10 rows (1.48kB); per task: avg.: 10.00 std.dev.: 0.00, Output: 10 rows (1.48kB)
     Output layout: [orderkey, partkey, suppkey, linenumber, quantity, extendedprice, discount, tax, returnflag, linestatus, shipdate, commitdate, receiptdate, shipinstruct, shipmode, comment]
     Output partitioning: SINGLE []
     Stage Execution Strategy: UNGROUPED_EXECUTION
     Limit[10]
     │   Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestatus:varchar(1
     │   Estimates: {rows: 10 (3.50kB), cpu: ?, memory: ?, network: ?}
     │   CPU: 0.00ns (0.00%), Scheduled: 0.00ns (0.00%), Output: 10 rows (1.48kB)
     │   Input avg.: 10.00 rows, Input std.dev.: 0.00%
     └─ LocalExchange[SINGLE] ()
        │   Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestatus:varcha
        │   Estimates: {rows: 10 (3.50kB), cpu: ?, memory: ?, network: ?}
        │   CPU: 0.00ns (0.00%), Scheduled: 0.00ns (0.00%), Output: 10 rows (1.48kB)
        │   Input avg.: 0.63 rows, Input std.dev.: 387.30%
        └─ RemoteSource[2]
               Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestatus:var
               CPU: 0.00ns (0.00%), Scheduled: 0.00ns (0.00%), Output: 10 rows (1.48kB)
               Input avg.: 0.63 rows, Input std.dev.: 387.30%

 Fragment 2 [SOURCE]
     CPU: 43.00s, Scheduled: 4.57m, Input: 59986157 rows (7.30GB); per task: avg.: 59986157.00 std.dev.: 0.00, Output: 10 rows (1.48kB)
     Output layout: [orderkey, partkey, suppkey, linenumber, quantity, extendedprice, discount, tax, returnflag, linestatus, shipdate, commitdate, receiptdate, shipinstruct, shipmode, comment]
     Output partitioning: SINGLE []
     Stage Execution Strategy: UNGROUPED_EXECUTION
     LimitPartial[10]
     │   Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestatus:varchar(1
     │   Estimates: {rows: 10 (3.52kB), cpu: ?, memory: ?, network: ?}
     │   CPU: 276.00ms (0.06%), Scheduled: 461.00ms (1.07%), Output: 10 rows (1.48kB)
     │   Input avg.: 1.83 rows, Input std.dev.: 714.14%
     └─ Filter[filterPredicate = "expr_22"]
        │   Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestatus:varcha
        │   Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?}
        │   CPU: 1.05s (0.21%), Scheduled: 1.28s (2.98%), Output: 95 rows (14.27kB)
        │   Input avg.: 1153577.92 rows, Input std.dev.: 30.50%
        └─ Project[]
           │   Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestatus:var
           │   Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?}
           │   CPU: 2.19s (0.44%), Scheduled: 3.47s (8.06%), Output: 59986052 rows (7.41GB)
           │   Input avg.: 1153577.92 rows, Input std.dev.: 30.50%
           └─ SemiJoin[orderkey = expr][$hashvalue, $hashvalue_87]
              │   Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestatus:
              │   Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?}
              │   CPU: 2.78s (0.56%), Scheduled: 3.78s (8.77%), Output: 59986052 rows (7.91GB)
              │   Distribution: REPLICATED
              ├─ ScanProject[table = hive:tpch_sf10_orc:lineitem, grouped = false]
              │      Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestat
              │      Estimates: {rows: ? (?), cpu: ?, memory: 0B, network: 0B}/{rows: ? (?), cpu: ?, memory: 0B, network: 0B}
              │      CPU: 36.70s (7.43%), Scheduled: 7.96m (1107.99%), Output: 59986052 rows (7.80GB)
              │      Input avg.: 1153577.92 rows, Input std.dev.: 30.50%
              │      $hashvalue := "combine_hash"(bigint '0', COALESCE("$operator$hash_code"("orderkey"), 0))
              │      returnflag := returnflag:varchar(1):8:REGULAR
              │      linenumber := linenumber:int:3:REGULAR
              │      quantity := quantity:double:4:REGULAR
              │      orderkey := orderkey:bigint:0:REGULAR
              │      shipmode := shipmode:varchar(10):14:REGULAR
              │      discount := discount:double:6:REGULAR
              │      tax := tax:double:7:REGULAR
              │      suppkey := suppkey:bigint:2:REGULAR
              │      partkey := partkey:bigint:1:REGULAR
              │      shipinstruct := shipinstruct:varchar(25):13:REGULAR
              │      linestatus := linestatus:varchar(1):9:REGULAR
              │      extendedprice := extendedprice:double:5:REGULAR
              │      comment := comment:varchar(44):15:REGULAR
              │      receiptdate := receiptdate:date:12:REGULAR
              │      commitdate := commitdate:date:11:REGULAR
              │      shipdate := shipdate:date:10:REGULAR
              │      Input: 59986052 rows (7.30GB), Filtered: 0.00%
              └─ LocalExchange[SINGLE] ()
                 │   Layout: [expr:bigint, $hashvalue_87:bigint]
                 │   Estimates: {rows: ? (?), cpu: ?, memory: 0B, network: ?}
                 │   CPU: 0.00ns (0.00%), Scheduled: 0.00ns (0.00%), Output: 105 rows (1.85kB)
                 │   Input avg.: 6.56 rows, Input std.dev.: 387.30%
                 └─ RemoteSource[3]
                        Layout: [expr:bigint, $hashvalue_88:bigint]
                        CPU: 0.00ns (0.00%), Scheduled: 0.00ns (0.00%), Output: 105 rows (1.85kB)
                        Input avg.: 6.56 rows, Input std.dev.: 387.30%

 Fragment 3 [SOURCE]
     CPU: 108.31ms, Scheduled: 7.25s, Input: 10000 rows (87.89kB); per task: avg.: 10000.00 std.dev.: 0.00, Output: 105 rows (1.85kB)
     Output layout: [expr, $hashvalue_89]
     Output partitioning: BROADCAST []
     Stage Execution Strategy: UNGROUPED_EXECUTION
     Project[]
     │   Layout: [expr:bigint, $hashvalue_89:bigint]
     │   Estimates: {rows: ? (?), cpu: ?, memory: 0B, network: 0B}
     │   CPU: 2.00ms (0.00%), Scheduled: 1.00ms (0.00%), Output: 105 rows (1.85kB)
     │   Input avg.: 2.02 rows, Input std.dev.: 714.14%
     │   $hashvalue_89 := "combine_hash"(bigint '0', COALESCE("$operator$hash_code"("expr"), 0))
     └─ ScanFilterProject[table = hive:tpch_sf10_orc:lineitem, grouped = false, filterPredicate = ("orderkey_1" < BIGINT '100')]
            Layout: [expr:bigint]
            Estimates: {rows: ? (?), cpu: ?, memory: 0B, network: 0B}/{rows: ? (?), cpu: ?, memory: 0B, network: 0B}/{rows: ? (?), cpu: ?, memory: 0B, network: 0B}
            CPU: 104.00ms (0.02%), Scheduled: 7.33s (16.99%), Output: 105 rows (945B)
            Input avg.: 192.31 rows, Input std.dev.: 714.14%
            expr := ("orderkey_1" + BIGINT '1')
            orderkey_1 := orderkey:bigint:0:REGULAR
            Input: 10000 rows (87.89kB), Filtered: 98.95%


(1 row)

Query 20190722_202711_00007_ejrht, FINISHED, 1 node
Splits: 155 total, 155 done (100,00%)
0:19 [60M rows, 1,61GB] [3,12M rows/s, 85,9MB/s]

presto> set session work_processor_pipelines=true;
SET SESSION
presto> explain analyze select * from hive.tpch_sf10_orc.lineitem where orderkey in (select orderkey+1 from hive.tpch_sf10_orc.lineitem where orderkey < 100) limit 10;
                                                                                                                                                                                 Query Plan
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Fragment 1 [SINGLE]
     CPU: 3.09ms, Scheduled: 5.18ms, Input: 10 rows (1.53kB); per task: avg.: 10.00 std.dev.: 0.00, Output: 10 rows (1.53kB)
     Output layout: [orderkey, partkey, suppkey, linenumber, quantity, extendedprice, discount, tax, returnflag, linestatus, shipdate, commitdate, receiptdate, shipinstruct, shipmode, comment]
     Output partitioning: SINGLE []
     Stage Execution Strategy: UNGROUPED_EXECUTION
     Limit[10]
     │   Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestatus:varchar(1
     │   Estimates: {rows: 10 (3.50kB), cpu: ?, memory: ?, network: ?}
     │   CPU: 1.00ms (0.00%), Scheduled: 1.00ms (0.01%), Output: 10 rows (1.53kB)
     │   Input avg.: 10.00 rows, Input std.dev.: 0.00%
     └─ LocalExchange[SINGLE] ()
        │   Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestatus:varcha
        │   Estimates: {rows: 10 (3.50kB), cpu: ?, memory: ?, network: ?}
        │   CPU: 0.00ns (0.00%), Scheduled: 0.00ns (0.00%), Output: 10 rows (1.53kB)
        │   Input avg.: 0.63 rows, Input std.dev.: 252.19%
        └─ RemoteSource[2]
               Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestatus:var
               CPU: 0.00ns (0.00%), Scheduled: 1.00ms (0.01%), Output: 10 rows (1.53kB)
               Input avg.: 0.63 rows, Input std.dev.: 252.19%

 Fragment 2 [SOURCE]
     CPU: 10.92s, Scheduled: 2.04m, Input: 58676188 rows (503.63MB); per task: avg.: 58676188.00 std.dev.: 0.00, Output: 10 rows (1.53kB)
     Output layout: [orderkey, partkey, suppkey, linenumber, quantity, extendedprice, discount, tax, returnflag, linestatus, shipdate, commitdate, receiptdate, shipinstruct, shipmode, comment]
     Output partitioning: SINGLE []
     Stage Execution Strategy: UNGROUPED_EXECUTION
     LimitPartial[10]
     │   Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestatus:varchar(1
     │   Estimates: {rows: 10 (3.52kB), cpu: ?, memory: ?, network: ?}
     │   CPU: 2.00ms (0.00%), Scheduled: 2.00ms (0.02%), Output: 10 rows (1.53kB)
     │   Input avg.: 0.37 rows, Input std.dev.: 714.14%
     └─ Filter[filterPredicate = "expr_22"]
        │   Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestatus:varcha
        │   Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?}
        │   CPU: 664.00ms (0.29%), Scheduled: 913.00ms (8.34%), Output: 19 rows (2.83kB)
        │   Input avg.: 1128386.21 rows, Input std.dev.: 34.13%
        └─ Project[]
           │   Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestatus:var
           │   Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?}
           │   CPU: 1.03s (0.45%), Scheduled: 1.65s (15.08%), Output: 58676083 rows (615.55MB)
           │   Input avg.: 1128386.21 rows, Input std.dev.: 34.13%
           └─ SemiJoin[orderkey = expr][$hashvalue, $hashvalue_87]
              │   Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestatus:
              │   Estimates: {rows: ? (?), cpu: ?, memory: ?, network: ?}
              │   CPU: 4.32s (1.88%), Scheduled: 59.51s (543.72%), Output: 58676083 rows (1.09GB)
              │   Distribution: REPLICATED
              ├─ ScanProject[table = hive:tpch_sf10_orc:lineitem, grouped = false]
              │      Layout: [orderkey:bigint, partkey:bigint, suppkey:bigint, linenumber:integer, quantity:double, extendedprice:double, discount:double, tax:double, returnflag:varchar(1), linestat
              │      Estimates: {rows: ? (?), cpu: ?, memory: 0B, network: 0B}/{rows: ? (?), cpu: ?, memory: 0B, network: 0B}
              │      CPU: 4.83s (2.10%), Scheduled: 2.74m (1500.59%), Output: 58676083 rows (1007.25MB)
              │      Input avg.: 1128386.21 rows, Input std.dev.: 34.13%
              │      $hashvalue := "combine_hash"(bigint '0', COALESCE("$operator$hash_code"("orderkey"), 0))
              │      returnflag := returnflag:varchar(1):8:REGULAR
              │      linenumber := linenumber:int:3:REGULAR
              │      quantity := quantity:double:4:REGULAR
              │      orderkey := orderkey:bigint:0:REGULAR
              │      shipmode := shipmode:varchar(10):14:REGULAR
              │      discount := discount:double:6:REGULAR
              │      tax := tax:double:7:REGULAR
              │      suppkey := suppkey:bigint:2:REGULAR
              │      partkey := partkey:bigint:1:REGULAR
              │      shipinstruct := shipinstruct:varchar(25):13:REGULAR
              │      linestatus := linestatus:varchar(1):9:REGULAR
              │      extendedprice := extendedprice:double:5:REGULAR
              │      comment := comment:varchar(44):15:REGULAR
              │      receiptdate := receiptdate:date:12:REGULAR
              │      commitdate := commitdate:date:11:REGULAR
              │      shipdate := shipdate:date:10:REGULAR
              │      Input: 58676083 rows (503.63MB), Filtered: 0.00%
              └─ LocalExchange[SINGLE] ()
                 │   Layout: [expr:bigint, $hashvalue_87:bigint]
                 │   Estimates: {rows: ? (?), cpu: ?, memory: 0B, network: ?}
                 │   CPU: 0.00ns (0.00%), Scheduled: 0.00ns (0.00%), Output: 105 rows (1.85kB)
                 │   Input avg.: 6.56 rows, Input std.dev.: 387.30%
                 └─ RemoteSource[3]
                        Layout: [expr:bigint, $hashvalue_88:bigint]
                        CPU: 0.00ns (0.00%), Scheduled: 0.00ns (0.00%), Output: 105 rows (1.85kB)
                        Input avg.: 6.56 rows, Input std.dev.: 387.30%

 Fragment 3 [SOURCE]
     CPU: 101.10ms, Scheduled: 3.26s, Input: 10000 rows (87.89kB); per task: avg.: 10000.00 std.dev.: 0.00, Output: 105 rows (1.85kB)
     Output layout: [expr, $hashvalue_89]
     Output partitioning: BROADCAST []
     Stage Execution Strategy: UNGROUPED_EXECUTION
     Project[]
     │   Layout: [expr:bigint, $hashvalue_89:bigint]
     │   Estimates: {rows: ? (?), cpu: ?, memory: 0B, network: 0B}
     │   CPU: 2.00ms (0.00%), Scheduled: 5.00ms (0.05%), Output: 105 rows (1.85kB)
     │   Input avg.: 2.02 rows, Input std.dev.: 714.14%
     │   $hashvalue_89 := "combine_hash"(bigint '0', COALESCE("$operator$hash_code"("expr"), 0))
     └─ ScanFilterProject[table = hive:tpch_sf10_orc:lineitem, grouped = false, filterPredicate = ("orderkey_1" < BIGINT '100')]
            Layout: [expr:bigint]
            Estimates: {rows: ? (?), cpu: ?, memory: 0B, network: 0B}/{rows: ? (?), cpu: ?, memory: 0B, network: 0B}/{rows: ? (?), cpu: ?, memory: 0B, network: 0B}
            CPU: 96.00ms (0.04%), Scheduled: 3.42s (31.27%), Output: 105 rows (945B)
            Input avg.: 192.31 rows, Input std.dev.: 714.14%
            expr := ("orderkey_1" + BIGINT '1')
            orderkey_1 := orderkey:bigint:0:REGULAR
            Input: 10000 rows (87.89kB), Filtered: 98.95%


(1 row)

@dain dain assigned dain and unassigned dain Jul 23, 2019
@sopel39 sopel39 merged commit c70d1a3 into trinodb:master Jul 30, 2019
@sopel39 sopel39 mentioned this pull request Jul 30, 2019
5 tasks
@Praveen2112 Praveen2112 deleted the semi_join_processor branch September 14, 2019 12:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging this pull request may close these issues.

None yet

4 participants