Konstantin Orlov created IGNITE-25369: -----------------------------------------
Summary: Sql. Introduce EXPLAIN MAPPING FOR command Key: IGNITE-25369 URL: https://issues.apache.org/jira/browse/IGNITE-25369 Project: Ignite Issue Type: Improvement Components: sql ai3 Reporter: Konstantin Orlov Apache Ignite is distributed system. It has an ability to have several copies of the data named replicas. Therefore, to execute a query, original plan is split on number of fragments, and every fragment is mapped on subset of nodes. It would be beneficial to provide an insight on which nodes will be used to execute which part of the query. For this, let's introduce to command {{EXPLAIN MAPPING FOR <queryOrDml>}}. Below is suggested output of the command: {code} EXPLAIN MAPPING FOR SELECT U.UserName, P.ProductName, R.ReviewText, R.Rating FROM Users U, Reviews R, Products P WHERE U.UserID = R.UserID AND R.ProductID = P.ProductID AND P.ProductName = 'Product_' || ?::varchar; Fragment#0 root executionNodes: [ijot_n_3344] plan: Project fields: [USERNAME, PRODUCTNAME, REVIEWTEXT, RATING] exprs: [USERNAME, PRODUCTNAME, REVIEWTEXT, RATING] est: (rows=1) HashJoin condition: =(USERID0, USERID) joinType: inner est: (rows=1) HashJoin condition: =(PRODUCTID, PRODUCTID0) joinType: inner est: (rows=1) Receiver rowType: RecordType(INTEGER PRODUCTID, INTEGER USERID, VARCHAR(65536) REVIEWTEXT, INTEGER RATING) exchangeId: 1 sourceFragmentId: 1 est: (rows=1) Receiver rowType: RecordType(INTEGER PRODUCTID, VARCHAR(100) PRODUCTNAME) exchangeId: 2 sourceFragmentId: 2 est: (rows=1) Receiver rowType: RecordType(INTEGER USERID, VARCHAR(100) USERNAME) exchangeId: 3 sourceFragmentId: 3 est: (rows=1) Fragment#1 targetFragment: 0 executionNodes: [ijot_n_3344, ijot_n_3345, ijot_n_3346] plan: Sender exchangeId: 1 targetFragmentId: 0 distribution: single est: (rows=50000) TableScan table: PUBLIC.REVIEWS fields: [PRODUCTID, USERID, REVIEWTEXT, RATING] sourceId: 6 est: (rows=50000) Fragment#2 targetFragment: 0 executionNodes: [ijot_n_3344, ijot_n_3345, ijot_n_3346] plan: Sender exchangeId: 2 targetFragmentId: 0 distribution: single est: (rows=1665) TableScan table: PUBLIC.PRODUCTS filters: =(PRODUCTNAME, ||(_UTF-8'Product_', CAST(?0):VARCHAR CHARACTER SET "UTF-8")) fields: [PRODUCTID, PRODUCTNAME] sourceId: 5 est: (rows=1665) Fragment#3 targetFragment: 0 executionNodes: [ijot_n_3344, ijot_n_3345, ijot_n_3346] plan: Sender exchangeId: 3 targetFragmentId: 0 distribution: single est: (rows=10000) TableScan table: PUBLIC.USERS fields: [USERID, USERNAME] sourceId: 4 est: (rows=10000) {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)