[ { "Name": "TestSetOperation", "Cases": [ { "SQL": "select * from t3 union select * from t1", "Plan": [ "HashAgg_11 16000.00 root group by:Column#5, funcs:firstrow(Column#5)->Column#5", "└─Union_12 20000.00 root ", " ├─TableReader_15 10000.00 root data:TableFullScan_14", " │ └─TableFullScan_14 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", " └─TableReader_18 10000.00 root data:TableFullScan_17", " └─TableFullScan_17 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1", "2", "3", "" ] }, { "SQL": "select * from t2 union all select * from t1", "Plan": [ "Union_8 20000.00 root ", "├─TableReader_11 10000.00 root data:TableFullScan_10", "│ └─TableFullScan_10 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─TableReader_14 10000.00 root data:TableFullScan_13", " └─TableFullScan_13 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1", "1", "1", "2", "2", "3", "", "", "" ] }, { "SQL": "select * from t1 except select * from t3", "Plan": [ "HashJoin_7 6400.00 root anti semi join, equal:[nulleq(test.t1.a, test.t3.a)]", "├─TableReader_18(Build) 10000.00 root data:TableFullScan_17", "│ └─TableFullScan_17 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", "└─HashAgg_10(Probe) 8000.00 root group by:test.t1.a, funcs:firstrow(test.t1.a)->test.t1.a", " └─TableReader_15 10000.00 root data:TableFullScan_14", " └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1", "" ] }, { "SQL": "select * from t1 intersect select * from t2", "Plan": [ "HashJoin_7 6400.00 root semi join, equal:[nulleq(test.t1.a, test.t2.a)]", "├─TableReader_18(Build) 10000.00 root data:TableFullScan_17", "│ └─TableFullScan_17 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─HashAgg_10(Probe) 8000.00 root group by:test.t1.a, funcs:firstrow(test.t1.a)->test.t1.a", " └─TableReader_15 10000.00 root data:TableFullScan_14", " └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1", "2", "" ] }, { "SQL": "select * from t1 union all select * from t2 union all select * from t3", "Plan": [ "Union_11 30000.00 root ", "├─TableReader_14 10000.00 root data:TableFullScan_13", "│ └─TableFullScan_13 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "├─TableReader_17 10000.00 root data:TableFullScan_16", "│ └─TableFullScan_16 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─TableReader_20 10000.00 root data:TableFullScan_19", " └─TableFullScan_19 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo" ], "Res": [ "1", "1", "1", "2", "2", "2", "3", "3", "", "", "" ] }, { "SQL": "select * from t1 union all select * from t2 except select * from t3", "Plan": [ "HashJoin_12 12800.00 root anti semi join, equal:[nulleq(Column#7, test.t3.a)]", "├─TableReader_25(Build) 10000.00 root data:TableFullScan_24", "│ └─TableFullScan_24 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", "└─HashAgg_15(Probe) 16000.00 root group by:Column#7, funcs:firstrow(Column#7)->Column#7", " └─Union_16 20000.00 root ", " ├─TableReader_19 10000.00 root data:TableFullScan_18", " │ └─TableFullScan_18 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", " └─TableReader_22 10000.00 root data:TableFullScan_21", " └─TableFullScan_21 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo" ], "Res": [ "1", "" ] }, { "SQL": "select * from t1 intersect select * from t2 intersect select * from t1", "Plan": [ "HashJoin_12 5120.00 root semi join, equal:[nulleq(test.t1.a, test.t1.a)]", "├─TableReader_27(Build) 10000.00 root data:TableFullScan_26", "│ └─TableFullScan_26 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "└─HashJoin_14(Probe) 6400.00 root semi join, equal:[nulleq(test.t1.a, test.t2.a)]", " ├─TableReader_24(Build) 10000.00 root data:TableFullScan_23", " │ └─TableFullScan_23 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", " └─HashAgg_17(Probe) 8000.00 root group by:test.t1.a, funcs:firstrow(test.t1.a)->test.t1.a", " └─TableReader_22 10000.00 root data:TableFullScan_21", " └─TableFullScan_21 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1", "2", "" ] }, { "SQL": "select * from t1 union all select * from t2 intersect select * from t3", "Plan": [ "Union_12 16400.00 root ", "├─TableReader_15 10000.00 root data:TableFullScan_14", "│ └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "└─HashJoin_17 6400.00 root semi join, equal:[nulleq(test.t2.a, test.t3.a)]", " ├─TableReader_27(Build) 10000.00 root data:TableFullScan_26", " │ └─TableFullScan_26 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", " └─HashAgg_20(Probe) 8000.00 root group by:test.t2.a, funcs:firstrow(test.t2.a)->test.t2.a", " └─TableReader_25 10000.00 root data:TableFullScan_24", " └─TableFullScan_24 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo" ], "Res": [ "1", "1", "2", "2", "3", "" ] }, { "SQL": "select * from t1 except select * from t2 intersect select * from t3", "Plan": [ "HashJoin_11 6400.00 root anti semi join, equal:[nulleq(test.t1.a, test.t2.a)]", "├─HashJoin_20(Build) 6400.00 root semi join, equal:[nulleq(test.t2.a, test.t3.a)]", "│ ├─TableReader_31(Build) 10000.00 root data:TableFullScan_30", "│ │ └─TableFullScan_30 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", "│ └─HashAgg_23(Probe) 8000.00 root group by:test.t2.a, funcs:firstrow(test.t2.a)->test.t2.a", "│ └─TableReader_28 10000.00 root data:TableFullScan_27", "│ └─TableFullScan_27 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─HashAgg_14(Probe) 8000.00 root group by:test.t1.a, funcs:firstrow(test.t1.a)->test.t1.a", " └─TableReader_19 10000.00 root data:TableFullScan_18", " └─TableFullScan_18 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1", "3", "" ] } ] } ]