THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
== Abstract Syntax Tree == LogicalUnion(all=[true]) :- LogicalProject(count=[$0], word=[$1]) : +- LogicalFilter(condition=[LIKE($1, _UTF-16LE'F%')]) : +- LogicalTableScan(table=[[default_catalog, default_database, MyTable1]]) +- LogicalProject(count=[$0], word=[$1]) +- LogicalTableScan(table=[[default_catalog, default_database, MyTable2]]) == Optimized Physical Plan With Advice == Union(advice=[1], all=[true], union=[count, word]) :- Calc(select=[count, word], where=[LIKE(word, _UTF-16LE'F%')]) : +- TableSourceScan(table=[[default_catalog, default_database, MyTable1]], fields=[count, word]) +- TableSourceScan(advice=[2], table=[[default_catalog, default_database, MyTable2]], fields=[count, word]) advice[1]: You might want to pay attention to this node because ... advice[2]: You might want to pay attention to this node because ... == Optimized Execution Plan == Union(all=[true], union=[count, word]) :- Calc(select=[count, word], where=[LIKE(word, _UTF-16LE'F%')]) : +- TableSourceScan(table=[[default_catalog, default_database, MyTable1]], fields=[count, word]) +- TableSourceScan(table=[[default_catalog, default_database, MyTable2]], fields=[count, word]) |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
== Abstract Syntax Tree == LogicalUnion(all=[true]) :- LogicalProject(count=[$0], word=[$1]) : +- LogicalFilter(condition=[LIKE($1, _UTF-16LE'F%')]) : +- LogicalTableScan(table=[[default_catalog, default_database, MyTable1]]) +- LogicalProject(count=[$0], word=[$1]) +- LogicalTableScan(table=[[default_catalog, default_database, MyTable2]]) == Optimized Physical Plan With Advice == Union(all=[true], union=[count, word]) :- Calc(select=[count, word], where=[LIKE(word, _UTF-16LE'F%')]) : +- TableSourceScan(table=[[default_catalog, default_database, MyTable1]], fields=[count, word]) +- TableSourceScan(table=[[default_catalog, default_database, MyTable2]], fields=[count, word]) advice[1]: You might want to configure 'xxx' to improve .... advice[2]: You might want to configure 'yyy' to improve .... == Optimized Execution Plan == Union(all=[true], union=[count, word]) :- Calc(select=[count, word], where=[LIKE(word, _UTF-16LE'F%')]) : +- TableSourceScan(table=[[default_catalog, default_database, MyTable1]], fields=[count, word]) +- TableSourceScan(table=[[default_catalog, default_database, MyTable2]], fields=[count, word]) |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
== Abstract Syntax Tree == LogicalUnion(all=[true]) :- LogicalProject(count=[$0], word=[$1]) : +- LogicalFilter(condition=[LIKE($1, _UTF-16LE'F%')]) : +- LogicalTableScan(table=[[default_catalog, default_database, MyTable1]]) +- LogicalProject(count=[$0], word=[$1]) +- LogicalTableScan(table=[[default_catalog, default_database, MyTable2]]) == Optimized Physical Plan With Advice == Union(advice=[1], all=[true], union=[count, word]) :- Calc(select=[count, word], where=[LIKE(word, _UTF-16LE'F%')]) : +- TableSourceScan(advice=[2], table=[[default_catalog, default_database, MyTable1]], fields=[count, word]) +- TableSourceScan(table=[[default_catalog, default_database, MyTable2]], fields=[count, word]) advice[1]: You might want to pay attention to this node because ... advice[2]: You might want to pay attention to this node because ... adivce[3]: You might want to configure 'yyy' to improve .... == Optimized Execution Plan == Union(all=[true], union=[count, word]) :- Calc(select=[count, word], where=[LIKE(word, _UTF-16LE'F%')]) : +- TableSourceScan(table=[[default_catalog, default_database, MyTable1]], fields=[count, word]) +- TableSourceScan(table=[[default_catalog, default_database, MyTable2]], fields=[count, word]) |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
== Abstract Syntax Tree == LogicalUnion(all=[true]) :- LogicalProject(count=[$0], word=[$1]) : +- LogicalFilter(condition=[LIKE($1, _UTF-16LE'F%')]) : +- LogicalTableScan(table=[[default_catalog, default_database, MyTable1]]) +- LogicalProject(count=[$0], word=[$1]) +- LogicalTableScan(table=[[default_catalog, default_database, MyTable2]]) == Optimized Physical Plan With Advice == Union(all=[true], union=[count, word]) :- Calc(select=[count, word], where=[LIKE(word, _UTF-16LE'F%')]) : +- TableSourceScan(table=[[default_catalog, default_database, MyTable1]], fields=[count, word]) +- TableSourceScan(table=[[default_catalog, default_database, MyTable2]], fields=[count, word]) advice: No available advice. == Optimized Execution Plan == Union(all=[true], union=[count, word]) :- Calc(select=[count, word], where=[LIKE(word, _UTF-16LE'F%')]) : +- TableSourceScan(table=[[default_catalog, default_database, MyTable1]], fields=[count, word]) +- TableSourceScan(table=[[default_catalog, default_database, MyTable2]], fields=[count, word]) |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
set 'table.exec.state.ttl' = '36000'; create table `order` ( order_id bigint not null primary key not enforced, gmt_create timestamp(3) not null, buyer_id bigint not null, category_id bigint not null, amount double not null, ptime as proctime() ) with ( 'connector' = 'values', 'bounded' = 'false' ); create table `category` ( category_id bigint not null primary key not enforced, category_name string not null ) with ( 'connector' = 'values', 'bounded' = 'false' ); explain plan_advice select b.category_name, sum(a.amount) as revenue from `order` a left join `category` for system_time as of `a`.`ptime` as `b` on a.category_id = b.category_id group by b.category_name; |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
== Abstract Syntax Tree == LogicalAggregate(group=[{0}], revenue=[SUM($1)]) +- LogicalProject(category_name=[$7], amount=[$4]) +- LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{3, 5}]) :- LogicalProject(order_id=[$0], gmt_create=[$1], buyer_id=[$2], category_id=[$3], amount=[$4], ptime=[PROCTIME()]) : +- LogicalTableScan(table=[[default_catalog, default_database, order]]) +- LogicalFilter(condition=[=($cor0.category_id, $0)]) +- LogicalSnapshot(period=[$cor0.ptime]) +- LogicalTableScan(table=[[default_catalog, default_database, category]]) == Optimized Physical Plan With Advice == GroupAggregate(advice=[1], groupBy=[category_name], select=[category_name, SUM(amount) AS revenue]) +- Exchange(distribution=[hash[category_name]]) +- Calc(select=[category_name, amount]) +- LookupJoin(advice=[1], table=[default_catalog.default_database.category], joinType=[LeftOuterJoin], lookup=[category_id=category_id], select=[category_id, amount, category_id0, category_name]) +- TableSourceScan(table=[[default_catalog, default_database, order, project=[category_id, amount], metadata=[]]], fields=[category_id, amount]) advice[1]: You might want to pay attention to this node because state expiration configuration 'table.exec.state.ttl' is enabled. == Optimized Execution Plan == GroupAggregate(groupBy=[category_name], select=[category_name, SUM(amount) AS revenue]) +- Exchange(distribution=[hash[category_name]]) +- Calc(select=[category_name, amount]) +- LookupJoin(table=[default_catalog.default_database.category], joinType=[LeftOuterJoin], lookup=[category_id=category_id], select=[category_id, amount, category_id0, category_name]) +- TableSourceScan(table=[[default_catalog, default_database, order, project=[category_id, amount], metadata=[]]], fields=[category_id, amount]) |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
create temporary table cdc_with_meta ( a int, b bigint, c string, d boolean, metadata_1 int metadata, metadata_2 string metadata, metadata_3 bigint metadata, primary key (a) not enforced ) with ( 'connector' = 'values', 'changelog-mode' = 'I,UA,UB,D', 'readable-metadata' = 'metadata_1:INT, metadata_2:STRING, metadata_3:BIGINT' ); create temporary table sink_without_pk ( a int, b bigint, c string ) with ( 'connector' = 'values', 'sink-insert-only' = 'false' ); explain plan_advice insert into sink_without_pk select a, metadata_3, c from cdc_with_meta |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
== Abstract Syntax Tree == LogicalSink(table=[default_catalog.default_database.sink_without_pk], fields=[a, metadata_3, c]) +- LogicalProject(a=[$0], metadata_3=[$6], c=[$2]) +- LogicalTableScan(table=[[default_catalog, default_database, cdc_with_meta]]) == Optimized Physical Plan With Advice == Sink(table=[default_catalog.default_database.sink_without_pk], fields=[a, metadata_3, c]) +- Calc(select=[a, metadata_3, c]) +- TableSourceScan[3](table=[[default_catalog, default_database, cdc_with_meta, project=[a, c], metadata=[metadata_3]]], fields=[a, c, metadata_3]) advice[1]: The metadata column(s): 'metadata_3' in cdc source may cause wrong result or error on downstream operators, please consider removing these columns or use a non-cdc source that only has insert messages. source node: TableSourceScan(table=[[default_catalog, default_database, cdc_with_meta, project=[a, c], metadata=[metadata_3]]], fields=[a, c, metadata_3], changelogMode=[I,UB,UA,D], upsertKeys=[[a]]) == Optimized Execution Plan == Sink(table=[default_catalog.default_database.sink_without_pk], fields=[a, metadata_3, c]) +- Calc(select=[a, metadata_3, c]) +- TableSourceScan(table=[[default_catalog, default_database, cdc_with_meta, project=[a, c], metadata=[metadata_3]]], fields=[a, c, metadata_3]) |
...