citusdata / citusdata/citus

Assert failure in TPC-DS query

Open
#2,583 2 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
C
Stars
12.8k
Forks
794
Avg merge
2d 14h
Merged PRs (30d)
31

Description

The query does seem to run (slowly, using re-partitioning) on production builds, but gives an assert failure in `LocalJoin`.

```
create table store_sales
(
ss_sold_date_sk integer ,
ss_sold_time_sk integer ,
ss_item_sk integer not null,
ss_customer_sk integer ,
ss_cdemo_sk integer ,
ss_hdemo_sk integer ,
ss_addr_sk integer ,
ss_store_sk integer ,
ss_promo_sk integer ,
ss_ticket_number integer not null,
ss_quantity integer ,
ss_wholesale_cost decimal(7,2) ,
ss_list_price decimal(7,2) ,
ss_sales_price decimal(7,2) ,
ss_ext_discount_amt decimal(7,2) ,
ss_ext_sales_price decimal(7,2) ,
ss_ext_wholesale_cost decimal(7,2) ,
ss_ext_list_price decimal(7,2) ,
ss_ext_tax decimal(7,2) ,
ss_coupon_amt decimal(7,2) ,
ss_net_paid decimal(7,2) ,
ss_net_paid_inc_tax decimal(7,2) ,
ss_net_profit decimal(7,2) ,
primary key (ss_item_sk, ss_ticket_number)
);

create table store
(
s_store_sk integer not null,
s_store_id char(16) not null,
s_rec_start_date date ,
s_rec_end_date date ,
s_closed_date_sk integer ,
s_store_name varchar(50) ,
s_number_employees integer ,
s_floor_space integer ,
s_hours char(20) ,
s_manager varchar(40) ,
s_market_id integer ,
s_geography_class varchar(100) ,
s_market_desc varchar(100) ,
s_market_manager varchar(40) ,
s_division_id integer ,
s_division_name varchar(50) ,
s_company_id integer ,
s_company_name varchar(50) ,
s_street_number varchar(10) ,
s_street_name varchar(60) ,
s_street_type char(15) ,
s_suite_number char(10) ,
s_city varchar(60) ,
s_county varchar(30) ,
s_state char(2) ,
s_zip char(10) ,
s_country varchar(20) ,
s_gmt_offset decimal(5,2) ,
s_tax_precentage decimal(5,2) ,
primary key (s_store_sk)
);
create table promotion
(
p_promo_sk integer not null,
p_promo_id char(16) not null,
p_start_date_sk integer ,
p_end_date_sk integer ,
p_item_sk integer ,
p_cost decimal(15,2) ,
p_response_target integer ,
p_promo_name char(50) ,
p_channel_dmail char(1) ,
p_channel_email char(1) ,
p_channel_catalog char(1) ,
p_channel_tv char(1) ,
p_channel_radio char(1) ,
p_channel_press char(1) ,
p_channel_event char(1) ,
p_channel_demo char(1) ,
p_channel_details varchar(100) ,
p_purpose char(15) ,
p_discount_active char(1) ,
primary key (p_promo_sk)
);
create table customer_address
(
ca_address_sk integer not null,
ca_address_id char(16) not null,
ca_street_number char(10) ,
ca_street_name varchar(60) ,
ca_street_type char(15) ,
ca_suite_number char(10) ,
ca_city varchar(60) ,
ca_county varchar(30) ,
ca_state char(2) ,
ca_zip char(10) ,
ca_country varchar(20) ,
ca_gmt_offset decimal(5,2) ,
ca_location_type char(20) ,
primary key (ca_address_sk)
);
create table date_dim
(
d_date_sk integer not null,
d_date_id char(16) not null,
d_date date ,
d_month_seq integer ,
d_week_seq integer ,
d_quarter_seq integer ,
d_year integer ,
d_dow integer ,
d_moy integer ,
d_dom integer ,
d_qoy integer ,
d_fy_year integer ,
d_fy_quarter_seq integer ,
d_fy_week_seq integer ,
d_day_name char(9) ,
d_quarter_name char(6) ,
d_holiday char(1) ,
d_weekend char(1) ,
d_following_holiday char(1) ,
d_first_dom integer ,
d_last_dom integer ,
d_same_day_ly integer ,
d_same_day_lq integer ,
d_current_day char(1) ,
d_current_week char(1) ,
d_current_month char(1) ,
d_current_quarter char(1) ,
d_current_year char(1) ,
primary key (d_date_sk)
);
create table customer
(
c_customer_sk integer not null,
c_customer_id char(16) not null,
c_current_cdemo_sk integer ,
c_current_hdemo_sk integer ,
c_current_addr_sk integer ,
c_first_shipto_date_sk integer ,
c_first_sales_date_sk integer ,
c_salutation char(10) ,
c_first_name char(20) ,
c_last_name char(30) ,
c_preferred_cust_flag char(1) ,
c_birth_day integer ,
c_birth_month integer ,
c_birth_year integer ,
c_birth_country varchar(20) ,
c_login char(13) ,
c_email_address char(50) ,
c_last_review_date_sk integer ,
primary key (c_customer_sk)
);
create table item
(
i_item_sk integer not null,
i_item_id char(16) not null,
i_rec_start_date date ,
i_rec_end_date date ,
i_item_desc varchar(200) ,
i_current_price decimal(7,2) ,
i_wholesale_cost decimal(7,2) ,
i_brand_id integer ,
i_brand char(50) ,
i_class_id integer ,
i_class char(50) ,
i_category_id integer ,
i_category char(50) ,
i_manufact_id integer ,
i_manufact char(50) ,
i_size char(20) ,
i_formulation char(20) ,
i_color char(20) ,
i_units char(10) ,
i_container char(10) ,
i_manager_id integer ,
i_product_name char(50) ,
primary key (i_item_sk)
);

SELECT create_distributed_table('store_sales','ss_item_sk');
SELECT create_distributed_table('customer','c_customer_sk');
SELECT create_reference_table('store');
SELECT create_reference_table('date_dim');
SELECT create_reference_table('customer_address');
SELECT create_reference_table('item');
```

Query 61:
```
select promotions,total,cast(promotions as decimal(15,4))/cast(total as decimal(15,4))*100
from
(select sum(ss_ext_sales_price) promotions
from store_sales
,store
,promotion
,date_dim
,customer
,customer_address
,item
where ss_sold_date_sk = d_date_sk
and ss_store_sk = s_store_sk
and ss_promo_sk = p_promo_sk
and ss_customer_sk= c_customer_sk
and ca_address_sk = c_current_addr_sk
and ss_item_sk = i_item_sk
and ca_gmt_offset = -7
and i_category = 'Sports'
and (p_channel_dmail = 'Y' or p_channel_email = 'Y' or p_channel_tv = 'Y')
and s_gmt_offset = -7
and d_year = 2000
and d_moy = 11) promotional_sales,
(select sum(ss_ext_sales_price) total
from store_sales
,store
,date_dim
,customer
,customer_address
,item
where ss_sold_date_sk = d_date_sk
and ss_store_sk = s_store_sk
and ss_customer_sk= c_customer_sk
and ca_address_sk = c_current_addr_sk
and ss_item_sk = i_item_sk
and ca_gmt_offset = -7
and i_category = 'Sports'
and s_gmt_offset = -7
and d_year = 2000
and d_moy = 11) all_sales
order by promotions, total
limit 100;
```

stack trace:
```
0x00007fe969b74277 in raise () from /lib64/libc.so.6
(gdb) bt
#0 0x00007fe969b74277 in raise () from /lib64/libc.so.6
#1 0x00007fe969b75968 in abort () from /lib64/libc.so.6
#2 0x00000000008a0852 in ExceptionalCondition (conditionName=conditionName@entry=0x7fe961b85b90 "!(currentAnchorTable != ((void *)0))",
errorType=errorType@entry=0x7fe961b7aa1f "FailedAssertion", fileName=fileName@entry=0x7fe961b85a43 "planner/multi_join_order.c", lineNumber=lineNumber@entry=836)
at assert.c:54
#3 0x00007fe961b350e4 in LocalJoin (currentJoinNode=0x7fe954af8798, candidateTable=0x7fe954ae3588, applicableJoinClauses=0x7fe954afc5b0, joinType=)
at planner/multi_join_order.c:836
#4 0x00007fe961b34c93 in EvaluateJoinRules (joinedTableList=joinedTableList@entry=0x7fe954af3b38, currentJoinNode=currentJoinNode@entry=0x7fe954af8798,
candidateTable=0x7fe954ae3588, joinClauseList=joinClauseList@entry=0x7fe954ae2f38, joinType=joinType@entry=JOIN_INNER) at planner/multi_join_order.c:646
#5 0x00007fe961b34e05 in JoinOrderForTable (firstTable=, tableEntryList=tableEntryList@entry=0x7fe954ae3478, joinClauseList=joinClauseList@entry=0x7fe954ae2f38)
at planner/multi_join_order.c:336
#6 0x00007fe961b34ebe in JoinOrderList (tableEntryList=tableEntryList@entry=0x7fe954ae3478, joinClauseList=joinClauseList@entry=0x7fe954ae2f38) at planner/multi_join_order.c:260
#7 0x00007fe961b3b619 in MultiNodeTree (queryTree=queryTree@entry=0x24f0f30) at planner/multi_logical_planner.c:733
#8 0x00007fe961b3b6e7 in MultiLogicalPlanCreate (originalQuery=originalQuery@entry=0x7fe95494f5c8, queryTree=queryTree@entry=0x24f0f30,
plannerRestrictionContext=plannerRestrictionContext@entry=0x7fe954991d78) at planner/multi_logical_planner.c:138
#9 0x00007fe961b30bbd in CreateDistributedPlan (planId=planId@entry=2, originalQuery=originalQuery@entry=0x7fe95494f5c8, query=query@entry=0x24f0f30,
boundParams=boundParams@entry=0x0, hasUnresolvedParams=hasUnresolvedParams@entry=false, plannerRestrictionContext=plannerRestrictionContext@entry=0x7fe954991d78)
at planner/distributed_planner.c:757
#10 0x00007fe961b31066 in CreateDistributedPlannedStmt (planId=2, localPlan=localPlan@entry=0x7fe954abca98, originalQuery=originalQuery@entry=0x7fe95494f5c8,
query=query@entry=0x24f0f30, boundParams=boundParams@entry=0x0, plannerRestrictionContext=plannerRestrictionContext@entry=0x7fe954991d78) at planner/distributed_planner.c:498
#11 0x00007fe961b31329 in distributed_planner (parse=0x24f0f30, cursorOptions=0, boundParams=0x0) at planner/distributed_planner.c:158
#12 0x00000000006df5d6 in planner (parse=parse@entry=0x24f0f30, cursorOptions=cursorOptions@entry=0, boundParams=boundParams@entry=0x0) at planner.c:260
#13 0x00007fe961b472a6 in CreateDistributedSubPlan (subPlanId=subPlanId@entry=1, subPlanQuery=subPlanQuery@entry=0x24f0f30) at planner/recursive_planning.c:1176
#14 0x00007fe961b47942 in RecursivelyPlanSubquery (subquery=subquery@entry=0x24f0f30, planningContext=planningContext@entry=0x7ffce02d7120) at planner/recursive_planning.c:1123
#15 0x00007fe961b48223 in RecursivelyPlanSubqueryWalker (node=0x24f0f30, context=0x7ffce02d7120) at planner/recursive_planning.c:836
#16 0x00000000006859ca in range_table_walker (rtable=, walker=walker@entry=0x7fe961b481cb , context=context@entry=0x7ffce02d7120,
flags=flags@entry=0) at nodeFuncs.c:2328
#17 0x0000000000685be2 in query_tree_walker (query=query@entry=0x24efe70, walker=walker@entry=0x7fe961b481cb ,
context=context@entry=0x7ffce02d7120, flags=flags@entry=0) at nodeFuncs.c:2288
#18 0x00007fe961b4806d in RecursivelyPlanSubqueriesAndCTEs (query=query@entry=0x24efe70, context=context@entry=0x7ffce02d7120) at planner/recursive_planning.c:267
#19 0x00007fe961b48120 in GenerateSubplansForSubqueriesAndCTEs (planId=planId@entry=1, originalQuery=originalQuery@entry=0x24efe70,
plannerRestrictionContext=plannerRestrictionContext@entry=0x7fe96b38cf60) at planner/recursive_planning.c:205
#20 0x00007fe961b30a68 in CreateDistributedPlan (planId=planId@entry=1, originalQuery=originalQuery@entry=0x24efe70, query=query@entry=0x24d4018,
boundParams=boundParams@entry=0x0, hasUnresolvedParams=hasUnresolvedParams@entry=false, plannerRestrictionContext=plannerRestrictionContext@entry=0x7fe96b38cf60)
at planner/distributed_planner.c:685
#21 0x00007fe961b31066 in CreateDistributedPlannedStmt (planId=1, localPlan=localPlan@entry=0x7fe95494fe98, originalQuery=originalQuery@entry=0x24efe70,
query=query@entry=0x24d4018, boundParams=boundParams@entry=0x0, plannerRestrictionContext=plannerRestrictionContext@entry=0x7fe96b38cf60) at planner/distributed_planner.c:498
#22 0x00007fe961b31329 in distributed_planner (parse=0x24d4018, cursorOptions=256, boundParams=0x0) at planner/distributed_planner.c:158
#23 0x00000000006df5d6 in planner (parse=parse@entry=0x24d4018, cursorOptions=cursorOptions@entry=256, boundParams=boundParams@entry=0x0) at planner.c:260
#24 0x000000000079328a in pg_plan_query (querytree=querytree@entry=0x24d4018, cursorOptions=cursorOptions@entry=256, boundParams=boundParams@entry=0x0) at postgres.c:832
#25 0x000000000079338f in pg_plan_queries (querytrees=, cursorOptions=cursorOptions@entry=256, boundParams=boundParams@entry=0x0) at postgres.c:898
#26 0x000000000079366b in exec_simple_query (
query_string=query_string@entry=0x23a2828 "select promotions,total,cast(promotions as decimal(15,4))/cast(total as decimal(15,4))*100\nfrom\n (select sum(ss_ext_sales_price) promotions\n from store_sales\n ,store\n ,promotion\n "...) at postgres.c:1073
#27 0x0000000000795421 in PostgresMain (argc=, argv=argv@entry=0x2416d90, dbname=0x2416c28 "postgres", username=) at postgres.c:4182
#28 0x0000000000717164 in BackendRun (port=port@entry=0x240d340) at postmaster.c:4361
#29 0x0000000000719da3 in BackendStartup (port=port@entry=0x240d340) at postmaster.c:4033
#30 0x000000000071a04c in ServerLoop () at postmaster.c:1706
#31 0x000000000071b2e6 in PostmasterMain (argc=argc@entry=3, argv=argv@entry=0x239cb50) at postmaster.c:1379
#32 0x000000000068397f in main (argc=3, argv=0x239cb50) at main.c:228
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.