[ 
https://issues.apache.org/jira/browse/KYLIN-5730?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

liyang closed KYLIN-5730.
-------------------------

> Query dry-run for better modeling
> ---------------------------------
>
>                 Key: KYLIN-5730
>                 URL: https://issues.apache.org/jira/browse/KYLIN-5730
>             Project: Kylin
>          Issue Type: Improvement
>    Affects Versions: 5.0-beta
>            Reporter: Xiaoxiang Yu
>            Assignee: Xiaoxiang Yu
>            Priority: Major
>             Fix For: 5.0.0
>
>         Attachments: KYLIN-5730-01.png, KYLIN-5730-02.png, KYLIN-5730-03.png
>
>
> h2. Background
> When user enable this feature, the query insight page will display helpful 
> message
> for user to understand why model is not match and what to do in next step.
>  
> Following messages will display some query analytics, including at least:
>  # RelNode Tree
>  # OLAPContext and matched Model for each context
>  # Spark Physical Plan
> Configuration entry is 'kylin.query.dryrun-enabled', at project level.
> h2. How to use
>  # enable this in project configuration
>  # send a query in Insight page
>  # read Dry-run message and fix something and retry
>  
> h4. Dry-run message sample:
>  # {{Last Exception :}}
> {{{}  No realization found for {id = 0, model = not matched, fact table = 
> TPCH_CN.LINEITEM{}}}}
> {{  Incapable message : MODEL_UNMATCHED_JOIN, MODEL_UNMATCHED_JOIN, 
> MODEL_UNMATCHED_JOIN, MODEL_UNMATCHED_JOIN, MODEL_UNMATCHED_JOIN, 
> MODEL_UNMATCHED_JOIN, MODEL_UNMATCHED_JOIN, MODEL_UNMATCHED_JOIN, }}
>  # {{OLAPContext(s) and matched model(s) :}}
> {{ Ctx=0 is not matched by any model/snapshot, recommend :}}
> {{ {}}
> {{   "Fact Table" : "TPCH_CN.LINEITEM",}}
> {{   "Dimension Tables" : [ "TPCH_CN.REGION", "TPCH_CN.ORDERS", 
> "TPCH_CN.SUPPLIER", "TPCH_CN.PART", "TPCH_CN.CUSTOMER", "TPCH_CN.NATION"],}}
> {{   "Query Columns" : [ "TPCH_CN.NATION.N_NAME", 
> "TPCH_CN.ORDERS.O_ORDERDATE", "TPCH_CN.REGION.R_NAME", "TPCH_CN.PART.P_TYPE", 
> "TPCH_CN.LINEITEM.DISC_PRICE"],}}
> {{   "Dimension(Group by)" : [ "TPCH_CN.ORDERS.O_ORDERDATE"],}}
> {{   "Dimension(Filter cond)" : [ "TPCH_CN.ORDERS.O_ORDERDATE", 
> "TPCH_CN.REGION.R_NAME", "TPCH_CN.PART.P_TYPE"],}}
> {{   "Measure" : [ "SUM(UNKNOWN_ALIAS.$F1)", 
> "SUM(T_1_4CD6601C.DISC_PRICE)"],}}
> {{   "Join" : "}}
> {{Fact: [T_1_4CD6601C:LINEITEM]}}
> {{  Dim: [T_1_4CD6601C:LINEITEM] INNER JOIN [T_2_716C1DB8:PART] ON 
> [L_PARTKEY] = [P_PARTKEY]}}
> {{  Dim: [T_1_4CD6601C:LINEITEM] INNER JOIN [T_3_6D21031C:SUPPLIER] ON 
> [L_SUPPKEY] = [S_SUPPKEY]}}
> {{    Dim: [T_3_6D21031C:SUPPLIER] INNER JOIN [T_7_4F00CD31:NATION] ON 
> [S_NATIONKEY] = [N_NATIONKEY]}}
> {{  Dim: [T_1_4CD6601C:LINEITEM] INNER JOIN [T_4_5CEAD9DF:ORDERS] ON 
> [L_ORDERKEY] = [O_ORDERKEY]}}
> {{    Dim: [T_4_5CEAD9DF:ORDERS] INNER JOIN [T_5_54B979E7:CUSTOMER] ON 
> [O_CUSTKEY] = [C_CUSTKEY]}}
> {{      Dim: [T_5_54B979E7:CUSTOMER] INNER JOIN [T_6_42081A08:NATION] ON 
> [C_NATIONKEY] = [N_NATIONKEY]}}
> {{        Dim: [T_6_42081A08:NATION] INNER JOIN [T_8_B14C00A:REGION] ON 
> [N_REGIONKEY] = [R_REGIONKEY]",}}
> {{   "Index Id" : 0,}}
> {{   "Query Column / Index Column" : "5 / 0",}}
> {{   "Index Columns" : []}}
> {{{} }{{}}}}
>  # {{RelNode(with ctx id) :}}
> {{  OLAPToEnumerableConverter}}
> {{  LimitRel(ctx=[0@null], fetch=[500])}}
> {{    SortRel(sort0=[$0], dir0=[ASC-nulls-first], ctx=[0@null])}}
> {{      ProjectRel(O_YEAR=[$0], MKT_SHARE=[/($1, $2)], ctx=[0@null])}}
> {{        AggregateRel(group-set=[[0]], groups=[null], agg#0=[SUM($1)], 
> agg#1=[SUM($2)], ctx=[0@null])}}
> {{          ProjectRel(O_YEAR=[EXTRACT(FLAG(YEAR), $54)], $f1=[CASE(=($72, 
> 'BRAZIL'), $16, 0)], VOLUME=[$16], ctx=[0@null])}}
> {{            FilterRel(condition=[AND(=($76, 'AMERICA'), >=($54, 
> 1995-01-01), <=($54, 1996-12-31), =($38, 'ECONOMY ANODIZED STEEL'))], 
> ctx=[0@null])}}
> {{              JoinRel(condition=[=($69, $75)], joinType=[inner], 
> ctx=[0@null])}}
> {{                JoinRel(condition=[=($46, $71)], joinType=[inner], 
> ctx=[0@null])}}
> {{                  JoinRel(condition=[=($62, $67)], joinType=[inner], 
> ctx=[0@null])}}
> {{                    JoinRel(condition=[=($51, $59)], joinType=[inner], 
> ctx=[0@null])}}
> {{                      JoinRel(condition=[=($0, $50)], joinType=[inner], 
> ctx=[0@null])}}
> {{                        JoinRel(condition=[=($2, $43)], joinType=[inner], 
> ctx=[0@null])}}
> {{                          JoinRel(condition=[=($1, $34)], joinType=[inner], 
> ctx=[0@null])}}
> {{                            TableScan(table=[[TPCH_CN, LINEITEM]], 
> ctx=[0@null], fields=[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 
> 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33]])}}
> {{                            TableScan(table=[[TPCH_CN, PART]], 
> ctx=[0@null], fields=[[0, 1, 2, 3, 4, 5, 6, 7, 8]])}}
> {{                          TableScan(table=[[TPCH_CN, SUPPLIER]], 
> ctx=[0@null], fields=[[0, 1, 2, 3, 4, 5, 6]])}}
> {{                        TableScan(table=[[TPCH_CN, ORDERS]], ctx=[0@null], 
> fields=[[0, 1, 2, 3, 4, 5, 6, 7, 8]])}}
> {{                      TableScan(table=[[TPCH_CN, CUSTOMER]], ctx=[0@null], 
> fields=[[0, 1, 2, 3, 4, 5, 6, 7]])}}
> {{                    TableScan(table=[[TPCH_CN, NATION]], ctx=[0@null], 
> fields=[[0, 1, 2, 3]])}}
> {{                  TableScan(table=[[TPCH_CN, NATION]], ctx=[0@null], 
> fields=[[0, 1, 2, 3]])}}
> {{                TableScan(table=[[TPCH_CN, REGION]], ctx=[0@null], 
> fields=[[0, 1, 2]])}}
>  # {{SQL Text :}}
> {{select /*+ MODEL_PRIORITY(Q8) */ o_year,}}
> {{ sum(case}}
> {{ when nation = 'BRAZIL'}}
> {{ then volume}}
> {{ else 0}}
> {{ end) / sum(volume)}}
> {{ as mkt_share}}
> {{from}}
> {{ (}}
> {{ select year(o_orderdate) as o_year,}}
> {{ LINEITEM.DISC_PRICE as volume,}}
> {{ n2.n_name as nation}}
> {{ from}}
> {{ tpch_cn.lineitem}}
> {{ join tpch_cn.part on p_partkey = l_partkey}}
> {{ join tpch_cn.supplier on s_suppkey = l_suppkey}}
> {{ join tpch_cn.orders on l_orderkey = o_orderkey}}
> {{ join tpch_cn.customer on o_custkey = c_custkey}}
> {{ join tpch_cn.nation n1 on c_nationkey = n1.n_nationkey}}
> {{ join tpch_cn.nation n2 on s_nationkey = n2.n_nationkey}}
> {{ join tpch_cn.region on n1.n_regionkey = r_regionkey}}
> {{ where}}
> {{ r_name = 'AMERICA'}}
> {{ and o_orderdate between '1995-01-01' and '1996-12-31'}}
> {{ and p_type = 'ECONOMY ANODIZED STEEL'}}
> {{ ) as all_nations}}
> {{group by}}
> {{ o_year}}
> {{order by}}
> {{ o_year}}
> {{LIMIT 500}}
>  # {{Physical plan :}}
> {{ not exists}}
> {{<-------------------- Dry Run Info -------------------->}}
>  
> h2. Screenshots
> h4. Step1 : enable this in project configuration
> !KYLIN-5730-01.png!
> h4. Step2 : send a query in Insight page
> !KYLIN-5730-02.png!
> h4. Step3 : Dry-run message in Insight page
> !KYLIN-5730-03.png!
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to