ydb-platform / ydb

YDB is an open source Distributed SQL Database that combines high availability and scalability with strong consistency and ACID transactions
https://ydb.tech
Apache License 2.0
3.87k stars 536 forks source link

CROSS joins do not optimize into INNER joins #5404

Open qrort opened 3 months ago

qrort commented 3 months ago

https://github.com/ydb-platform/ydb/issues/2099 https://github.com/ydb-platform/ydb/issues/3046 https://github.com/ydb-platform/ydb/issues/4975 https://github.com/ydb-platform/ydb/issues/5401

These issues are essentially about the same problem in YQL optimizer. Cross joins are rewritten into Inner joins by an algotithm that depends on order of AND clauses in join keys statement.

Modifying the algorithm in such a way that it won't depend on join order in cases like

select * from a cross join b cross join c cross join d cross join e where a.key = b.key and c.key = e.key and d.key = b.key an b.key = c.key

will resolve all the issues mentioned above.

qrort commented 3 months ago

@vitstn

qrort commented 3 months ago

@pavelvelikhov

ulya-sidorina commented 3 months ago

request with cross join after rewriting:

select * 
from bindings.store_sales as store_sales
cross join bindings.date_dim as d1
cross join bindings.store_returns as store_returns
cross join bindings.date_dim as d2
cross join bindings.catalog_sales as catalog_sales
cross join bindings.date_dim as d3
cross join bindings.store as store
where d1.d_date_sk = ss_sold_date_sk
  and sr_returned_date_sk = d2.d_date_sk
  and cs_sold_date_sk = d3.d_date_sk
  and s_store_sk = ss_store_sk
  and ss_customer_sk = sr_customer_sk
  and sr_item_sk = cs_item_sk;

AST:

(
(let $1 (DataSource '"config"))
(let $2 (Configure! world $1 '"DqEngine" '"force"))
(let $3 (Configure! $2 $1 '"OrderedColumns"))
(let $4 (DataSource '"dq" '"$all"))
(let $5 (Configure! $3 $4 '"Attr" '"enabledqreplicate" '1))
(let $6 (Configure! $5 $4 '"Attr" '"maxtasksperstage" '"200"))
(let $7 (Configure! $6 $4 '"Attr" '"maxtasksperoperation" '"1700"))
(let $8 (Configure! $7 $4 '"Attr" '"hashjoinmode" '"grace"))
(let $9 (Configure! $8 $4 '"Attr" '"hashshuffletasksratio" '"1.0"))
(let $10 (Configure! $9 $4 '"Attr" '"hashshufflemaxtasks" '"200"))
(let $11 (Configure! $10 $4 '"Attr" '"computeactortype" '"sync"))
(let $12 (Configure! $11 $4 '"Attr" '"optllvm" '"off"))
(let $13 (DataSink 'result))
(let $14 (DataSource '"s3" '"yq-tpc-local"))
(let $15 '"Paths {\n  Name: \"ds\"\n  Children {\n    Name: \"1\"\n    Children {\n      Name: \"store\"\n      Children {\n        Name: \"part-001.parquet\"\n        Size: 12664\n        Read: true\n      }\n      IsDirectory: true\n    }\n    IsDirectory: true\n  }\n  IsDirectory: true\n}\n")
(let $16 (Bool '"true"))
(let $17 (SecureParam '"cluster:default_yq-tpc-local"))
(let $18 (OptionalType (DataType 'String)))
(let $19 (OptionalType (DataType 'Int32)))
(let $20 '"s_geography_class")
(let $21 (OptionalType (DataType 'Double)))
(let $22 '"s_number_employees")
(let $23 (OptionalType (DataType 'Date)))
(let $24 (StructType '('"s_city" $18) '('"s_closed_date_sk" $19) '('"s_company_id" $19) '('"s_company_name" $18) '('"s_country" $18) '('"s_county" $18) '('"s_division_id" $19) '('"s_division_name" $18) '('"s_floor_space" $19) '($20 $18) '('"s_gmt_offset" $21) '('"s_hours" $18) '('"s_manager" $18) '('"s_market_desc" $18) '('"s_market_id" $19) '('"s_market_manager" $18) '($22 $19) '('"s_rec_end_date" $23) '('"s_rec_start_date" $23) '('"s_state" $18) '('"s_store_id" $18) '('"s_store_name" $18) '('"s_store_sk" $19) '('"s_street_name" $18) '('"s_street_number" $18) '('"s_street_type" $18) '('"s_suite_number" $18) '('"s_tax_precentage" $21) '('"s_zip" $18)))
(let $25 (S3ParseSettings '('((String $15) $16 (AsStruct))) $17 '"" '"parquet" $24 '('('"constraints" '"{\n    \"primary_key\" = [\n        \"s_store_sk\"\n    ]\n}"))))
(let $26 '('('format '"parquet")))
(let $27 '('"s_store_sk"))
(let $28 '('_yql_dq_key_left_0))
(let $29 (DqStage '((DqSource $14 $25)) (lambda '($213) (FilterNullMembers (FlatMap (SkipNullMembers (NarrowMap (WideFromBlocks (DqSourceWideBlockWrap $213 $14 $24 $26)) (lambda '($214 $215 $216 $217 $218 $219 $220 $221 $222 $223 $224 $225 $226 $227 $228 $229 $230 $231 $232 $233 $234 $235 $236 $237 $238 $239 $240 $241 $242) (AsStruct '('"s_city" $214) '('"s_closed_date_sk" $215) '('"s_company_id" $216) '('"s_company_name" $217) '('"s_country" $218) '('"s_county" $219) '('"s_division_id" $220) '('"s_division_name" $221) '('"s_floor_space" $222) '($20 $223) '('"s_gmt_offset" $224) '('"s_hours" $225) '('"s_manager" $226) '('"s_market_desc" $227) '('"s_market_id" $228) '('"s_market_manager" $229) '($22 $230) '('"s_rec_end_date" $231) '('"s_rec_start_date" $232) '('"s_state" $233) '('"s_store_id" $234) '('"s_store_name" $235) '('"s_store_sk" $236) '('"s_street_name" $237) '('"s_street_number" $238) '('"s_street_type" $239) '('"s_suite_number" $240) '('"s_tax_precentage" $241) '('"s_zip" $242)))) $27) (lambda '($243) (block '(
  (let $244 (Member $243 '"s_store_sk"))
  (return (Just (AsStruct '('_yql_dq_key_left_0 $244) '('"s_city" (Member $243 '"s_city")) '('"s_closed_date_sk" (Member $243 '"s_closed_date_sk")) '('"s_company_id" (Member $243 '"s_company_id")) '('"s_company_name" (Member $243 '"s_company_name")) '('"s_country" (Member $243 '"s_country")) '('"s_county" (Member $243 '"s_county")) '('"s_division_id" (Member $243 '"s_division_id")) '('"s_division_name" (Member $243 '"s_division_name")) '('"s_floor_space" (Member $243 '"s_floor_space")) '($20 (Member $243 $20)) '('"s_gmt_offset" (Member $243 '"s_gmt_offset")) '('"s_hours" (Member $243 '"s_hours")) '('"s_manager" (Member $243 '"s_manager")) '('"s_market_desc" (Member $243 '"s_market_desc")) '('"s_market_id" (Member $243 '"s_market_id")) '('"s_market_manager" (Member $243 '"s_market_manager")) '($22 (Member $243 $22)) '('"s_rec_end_date" (Member $243 '"s_rec_end_date")) '('"s_rec_start_date" (Member $243 '"s_rec_start_date")) '('"s_state" (Member $243 '"s_state")) '('"s_store_id" (Member $243 '"s_store_id")) '('"s_store_name" (Member $243 '"s_store_name")) '('"s_store_sk" $244) '('"s_street_name" (Member $243 '"s_street_name")) '('"s_street_number" (Member $243 '"s_street_number")) '('"s_street_type" (Member $243 '"s_street_type")) '('"s_suite_number" (Member $243 '"s_suite_number")) '('"s_tax_precentage" (Member $243 '"s_tax_precentage")) '('"s_zip" (Member $243 '"s_zip")))))
)))) $28)) '('('"_logical_id" '208795))))
(let $30 '"Paths {\n  Name: \"ds\"\n  Children {\n    Name: \"1\"\n    Children {\n      Name: \"date_dim\"\n      Children {\n        Name: \"part-001.parquet\"\n        Size: 24601\n        Read: true\n      }\n      IsDirectory: true\n    }\n    IsDirectory: true\n  }\n  IsDirectory: true\n}\n")
(let $31 '"d_current_quarter")
(let $32 '"d_following_holiday")
(let $33 (StructType '('"d_current_day" $18) '('"d_current_month" $18) '($31 $18) '('"d_current_week" $18) '('"d_current_year" $18) '('"d_date" $23) '('"d_date_id" $18) '('"d_date_sk" $19) '('"d_day_name" $18) '('"d_dom" $19) '('"d_dow" $19) '('"d_first_dom" $19) '($32 $18) '('"d_fy_quarter_seq" $19) '('"d_fy_week_seq" $19) '('"d_fy_year" $19) '('"d_holiday" $18) '('"d_last_dom" $19) '('"d_month_seq" $19) '('"d_moy" $19) '('"d_qoy" $19) '('"d_quarter_name" $18) '('"d_quarter_seq" $19) '('"d_same_day_lq" $19) '('"d_same_day_ly" $19) '('"d_week_seq" $19) '('"d_weekend" $18) '('"d_year" $19)))
(let $34 (S3ParseSettings '('((String $30) $16 (AsStruct))) $17 '"" '"parquet" $33 '('('"constraints" '"{\n    \"primary_key\" = [\n        \"d_date_sk\"\n    ]\n}"))))
(let $35 '('"d_date_sk"))
(let $36 '('_yql_dq_key_right_0))
(let $37 (DqStage '((DqSource $14 $34)) (lambda '($245) (block '(
  (let $246 (lambda '($275) (FilterNullMembers (FlatMap (SkipNullMembers $275 $35) (lambda '($276) (block '(
    (let $277 (Member $276 '"d_date_sk"))
    (return (Just (AsStruct '('_yql_dq_key_right_0 $277) '('"d_current_day" (Member $276 '"d_current_day")) '('"d_current_month" (Member $276 '"d_current_month")) '($31 (Member $276 $31)) '('"d_current_week" (Member $276 '"d_current_week")) '('"d_current_year" (Member $276 '"d_current_year")) '('"d_date" (Member $276 '"d_date")) '('"d_date_id" (Member $276 '"d_date_id")) '('"d_date_sk" $277) '('"d_day_name" (Member $276 '"d_day_name")) '('"d_dom" (Member $276 '"d_dom")) '('"d_dow" (Member $276 '"d_dow")) '('"d_first_dom" (Member $276 '"d_first_dom")) '($32 (Member $276 $32)) '('"d_fy_quarter_seq" (Member $276 '"d_fy_quarter_seq")) '('"d_fy_week_seq" (Member $276 '"d_fy_week_seq")) '('"d_fy_year" (Member $276 '"d_fy_year")) '('"d_holiday" (Member $276 '"d_holiday")) '('"d_last_dom" (Member $276 '"d_last_dom")) '('"d_month_seq" (Member $276 '"d_month_seq")) '('"d_moy" (Member $276 '"d_moy")) '('"d_qoy" (Member $276 '"d_qoy")) '('"d_quarter_name" (Member $276 '"d_quarter_name")) '('"d_quarter_seq" (Member $276 '"d_quarter_seq")) '('"d_same_day_lq" (Member $276 '"d_same_day_lq")) '('"d_same_day_ly" (Member $276 '"d_same_day_ly")) '('"d_week_seq" (Member $276 '"d_week_seq")) '('"d_weekend" (Member $276 '"d_weekend")) '('"d_year" (Member $276 '"d_year")))))
  )))) $36)))
  (return (DqReplicate (NarrowMap (WideFromBlocks (DqSourceWideBlockWrap $245 $14 $33 $26)) (lambda '($247 $248 $249 $250 $251 $252 $253 $254 $255 $256 $257 $258 $259 $260 $261 $262 $263 $264 $265 $266 $267 $268 $269 $270 $271 $272 $273 $274) (AsStruct '('"d_current_day" $247) '('"d_current_month" $248) '($31 $249) '('"d_current_week" $250) '('"d_current_year" $251) '('"d_date" $252) '('"d_date_id" $253) '('"d_date_sk" $254) '('"d_day_name" $255) '('"d_dom" $256) '('"d_dow" $257) '('"d_first_dom" $258) '($32 $259) '('"d_fy_quarter_seq" $260) '('"d_fy_week_seq" $261) '('"d_fy_year" $262) '('"d_holiday" $263) '('"d_last_dom" $264) '('"d_month_seq" $265) '('"d_moy" $266) '('"d_qoy" $267) '('"d_quarter_name" $268) '('"d_quarter_seq" $269) '('"d_same_day_lq" $270) '('"d_same_day_ly" $271) '('"d_week_seq" $272) '('"d_weekend" $273) '('"d_year" $274)))) $246 (lambda '($278) (FilterNullMembers (FlatMap (SkipNullMembers $278 $35) (lambda '($279) (block '(
    (let $280 (Member $279 '"d_date_sk"))
    (return (Just (AsStruct '('_yql_dq_key_left_0 $280) '('"d_current_day" (Member $279 '"d_current_day")) '('"d_current_month" (Member $279 '"d_current_month")) '($31 (Member $279 $31)) '('"d_current_week" (Member $279 '"d_current_week")) '('"d_current_year" (Member $279 '"d_current_year")) '('"d_date" (Member $279 '"d_date")) '('"d_date_id" (Member $279 '"d_date_id")) '('"d_date_sk" $280) '('"d_day_name" (Member $279 '"d_day_name")) '('"d_dom" (Member $279 '"d_dom")) '('"d_dow" (Member $279 '"d_dow")) '('"d_first_dom" (Member $279 '"d_first_dom")) '($32 (Member $279 $32)) '('"d_fy_quarter_seq" (Member $279 '"d_fy_quarter_seq")) '('"d_fy_week_seq" (Member $279 '"d_fy_week_seq")) '('"d_fy_year" (Member $279 '"d_fy_year")) '('"d_holiday" (Member $279 '"d_holiday")) '('"d_last_dom" (Member $279 '"d_last_dom")) '('"d_month_seq" (Member $279 '"d_month_seq")) '('"d_moy" (Member $279 '"d_moy")) '('"d_qoy" (Member $279 '"d_qoy")) '('"d_quarter_name" (Member $279 '"d_quarter_name")) '('"d_quarter_seq" (Member $279 '"d_quarter_seq")) '('"d_same_day_lq" (Member $279 '"d_same_day_lq")) '('"d_same_day_ly" (Member $279 '"d_same_day_ly")) '('"d_week_seq" (Member $279 '"d_week_seq")) '('"d_weekend" (Member $279 '"d_weekend")) '('"d_year" (Member $279 '"d_year")))))
  )))) $28)) $246))
))) '('('"_logical_id" '213927))))
(let $38 '"Paths {\n  Name: \"ds\"\n  Children {\n    Name: \"1\"\n    Children {\n      Name: \"store_sales\"\n      Children {\n        Name: \"part-001.parquet\"\n        Size: 2746830\n        Read: true\n      }\n      IsDirectory: true\n    }\n    IsDirectory: true\n  }\n  IsDirectory: true\n}\n")
(let $39 '"ss_ext_discount_amt")
(let $40 '"ss_ext_list_price")
(let $41 '"ss_ext_sales_price")
(let $42 '"ss_ext_wholesale_cost")
(let $43 '"ss_net_paid_inc_tax")
(let $44 '"ss_wholesale_cost")
(let $45 (StructType '('"ss_addr_sk" $19) '('"ss_cdemo_sk" $19) '('"ss_coupon_amt" $21) '('"ss_customer_sk" $19) '($39 $21) '($40 $21) '($41 $21) '('"ss_ext_tax" $21) '($42 $21) '('"ss_hdemo_sk" $19) '('"ss_item_sk" $19) '('"ss_list_price" $21) '('"ss_net_paid" $21) '($43 $21) '('"ss_net_profit" $21) '('"ss_promo_sk" $19) '('"ss_quantity" $19) '('"ss_sales_price" $21) '('"ss_sold_date_sk" $19) '('"ss_sold_time_sk" $19) '('"ss_store_sk" $19) '('"ss_ticket_number" $19) '($44 $21)))
(let $46 '"{\n    \"primary_key\" = [\n        \"ss_item_sk\";\n        \"ss_ticket_number\"\n    ]\n}")
(let $47 (S3ParseSettings '('((String $38) $16 (AsStruct))) $17 '"" '"parquet" $45 '('('"constraints" $46))))
(let $48 '('"ss_sold_date_sk"))
(let $49 (DqStage '((DqSource $14 $47)) (lambda '($281) (FilterNullMembers (FlatMap (SkipNullMembers (NarrowMap (WideFromBlocks (DqSourceWideBlockWrap $281 $14 $45 $26)) (lambda '($282 $283 $284 $285 $286 $287 $288 $289 $290 $291 $292 $293 $294 $295 $296 $297 $298 $299 $300 $301 $302 $303 $304) (AsStruct '('"ss_addr_sk" $282) '('"ss_cdemo_sk" $283) '('"ss_coupon_amt" $284) '('"ss_customer_sk" $285) '($39 $286) '($40 $287) '($41 $288) '('"ss_ext_tax" $289) '($42 $290) '('"ss_hdemo_sk" $291) '('"ss_item_sk" $292) '('"ss_list_price" $293) '('"ss_net_paid" $294) '($43 $295) '('"ss_net_profit" $296) '('"ss_promo_sk" $297) '('"ss_quantity" $298) '('"ss_sales_price" $299) '('"ss_sold_date_sk" $300) '('"ss_sold_time_sk" $301) '('"ss_store_sk" $302) '('"ss_ticket_number" $303) '($44 $304)))) $48) (lambda '($305) (block '(
  (let $306 (Member $305 '"ss_sold_date_sk"))
  (return (Just (AsStruct '('_yql_dq_key_right_0 $306) '('"ss_addr_sk" (Member $305 '"ss_addr_sk")) '('"ss_cdemo_sk" (Member $305 '"ss_cdemo_sk")) '('"ss_coupon_amt" (Member $305 '"ss_coupon_amt")) '('"ss_customer_sk" (Member $305 '"ss_customer_sk")) '($39 (Member $305 $39)) '($40 (Member $305 $40)) '($41 (Member $305 $41)) '('"ss_ext_tax" (Member $305 '"ss_ext_tax")) '($42 (Member $305 $42)) '('"ss_hdemo_sk" (Member $305 '"ss_hdemo_sk")) '('"ss_item_sk" (Member $305 '"ss_item_sk")) '('"ss_list_price" (Member $305 '"ss_list_price")) '('"ss_net_paid" (Member $305 '"ss_net_paid")) '($43 (Member $305 $43)) '('"ss_net_profit" (Member $305 '"ss_net_profit")) '('"ss_promo_sk" (Member $305 '"ss_promo_sk")) '('"ss_quantity" (Member $305 '"ss_quantity")) '('"ss_sales_price" (Member $305 '"ss_sales_price")) '('"ss_sold_date_sk" $306) '('"ss_sold_time_sk" (Member $305 '"ss_sold_time_sk")) '('"ss_store_sk" (Member $305 '"ss_store_sk")) '('"ss_ticket_number" (Member $305 '"ss_ticket_number")) '($44 (Member $305 $44)))))
)))) $36)) '('('"_logical_id" '206642))))
(let $50 '('0))
(let $51 '"d1.d_current_month")
(let $52 '"d1.d_current_quarter")
(let $53 '"d1.d_current_week")
(let $54 '"d1.d_current_year")
(let $55 '"d1.d_following_holiday")
(let $56 '"d1.d_fy_quarter_seq")
(let $57 '"d1.d_quarter_name")
(let $58 '"store_sales.ss_addr_sk")
(let $59 '"store_sales.ss_cdemo_sk")
(let $60 '"store_sales.ss_coupon_amt")
(let $61 '"store_sales.ss_customer_sk")
(let $62 '"store_sales.ss_ext_discount_amt")
(let $63 '"store_sales.ss_ext_list_price")
(let $64 '"store_sales.ss_ext_sales_price")
(let $65 '"store_sales.ss_ext_tax")
(let $66 '"store_sales.ss_ext_wholesale_cost")
(let $67 '"store_sales.ss_hdemo_sk")
(let $68 '"store_sales.ss_item_sk")
(let $69 '"store_sales.ss_list_price")
(let $70 '"store_sales.ss_net_paid")
(let $71 '"store_sales.ss_net_paid_inc_tax")
(let $72 '"store_sales.ss_net_profit")
(let $73 '"store_sales.ss_promo_sk")
(let $74 '"store_sales.ss_quantity")
(let $75 '"store_sales.ss_sales_price")
(let $76 '"store_sales.ss_sold_date_sk")
(let $77 '"store_sales.ss_sold_time_sk")
(let $78 '"store_sales.ss_store_sk")
(let $79 '"store_sales.ss_ticket_number")
(let $80 '"store_sales.ss_wholesale_cost")
(let $81 (DqStage '((DqCnHashShuffle (TDqOutput $37 '1) $28) (DqCnHashShuffle (TDqOutput $49 '0) $36)) (lambda '($307 $308) (block '(
  (let $309 (lambda '($314) (Member $314 '_yql_dq_key_left_0) (Member $314 '"d_current_day") (Member $314 '"d_current_month") (Member $314 $31) (Member $314 '"d_current_week") (Member $314 '"d_current_year") (Member $314 '"d_date") (Member $314 '"d_date_id") (Member $314 '"d_date_sk") (Member $314 '"d_day_name") (Member $314 '"d_dom") (Member $314 '"d_dow") (Member $314 '"d_first_dom") (Member $314 $32) (Member $314 '"d_fy_quarter_seq") (Member $314 '"d_fy_week_seq") (Member $314 '"d_fy_year") (Member $314 '"d_holiday") (Member $314 '"d_last_dom") (Member $314 '"d_month_seq") (Member $314 '"d_moy") (Member $314 '"d_qoy") (Member $314 '"d_quarter_name") (Member $314 '"d_quarter_seq") (Member $314 '"d_same_day_lq") (Member $314 '"d_same_day_ly") (Member $314 '"d_week_seq") (Member $314 '"d_weekend") (Member $314 '"d_year")))
  (let $310 (lambda '($315) (Member $315 '_yql_dq_key_right_0) (Member $315 '"ss_addr_sk") (Member $315 '"ss_cdemo_sk") (Member $315 '"ss_coupon_amt") (Member $315 '"ss_customer_sk") (Member $315 $39) (Member $315 $40) (Member $315 $41) (Member $315 '"ss_ext_tax") (Member $315 $42) (Member $315 '"ss_hdemo_sk") (Member $315 '"ss_item_sk") (Member $315 '"ss_list_price") (Member $315 '"ss_net_paid") (Member $315 $43) (Member $315 '"ss_net_profit") (Member $315 '"ss_promo_sk") (Member $315 '"ss_quantity") (Member $315 '"ss_sales_price") (Member $315 '"ss_sold_date_sk") (Member $315 '"ss_sold_time_sk") (Member $315 '"ss_store_sk") (Member $315 '"ss_ticket_number") (Member $315 $44)))
  (let $311 '('0 '0 '1 '1 '2 '2 '3 '3 '4 '4 '5 '5 '6 '6 '7 '7 '8 '8 '9 '9 '10 '10 '11 '11 '12 '12 '13 '13 '14 '14 '15 '15 '16 '16 '17 '17 '18 '18 '19 '19 '20 '20 '21 '21 '22 '22 '23 '23 '24 '24 '25 '25 '26 '26 '27 '27 '28 '28))
  (let $312 '('0 '29 '1 '30 '2 '31 '3 '32 '4 '33 '5 '34 '6 '35 '7 '36 '8 '37 '9 '38 '10 '39 '11 '40 '12 '41 '13 '42 '14 '43 '15 '44 '16 '45 '17 '46 '18 '47 '19 '48 '20 '49 '21 '50 '22 '51 '23 '52))
  (let $313 (GraceJoinCore (ExpandMap $307 $309) (ExpandMap $308 $310) '"Inner" $50 $50 $311 $312 $35 $48 '()))
  (return (FilterNullMembers (FlatMap (SkipNullMembers (NarrowMap $313 (lambda '($316 $317 $318 $319 $320 $321 $322 $323 $324 $325 $326 $327 $328 $329 $330 $331 $332 $333 $334 $335 $336 $337 $338 $339 $340 $341 $342 $343 $344 $345 $346 $347 $348 $349 $350 $351 $352 $353 $354 $355 $356 $357 $358 $359 $360 $361 $362 $363 $364 $365 $366 $367 $368) (AsStruct '('"d1.d_current_day" $317) '($51 $318) '($52 $319) '($53 $320) '($54 $321) '('"d1.d_date" $322) '('"d1.d_date_id" $323) '('"d1.d_date_sk" $324) '('"d1.d_day_name" $325) '('"d1.d_dom" $326) '('"d1.d_dow" $327) '('"d1.d_first_dom" $328) '($55 $329) '($56 $330) '('"d1.d_fy_week_seq" $331) '('"d1.d_fy_year" $332) '('"d1.d_holiday" $333) '('"d1.d_last_dom" $334) '('"d1.d_month_seq" $335) '('"d1.d_moy" $336) '('"d1.d_qoy" $337) '($57 $338) '('"d1.d_quarter_seq" $339) '('"d1.d_same_day_lq" $340) '('"d1.d_same_day_ly" $341) '('"d1.d_week_seq" $342) '('"d1.d_weekend" $343) '('"d1.d_year" $344) '($58 $346) '($59 $347) '($60 $348) '($61 $349) '($62 $350) '($63 $351) '($64 $352) '($65 $353) '($66 $354) '($67 $355) '($68 $356) '($69 $357) '($70 $358) '($71 $359) '($72 $360) '($73 $361) '($74 $362) '($75 $363) '($76 $364) '($77 $365) '($78 $366) '($79 $367) '($80 $368)))) '($78)) (lambda '($369) (block '(
    (let $370 (Member $369 $78))
    (return (Just (AsStruct '('_yql_dq_key_right_0 $370) '('"d1.d_current_day" (Member $369 '"d1.d_current_day")) '($51 (Member $369 $51)) '($52 (Member $369 $52)) '($53 (Member $369 $53)) '($54 (Member $369 $54)) '('"d1.d_date" (Member $369 '"d1.d_date")) '('"d1.d_date_id" (Member $369 '"d1.d_date_id")) '('"d1.d_date_sk" (Member $369 '"d1.d_date_sk")) '('"d1.d_day_name" (Member $369 '"d1.d_day_name")) '('"d1.d_dom" (Member $369 '"d1.d_dom")) '('"d1.d_dow" (Member $369 '"d1.d_dow")) '('"d1.d_first_dom" (Member $369 '"d1.d_first_dom")) '($55 (Member $369 $55)) '($56 (Member $369 $56)) '('"d1.d_fy_week_seq" (Member $369 '"d1.d_fy_week_seq")) '('"d1.d_fy_year" (Member $369 '"d1.d_fy_year")) '('"d1.d_holiday" (Member $369 '"d1.d_holiday")) '('"d1.d_last_dom" (Member $369 '"d1.d_last_dom")) '('"d1.d_month_seq" (Member $369 '"d1.d_month_seq")) '('"d1.d_moy" (Member $369 '"d1.d_moy")) '('"d1.d_qoy" (Member $369 '"d1.d_qoy")) '($57 (Member $369 $57)) '('"d1.d_quarter_seq" (Member $369 '"d1.d_quarter_seq")) '('"d1.d_same_day_lq" (Member $369 '"d1.d_same_day_lq")) '('"d1.d_same_day_ly" (Member $369 '"d1.d_same_day_ly")) '('"d1.d_week_seq" (Member $369 '"d1.d_week_seq")) '('"d1.d_weekend" (Member $369 '"d1.d_weekend")) '('"d1.d_year" (Member $369 '"d1.d_year")) '($58 (Member $369 $58)) '($59 (Member $369 $59)) '($60 (Member $369 $60)) '($61 (Member $369 $61)) '($62 (Member $369 $62)) '($63 (Member $369 $63)) '($64 (Member $369 $64)) '($65 (Member $369 $65)) '($66 (Member $369 $66)) '($67 (Member $369 $67)) '($68 (Member $369 $68)) '($69 (Member $369 $69)) '($70 (Member $369 $70)) '($71 (Member $369 $71)) '($72 (Member $369 $72)) '($73 (Member $369 $73)) '($74 (Member $369 $74)) '($75 (Member $369 $75)) '($76 (Member $369 $76)) '($77 (Member $369 $77)) '($78 $370) '($79 (Member $369 $79)) '($80 (Member $369 $80)))))
  )))) $36))
))) '('('"_logical_id" '208771))))
(let $82 '"store.s_closed_date_sk")
(let $83 '"store.s_company_id")
(let $84 '"store.s_company_name")
(let $85 '"store.s_division_id")
(let $86 '"store.s_division_name")
(let $87 '"store.s_floor_space")
(let $88 '"store.s_geography_class")
(let $89 '"store.s_gmt_offset")
(let $90 '"store.s_market_desc")
(let $91 '"store.s_market_id")
(let $92 '"store.s_market_manager")
(let $93 '"store.s_number_employees")
(let $94 '"store.s_rec_end_date")
(let $95 '"store.s_rec_start_date")
(let $96 '"store.s_store_name")
(let $97 '"store.s_street_name")
(let $98 '"store.s_street_number")
(let $99 '"store.s_street_type")
(let $100 '"store.s_suite_number")
(let $101 '"store.s_tax_precentage")
(let $102 (DqStage '((DqCnHashShuffle (TDqOutput $29 '0) $28) (DqCnHashShuffle (TDqOutput $81 '0) $36)) (lambda '($371 $372) (block '(
  (let $373 (lambda '($378) (Member $378 '_yql_dq_key_left_0) (Member $378 '"s_city") (Member $378 '"s_closed_date_sk") (Member $378 '"s_company_id") (Member $378 '"s_company_name") (Member $378 '"s_country") (Member $378 '"s_county") (Member $378 '"s_division_id") (Member $378 '"s_division_name") (Member $378 '"s_floor_space") (Member $378 $20) (Member $378 '"s_gmt_offset") (Member $378 '"s_hours") (Member $378 '"s_manager") (Member $378 '"s_market_desc") (Member $378 '"s_market_id") (Member $378 '"s_market_manager") (Member $378 $22) (Member $378 '"s_rec_end_date") (Member $378 '"s_rec_start_date") (Member $378 '"s_state") (Member $378 '"s_store_id") (Member $378 '"s_store_name") (Member $378 '"s_store_sk") (Member $378 '"s_street_name") (Member $378 '"s_street_number") (Member $378 '"s_street_type") (Member $378 '"s_suite_number") (Member $378 '"s_tax_precentage") (Member $378 '"s_zip")))
  (let $374 (lambda '($379) (Member $379 '_yql_dq_key_right_0) (Member $379 '"d1.d_current_day") (Member $379 $51) (Member $379 $52) (Member $379 $53) (Member $379 $54) (Member $379 '"d1.d_date") (Member $379 '"d1.d_date_id") (Member $379 '"d1.d_date_sk") (Member $379 '"d1.d_day_name") (Member $379 '"d1.d_dom") (Member $379 '"d1.d_dow") (Member $379 '"d1.d_first_dom") (Member $379 $55) (Member $379 $56) (Member $379 '"d1.d_fy_week_seq") (Member $379 '"d1.d_fy_year") (Member $379 '"d1.d_holiday") (Member $379 '"d1.d_last_dom") (Member $379 '"d1.d_month_seq") (Member $379 '"d1.d_moy") (Member $379 '"d1.d_qoy") (Member $379 $57) (Member $379 '"d1.d_quarter_seq") (Member $379 '"d1.d_same_day_lq") (Member $379 '"d1.d_same_day_ly") (Member $379 '"d1.d_week_seq") (Member $379 '"d1.d_weekend") (Member $379 '"d1.d_year") (Member $379 $58) (Member $379 $59) (Member $379 $60) (Member $379 $61) (Member $379 $62) (Member $379 $63) (Member $379 $64) (Member $379 $65) (Member $379 $66) (Member $379 $67) (Member $379 $68) (Member $379 $69) (Member $379 $70) (Member $379 $71) (Member $379 $72) (Member $379 $73) (Member $379 $74) (Member $379 $75) (Member $379 $76) (Member $379 $77) (Member $379 $78) (Member $379 $79) (Member $379 $80)))
  (let $375 '('0 '0 '1 '1 '2 '2 '3 '3 '4 '4 '5 '5 '6 '6 '7 '7 '8 '8 '9 '9 '10 '10 '11 '11 '12 '12 '13 '13 '14 '14 '15 '15 '16 '16 '17 '17 '18 '18 '19 '19 '20 '20 '21 '21 '22 '22 '23 '23 '24 '24 '25 '25 '26 '26 '27 '27 '28 '28 '29 '29))
  (let $376 '('0 '30 '1 '31 '2 '32 '3 '33 '4 '34 '5 '35 '6 '36 '7 '37 '8 '38 '9 '39 '10 '40 '11 '41 '12 '42 '13 '43 '14 '44 '15 '45 '16 '46 '17 '47 '18 '48 '19 '49 '20 '50 '21 '51 '22 '52 '23 '53 '24 '54 '25 '55 '26 '56 '27 '57 '28 '58 '29 '59 '30 '60 '31 '61 '32 '62 '33 '63 '34 '64 '35 '65 '36 '66 '37 '67 '38 '68 '39 '69 '40 '70 '41 '71 '42 '72 '43 '73 '44 '74 '45 '75 '46 '76 '47 '77 '48 '78 '49 '79 '50 '80 '51 '81))
  (let $377 (GraceJoinCore (ExpandMap $371 $373) (ExpandMap $372 $374) '"Inner" $50 $50 $375 $376 $27 '('"ss_store_sk") '()))
  (return (NarrowMap $377 (lambda '($380 $381 $382 $383 $384 $385 $386 $387 $388 $389 $390 $391 $392 $393 $394 $395 $396 $397 $398 $399 $400 $401 $402 $403 $404 $405 $406 $407 $408 $409 $410 $411 $412 $413 $414 $415 $416 $417 $418 $419 $420 $421 $422 $423 $424 $425 $426 $427 $428 $429 $430 $431 $432 $433 $434 $435 $436 $437 $438 $439 $440 $441 $442 $443 $444 $445 $446 $447 $448 $449 $450 $451 $452 $453 $454 $455 $456 $457 $458 $459 $460 $461) (AsStruct '('"d1.d_current_day" $411) '($51 $412) '($52 $413) '($53 $414) '($54 $415) '('"d1.d_date" $416) '('"d1.d_date_id" $417) '('"d1.d_date_sk" $418) '('"d1.d_day_name" $419) '('"d1.d_dom" $420) '('"d1.d_dow" $421) '('"d1.d_first_dom" $422) '($55 $423) '($56 $424) '('"d1.d_fy_week_seq" $425) '('"d1.d_fy_year" $426) '('"d1.d_holiday" $427) '('"d1.d_last_dom" $428) '('"d1.d_month_seq" $429) '('"d1.d_moy" $430) '('"d1.d_qoy" $431) '($57 $432) '('"d1.d_quarter_seq" $433) '('"d1.d_same_day_lq" $434) '('"d1.d_same_day_ly" $435) '('"d1.d_week_seq" $436) '('"d1.d_weekend" $437) '('"d1.d_year" $438) '('"store.s_city" $381) '($82 $382) '($83 $383) '($84 $384) '('"store.s_country" $385) '('"store.s_county" $386) '($85 $387) '($86 $388) '($87 $389) '($88 $390) '($89 $391) '('"store.s_hours" $392) '('"store.s_manager" $393) '($90 $394) '($91 $395) '($92 $396) '($93 $397) '($94 $398) '($95 $399) '('"store.s_state" $400) '('"store.s_store_id" $401) '($96 $402) '('"store.s_store_sk" $403) '($97 $404) '($98 $405) '($99 $406) '($100 $407) '($101 $408) '('"store.s_zip" $409) '($58 $439) '($59 $440) '($60 $441) '($61 $442) '($62 $443) '($63 $444) '($64 $445) '($65 $446) '($66 $447) '($67 $448) '($68 $449) '($69 $450) '($70 $451) '($71 $452) '($72 $453) '($73 $454) '($74 $455) '($75 $456) '($76 $457) '($77 $458) '($78 $459) '($79 $460) '($80 $461)))))
))) '('('"_logical_id" '210463))))
(let $103 '"Paths {\n  Name: \"ds\"\n  Children {\n    Name: \"1\"\n    Children {\n      Name: \"catalog_sales\"\n      Children {\n        Name: \"part-001.parquet\"\n        Size: 2028259\n        Read: true\n      }\n      Children {\n        Name: \"part-002.parquet\"\n        Size: 2030897\n        Read: true\n      }\n      Children {\n        Name: \"part-003.parquet\"\n        Size: 2028920\n        Read: true\n      }\n      Children {\n        Name: \"part-004.parquet\"\n        Size: 2030273\n        Read: true\n      }\n      Children {\n        Name: \"part-005.parquet\"\n        Size: 2026996\n        Read: true\n      }\n      Children {\n        Name: \"part-006.parquet\"\n        Size: 2032782\n        Read: true\n      }\n      Children {\n        Name: \"part-007.parquet\"\n        Size: 2034278\n        Read: true\n      }\n      Children {\n        Name: \"part-008.parquet\"\n        Size: 2031825\n        Read: true\n      }\n      Children {\n        Name: \"part-009.parquet\"\n        Size: 2029274\n        Read: true\n      }\n      Children {\n        Name: \"part-010.parquet\"\n        Size: 2039754\n        Read: true\n      }\n      Children {\n        Name: \"part-011.parquet\"\n        Size: 2032758\n        Read: true\n      }\n      Children {\n        Name: \"part-012.parquet\"\n        Size: 2034524\n        Read: true\n      }\n      Children {\n        Name: \"part-013.parquet\"\n        Size: 2037292\n        Read: true\n      }\n      Children {\n        Name: \"part-014.parquet\"\n        Size: 2036457\n        Read: true\n      }\n      Children {\n        Name: \"part-015.parquet\"\n        Size: 2033401\n        Read: true\n      }\n      Children {\n        Name: \"part-016.parquet\"\n        Size: 2031717\n        Read: true\n      }\n      Children {\n        Name: \"part-017.parquet\"\n        Size: 2029864\n        Read: true\n      }\n      Children {\n        Name: \"part-018.parquet\"\n        Size: 2033721\n        Read: true\n      }\n      Children {\n        Name: \"part-019.parquet\"\n        Size: 2034418\n        Read: true\n      }\n      Children {\n        Name: \"part-020.parquet\"\n        Size: 2027796\n        Read: true\n      }\n      Children {\n        Name: \"part-021.parquet\"\n        Size: 2029774\n        Read: true\n      }\n      Children {\n        Name: \"part-022.parquet\"\n        Size: 2038457\n        Read: true\n      }\n      Children {\n        Name: \"part-023.parquet\"\n        Size: 2036056\n        Read: true\n      }\n      Children {\n        Name: \"part-024.parquet\"\n        Size: 2035419\n        Read: true\n      }\n      Children {\n        Name: \"part-025.parquet\"\n        Size: 2029169\n        Read: true\n      }\n      Children {\n        Name: \"part-026.parquet\"\n        Size: 2036621\n        Read: true\n      }\n      Children {\n        Name: \"part-027.parquet\"\n        Size: 2028919\n        Read: true\n      }\n      Children {\n        Name: \"part-028.parquet\"\n        Size: 2028546\n        Read: true\n      }\n      Children {\n        Name: \"part-029.parquet\"\n        Size: 2031736\n        Read: true\n      }\n      Children {\n        Name: \"part-030.parquet\"\n        Size: 2029513\n        Read: true\n      }\n      Children {\n        Name: \"part-031.parquet\"\n        Size: 2030933\n        Read: true\n      }\n      Children {\n        Name: \"part-032.parquet\"\n        Size: 2027764\n        Read: true\n      }\n      Children {\n        Name: \"part-033.parquet\"\n        Size: 2032462\n        Read: true\n      }\n      Children {\n        Name: \"part-034.parquet\"\n        Size: 2035224\n        Read: true\n      }\n      Children {\n        Name: \"part-035.parquet\"\n        Size: 2033134\n        Read: true\n      }\n      Children {\n        Name: \"part-036.parquet\"\n        Size: 2037036\n        Read: true\n      }\n      Children {\n        Name: \"part-037.parquet\"\n        Size: 2031644\n        Read: true\n      }\n      Children {\n        Name: \"part-038.parquet\"\n        Size: 2036061\n        Read: true\n      }\n      Children {\n        Name: \"part-039.parquet\"\n        Size: 2028566\n        Read: true\n      }\n      Children {\n        Name: \"part-040.parquet\"\n        Size: 2028650\n        Read: true\n      }\n      Children {\n        Name: \"part-041.parquet\"\n        Size: 2028830\n        Read: true\n      }\n      Children {\n        Name: \"part-042.parquet\"\n        Size: 2031029\n        Read: true\n      }\n      Children {\n        Name: \"part-043.parquet\"\n        Size: 2032298\n        Read: true\n      }\n      Children {\n        Name: \"part-044.parquet\"\n        Size: 2019845\n        Read: true\n      }\n      Children {\n        Name: \"part-045.parquet\"\n        Size: 2025774\n        Read: true\n      }\n      Children {\n        Name: \"part-046.parquet\"\n        Size: 2034953\n        Read: true\n      }\n      Children {\n        Name: \"part-047.parquet\"\n        Size: 2038614\n        Read: true\n      }\n      Children {\n        Name: \"part-048.parquet\"\n        Size: 2027801\n        Read: true\n      }\n      Children {\n        Name: \"part-049.parquet\"\n        Size: 2033978\n        Read: true\n      }\n      Children {\n        Name: \"part-050.parquet\"\n        Size: 2037728\n        Read: true\n      }\n      Children {\n        Name: \"part-051.parquet\"\n        Size: 2029372\n        Read: true\n      }\n      Children {\n        Name: \"part-052.parquet\"\n        Size: 2031263\n        Read: true\n      }\n      Children {\n        Name: \"part-053.parquet\"\n        Size: 2032170\n        Read: true\n      }\n      Children {\n        Name: \"part-054.parquet\"\n        Size: 2025716\n        Read: true\n      }\n      Children {\n        Name: \"part-055.parquet\"\n        Size: 2035337\n        Read: true\n      }\n      Children {\n        Name: \"part-056.parquet\"\n        Size: 2029257\n        Read: true\n      }\n      Children {\n        Name: \"part-057.parquet\"\n        Size: 2030540\n        Read: true\n      }\n      Children {\n        Name: \"part-058.parquet\"\n        Size: 2034328\n        Read: true\n      }\n      Children {\n        Name: \"part-059.parquet\"\n        Size: 2033089\n        Read: true\n      }\n      Children {\n        Name: \"part-060.parquet\"\n        Size: 2027013\n        Read: true\n      }\n      IsDirectory: true\n    }\n    IsDirectory: true\n  }\n  IsDirectory: true\n}\n")
(let $104 '"cs_bill_customer_sk")
(let $105 '"cs_call_center_sk")
(let $106 '"cs_catalog_page_sk")
(let $107 '"cs_ext_discount_amt")
(let $108 '"cs_ext_list_price")
(let $109 '"cs_ext_sales_price")
(let $110 '"cs_ext_wholesale_cost")
(let $111 '"cs_net_paid_inc_ship")
(let $112 '"cs_net_paid_inc_ship_tax")
(let $113 '"cs_net_paid_inc_tax")
(let $114 '"cs_ship_customer_sk")
(let $115 '"cs_wholesale_cost")
(let $116 (StructType '('"cs_bill_addr_sk" $19) '('"cs_bill_cdemo_sk" $19) '($104 $19) '('"cs_bill_hdemo_sk" $19) '($105 $19) '($106 $19) '('"cs_coupon_amt" $21) '($107 $21) '($108 $21) '($109 $21) '('"cs_ext_ship_cost" $21) '('"cs_ext_tax" $21) '($110 $21) '('"cs_item_sk" $19) '('"cs_list_price" $21) '('"cs_net_paid" $21) '($111 $21) '($112 $21) '($113 $21) '('"cs_net_profit" $21) '('"cs_order_number" $19) '('"cs_promo_sk" $19) '('"cs_quantity" $19) '('"cs_sales_price" $21) '('"cs_ship_addr_sk" $19) '('"cs_ship_cdemo_sk" $19) '($114 $19) '('"cs_ship_date_sk" $19) '('"cs_ship_hdemo_sk" $19) '('"cs_ship_mode_sk" $19) '('"cs_sold_date_sk" $19) '('"cs_sold_time_sk" $19) '('"cs_warehouse_sk" $19) '($115 $21)))
(let $117 '"{\n    \"primary_key\" = [\n        \"cs_item_sk\";\n        \"cs_order_number\"\n    ]\n}")
(let $118 (S3ParseSettings '('((String $103) $16 (AsStruct))) $17 '"" '"parquet" $116 '('('"constraints" $117))))
(let $119 '('"cs_sold_date_sk"))
(let $120 (DqStage '((DqSource $14 $118)) (lambda '($462) (FilterNullMembers (FlatMap (SkipNullMembers (NarrowMap (WideFromBlocks (DqSourceWideBlockWrap $462 $14 $116 $26)) (lambda '($463 $464 $465 $466 $467 $468 $469 $470 $471 $472 $473 $474 $475 $476 $477 $478 $479 $480 $481 $482 $483 $484 $485 $486 $487 $488 $489 $490 $491 $492 $493 $494 $495 $496) (AsStruct '('"cs_bill_addr_sk" $463) '('"cs_bill_cdemo_sk" $464) '($104 $465) '('"cs_bill_hdemo_sk" $466) '($105 $467) '($106 $468) '('"cs_coupon_amt" $469) '($107 $470) '($108 $471) '($109 $472) '('"cs_ext_ship_cost" $473) '('"cs_ext_tax" $474) '($110 $475) '('"cs_item_sk" $476) '('"cs_list_price" $477) '('"cs_net_paid" $478) '($111 $479) '($112 $480) '($113 $481) '('"cs_net_profit" $482) '('"cs_order_number" $483) '('"cs_promo_sk" $484) '('"cs_quantity" $485) '('"cs_sales_price" $486) '('"cs_ship_addr_sk" $487) '('"cs_ship_cdemo_sk" $488) '($114 $489) '('"cs_ship_date_sk" $490) '('"cs_ship_hdemo_sk" $491) '('"cs_ship_mode_sk" $492) '('"cs_sold_date_sk" $493) '('"cs_sold_time_sk" $494) '('"cs_warehouse_sk" $495) '($115 $496)))) $119) (lambda '($497) (block '(
  (let $498 (Member $497 '"cs_sold_date_sk"))
  (return (Just (AsStruct '('_yql_dq_key_left_0 $498) '('"cs_bill_addr_sk" (Member $497 '"cs_bill_addr_sk")) '('"cs_bill_cdemo_sk" (Member $497 '"cs_bill_cdemo_sk")) '($104 (Member $497 $104)) '('"cs_bill_hdemo_sk" (Member $497 '"cs_bill_hdemo_sk")) '($105 (Member $497 $105)) '($106 (Member $497 $106)) '('"cs_coupon_amt" (Member $497 '"cs_coupon_amt")) '($107 (Member $497 $107)) '($108 (Member $497 $108)) '($109 (Member $497 $109)) '('"cs_ext_ship_cost" (Member $497 '"cs_ext_ship_cost")) '('"cs_ext_tax" (Member $497 '"cs_ext_tax")) '($110 (Member $497 $110)) '('"cs_item_sk" (Member $497 '"cs_item_sk")) '('"cs_list_price" (Member $497 '"cs_list_price")) '('"cs_net_paid" (Member $497 '"cs_net_paid")) '($111 (Member $497 $111)) '($112 (Member $497 $112)) '($113 (Member $497 $113)) '('"cs_net_profit" (Member $497 '"cs_net_profit")) '('"cs_order_number" (Member $497 '"cs_order_number")) '('"cs_promo_sk" (Member $497 '"cs_promo_sk")) '('"cs_quantity" (Member $497 '"cs_quantity")) '('"cs_sales_price" (Member $497 '"cs_sales_price")) '('"cs_ship_addr_sk" (Member $497 '"cs_ship_addr_sk")) '('"cs_ship_cdemo_sk" (Member $497 '"cs_ship_cdemo_sk")) '($114 (Member $497 $114)) '('"cs_ship_date_sk" (Member $497 '"cs_ship_date_sk")) '('"cs_ship_hdemo_sk" (Member $497 '"cs_ship_hdemo_sk")) '('"cs_ship_mode_sk" (Member $497 '"cs_ship_mode_sk")) '('"cs_sold_date_sk" $498) '('"cs_sold_time_sk" (Member $497 '"cs_sold_time_sk")) '('"cs_warehouse_sk" (Member $497 '"cs_warehouse_sk")) '($115 (Member $497 $115)))))
)))) $28)) '('('"_logical_id" '211604))))
(let $121 (lambda '($506) (Member $506 '_yql_dq_key_right_0) (Member $506 '"d_current_day") (Member $506 '"d_current_month") (Member $506 $31) (Member $506 '"d_current_week") (Member $506 '"d_current_year") (Member $506 '"d_date") (Member $506 '"d_date_id") (Member $506 '"d_date_sk") (Member $506 '"d_day_name") (Member $506 '"d_dom") (Member $506 '"d_dow") (Member $506 '"d_first_dom") (Member $506 $32) (Member $506 '"d_fy_quarter_seq") (Member $506 '"d_fy_week_seq") (Member $506 '"d_fy_year") (Member $506 '"d_holiday") (Member $506 '"d_last_dom") (Member $506 '"d_month_seq") (Member $506 '"d_moy") (Member $506 '"d_qoy") (Member $506 '"d_quarter_name") (Member $506 '"d_quarter_seq") (Member $506 '"d_same_day_lq") (Member $506 '"d_same_day_ly") (Member $506 '"d_week_seq") (Member $506 '"d_weekend") (Member $506 '"d_year")))
(let $122 '"catalog_sales.cs_bill_addr_sk")
(let $123 '"catalog_sales.cs_bill_cdemo_sk")
(let $124 '"catalog_sales.cs_bill_customer_sk")
(let $125 '"catalog_sales.cs_bill_hdemo_sk")
(let $126 '"catalog_sales.cs_call_center_sk")
(let $127 '"catalog_sales.cs_catalog_page_sk")
(let $128 '"catalog_sales.cs_coupon_amt")
(let $129 '"catalog_sales.cs_ext_discount_amt")
(let $130 '"catalog_sales.cs_ext_list_price")
(let $131 '"catalog_sales.cs_ext_sales_price")
(let $132 '"catalog_sales.cs_ext_ship_cost")
(let $133 '"catalog_sales.cs_ext_tax")
(let $134 '"catalog_sales.cs_ext_wholesale_cost")
(let $135 '"catalog_sales.cs_item_sk")
(let $136 '"catalog_sales.cs_list_price")
(let $137 '"catalog_sales.cs_net_paid")
(let $138 '"catalog_sales.cs_net_paid_inc_ship")
(let $139 '"catalog_sales.cs_net_paid_inc_ship_tax")
(let $140 '"catalog_sales.cs_net_paid_inc_tax")
(let $141 '"catalog_sales.cs_net_profit")
(let $142 '"catalog_sales.cs_order_number")
(let $143 '"catalog_sales.cs_promo_sk")
(let $144 '"catalog_sales.cs_quantity")
(let $145 '"catalog_sales.cs_sales_price")
(let $146 '"catalog_sales.cs_ship_addr_sk")
(let $147 '"catalog_sales.cs_ship_cdemo_sk")
(let $148 '"catalog_sales.cs_ship_customer_sk")
(let $149 '"catalog_sales.cs_ship_date_sk")
(let $150 '"catalog_sales.cs_ship_hdemo_sk")
(let $151 '"catalog_sales.cs_ship_mode_sk")
(let $152 '"catalog_sales.cs_sold_date_sk")
(let $153 '"catalog_sales.cs_sold_time_sk")
(let $154 '"catalog_sales.cs_warehouse_sk")
(let $155 '"catalog_sales.cs_wholesale_cost")
(let $156 '"d3.d_current_month")
(let $157 '"d3.d_current_quarter")
(let $158 '"d3.d_current_week")
(let $159 '"d3.d_current_year")
(let $160 '"d3.d_following_holiday")
(let $161 '"d3.d_fy_quarter_seq")
(let $162 '"d3.d_quarter_name")
(let $163 (DqStage '((DqCnHashShuffle (TDqOutput $120 '0) $28) (DqCnHashShuffle (TDqOutput $37 '2) $36)) (lambda '($499 $500) (block '(
  (let $501 (lambda '($505) (Member $505 '_yql_dq_key_left_0) (Member $505 '"cs_bill_addr_sk") (Member $505 '"cs_bill_cdemo_sk") (Member $505 $104) (Member $505 '"cs_bill_hdemo_sk") (Member $505 $105) (Member $505 $106) (Member $505 '"cs_coupon_amt") (Member $505 $107) (Member $505 $108) (Member $505 $109) (Member $505 '"cs_ext_ship_cost") (Member $505 '"cs_ext_tax") (Member $505 $110) (Member $505 '"cs_item_sk") (Member $505 '"cs_list_price") (Member $505 '"cs_net_paid") (Member $505 $111) (Member $505 $112) (Member $505 $113) (Member $505 '"cs_net_profit") (Member $505 '"cs_order_number") (Member $505 '"cs_promo_sk") (Member $505 '"cs_quantity") (Member $505 '"cs_sales_price") (Member $505 '"cs_ship_addr_sk") (Member $505 '"cs_ship_cdemo_sk") (Member $505 $114) (Member $505 '"cs_ship_date_sk") (Member $505 '"cs_ship_hdemo_sk") (Member $505 '"cs_ship_mode_sk") (Member $505 '"cs_sold_date_sk") (Member $505 '"cs_sold_time_sk") (Member $505 '"cs_warehouse_sk") (Member $505 $115)))
  (let $502 '('0 '0 '1 '1 '2 '2 '3 '3 '4 '4 '5 '5 '6 '6 '7 '7 '8 '8 '9 '9 '10 '10 '11 '11 '12 '12 '13 '13 '14 '14 '15 '15 '16 '16 '17 '17 '18 '18 '19 '19 '20 '20 '21 '21 '22 '22 '23 '23 '24 '24 '25 '25 '26 '26 '27 '27 '28 '28 '29 '29 '30 '30 '31 '31 '32 '32 '33 '33 '34 '34))
  (let $503 '('0 '35 '1 '36 '2 '37 '3 '38 '4 '39 '5 '40 '6 '41 '7 '42 '8 '43 '9 '44 '10 '45 '11 '46 '12 '47 '13 '48 '14 '49 '15 '50 '16 '51 '17 '52 '18 '53 '19 '54 '20 '55 '21 '56 '22 '57 '23 '58 '24 '59 '25 '60 '26 '61 '27 '62 '28 '63))
  (let $504 (GraceJoinCore (ExpandMap $499 $501) (ExpandMap $500 $121) '"Inner" $50 $50 $502 $503 $119 $35 '()))
  (return (NarrowMap $504 (lambda '($507 $508 $509 $510 $511 $512 $513 $514 $515 $516 $517 $518 $519 $520 $521 $522 $523 $524 $525 $526 $527 $528 $529 $530 $531 $532 $533 $534 $535 $536 $537 $538 $539 $540 $541 $542 $543 $544 $545 $546 $547 $548 $549 $550 $551 $552 $553 $554 $555 $556 $557 $558 $559 $560 $561 $562 $563 $564 $565 $566 $567 $568 $569 $570) (AsStruct '($122 $508) '($123 $509) '($124 $510) '($125 $511) '($126 $512) '($127 $513) '($128 $514) '($129 $515) '($130 $516) '($131 $517) '($132 $518) '($133 $519) '($134 $520) '($135 $521) '($136 $522) '($137 $523) '($138 $524) '($139 $525) '($140 $526) '($141 $527) '($142 $528) '($143 $529) '($144 $530) '($145 $531) '($146 $532) '($147 $533) '($148 $534) '($149 $535) '($150 $536) '($151 $537) '($152 $538) '($153 $539) '($154 $540) '($155 $541) '('"d3.d_current_day" $543) '($156 $544) '($157 $545) '($158 $546) '($159 $547) '('"d3.d_date" $548) '('"d3.d_date_id" $549) '('"d3.d_date_sk" $550) '('"d3.d_day_name" $551) '('"d3.d_dom" $552) '('"d3.d_dow" $553) '('"d3.d_first_dom" $554) '($160 $555) '($161 $556) '('"d3.d_fy_week_seq" $557) '('"d3.d_fy_year" $558) '('"d3.d_holiday" $559) '('"d3.d_last_dom" $560) '('"d3.d_month_seq" $561) '('"d3.d_moy" $562) '('"d3.d_qoy" $563) '($162 $564) '('"d3.d_quarter_seq" $565) '('"d3.d_same_day_lq" $566) '('"d3.d_same_day_ly" $567) '('"d3.d_week_seq" $568) '('"d3.d_weekend" $569) '('"d3.d_year" $570)))))
))) '('('"_logical_id" '213025))))
(let $164 (DqStage '((DqCnUnionAll (TDqOutput $163 '0))) (lambda '($571) $571) '('('"_logical_id" '213630))))
(let $165 '('_yql_dq_key_left_0 '_yql_dq_key_left_1))
(let $166 (DqStage '((DqCnMap (TDqOutput $102 '0)) (DqCnBroadcast (TDqOutput $164 '0))) (lambda '($572 $573) (block '(
  (let $574 (DqPhyCrossJoin $572 $573 (Void) (Void) '"Cross" '() '() '()))
  (return (FilterNullMembers (FlatMap (SkipNullMembers $574 '($135 $61)) (lambda '($575) (block '(
    (let $576 (Member $575 $61))
    (let $577 (Member $575 $135))
    (return (Just (AsStruct '('_yql_dq_key_left_0 $576) '('_yql_dq_key_left_1 $577) '($122 (Member $575 $122)) '($123 (Member $575 $123)) '($124 (Member $575 $124)) '($125 (Member $575 $125)) '($126 (Member $575 $126)) '($127 (Member $575 $127)) '($128 (Member $575 $128)) '($129 (Member $575 $129)) '($130 (Member $575 $130)) '($131 (Member $575 $131)) '($132 (Member $575 $132)) '($133 (Member $575 $133)) '($134 (Member $575 $134)) '($135 $577) '($136 (Member $575 $136)) '($137 (Member $575 $137)) '($138 (Member $575 $138)) '($139 (Member $575 $139)) '($140 (Member $575 $140)) '($141 (Member $575 $141)) '($142 (Member $575 $142)) '($143 (Member $575 $143)) '($144 (Member $575 $144)) '($145 (Member $575 $145)) '($146 (Member $575 $146)) '($147 (Member $575 $147)) '($148 (Member $575 $148)) '($149 (Member $575 $149)) '($150 (Member $575 $150)) '($151 (Member $575 $151)) '($152 (Member $575 $152)) '($153 (Member $575 $153)) '($154 (Member $575 $154)) '($155 (Member $575 $155)) '('"d1.d_current_day" (Member $575 '"d1.d_current_day")) '($51 (Member $575 $51)) '($52 (Member $575 $52)) '($53 (Member $575 $53)) '($54 (Member $575 $54)) '('"d1.d_date" (Member $575 '"d1.d_date")) '('"d1.d_date_id" (Member $575 '"d1.d_date_id")) '('"d1.d_date_sk" (Member $575 '"d1.d_date_sk")) '('"d1.d_day_name" (Member $575 '"d1.d_day_name")) '('"d1.d_dom" (Member $575 '"d1.d_dom")) '('"d1.d_dow" (Member $575 '"d1.d_dow")) '('"d1.d_first_dom" (Member $575 '"d1.d_first_dom")) '($55 (Member $575 $55)) '($56 (Member $575 $56)) '('"d1.d_fy_week_seq" (Member $575 '"d1.d_fy_week_seq")) '('"d1.d_fy_year" (Member $575 '"d1.d_fy_year")) '('"d1.d_holiday" (Member $575 '"d1.d_holiday")) '('"d1.d_last_dom" (Member $575 '"d1.d_last_dom")) '('"d1.d_month_seq" (Member $575 '"d1.d_month_seq")) '('"d1.d_moy" (Member $575 '"d1.d_moy")) '('"d1.d_qoy" (Member $575 '"d1.d_qoy")) '($57 (Member $575 $57)) '('"d1.d_quarter_seq" (Member $575 '"d1.d_quarter_seq")) '('"d1.d_same_day_lq" (Member $575 '"d1.d_same_day_lq")) '('"d1.d_same_day_ly" (Member $575 '"d1.d_same_day_ly")) '('"d1.d_week_seq" (Member $575 '"d1.d_week_seq")) '('"d1.d_weekend" (Member $575 '"d1.d_weekend")) '('"d1.d_year" (Member $575 '"d1.d_year")) '('"d3.d_current_day" (Member $575 '"d3.d_current_day")) '($156 (Member $575 $156)) '($157 (Member $575 $157)) '($158 (Member $575 $158)) '($159 (Member $575 $159)) '('"d3.d_date" (Member $575 '"d3.d_date")) '('"d3.d_date_id" (Member $575 '"d3.d_date_id")) '('"d3.d_date_sk" (Member $575 '"d3.d_date_sk")) '('"d3.d_day_name" (Member $575 '"d3.d_day_name")) '('"d3.d_dom" (Member $575 '"d3.d_dom")) '('"d3.d_dow" (Member $575 '"d3.d_dow")) '('"d3.d_first_dom" (Member $575 '"d3.d_first_dom")) '($160 (Member $575 $160)) '($161 (Member $575 $161)) '('"d3.d_fy_week_seq" (Member $575 '"d3.d_fy_week_seq")) '('"d3.d_fy_year" (Member $575 '"d3.d_fy_year")) '('"d3.d_holiday" (Member $575 '"d3.d_holiday")) '('"d3.d_last_dom" (Member $575 '"d3.d_last_dom")) '('"d3.d_month_seq" (Member $575 '"d3.d_month_seq")) '('"d3.d_moy" (Member $575 '"d3.d_moy")) '('"d3.d_qoy" (Member $575 '"d3.d_qoy")) '($162 (Member $575 $162)) '('"d3.d_quarter_seq" (Member $575 '"d3.d_quarter_seq")) '('"d3.d_same_day_lq" (Member $575 '"d3.d_same_day_lq")) '('"d3.d_same_day_ly" (Member $575 '"d3.d_same_day_ly")) '('"d3.d_week_seq" (Member $575 '"d3.d_week_seq")) '('"d3.d_weekend" (Member $575 '"d3.d_weekend")) '('"d3.d_year" (Member $575 '"d3.d_year")) '('"store.s_city" (Member $575 '"store.s_city")) '($82 (Member $575 $82)) '($83 (Member $575 $83)) '($84 (Member $575 $84)) '('"store.s_country" (Member $575 '"store.s_country")) '('"store.s_county" (Member $575 '"store.s_county")) '($85 (Member $575 $85)) '($86 (Member $575 $86)) '($87 (Member $575 $87)) '($88 (Member $575 $88)) '($89 (Member $575 $89)) '('"store.s_hours" (Member $575 '"store.s_hours")) '('"store.s_manager" (Member $575 '"store.s_manager")) '($90 (Member $575 $90)) '($91 (Member $575 $91)) '($92 (Member $575 $92)) '($93 (Member $575 $93)) '($94 (Member $575 $94)) '($95 (Member $575 $95)) '('"store.s_state" (Member $575 '"store.s_state")) '('"store.s_store_id" (Member $575 '"store.s_store_id")) '($96 (Member $575 $96)) '('"store.s_store_sk" (Member $575 '"store.s_store_sk")) '($97 (Member $575 $97)) '($98 (Member $575 $98)) '($99 (Member $575 $99)) '($100 (Member $575 $100)) '($101 (Member $575 $101)) '('"store.s_zip" (Member $575 '"store.s_zip")) '($58 (Member $575 $58)) '($59 (Member $575 $59)) '($60 (Member $575 $60)) '($61 $576) '($62 (Member $575 $62)) '($63 (Member $575 $63)) '($64 (Member $575 $64)) '($65 (Member $575 $65)) '($66 (Member $575 $66)) '($67 (Member $575 $67)) '($68 (Member $575 $68)) '($69 (Member $575 $69)) '($70 (Member $575 $70)) '($71 (Member $575 $71)) '($72 (Member $575 $72)) '($73 (Member $575 $73)) '($74 (Member $575 $74)) '($75 (Member $575 $75)) '($76 (Member $575 $76)) '($77 (Member $575 $77)) '($78 (Member $575 $78)) '($79 (Member $575 $79)) '($80 (Member $575 $80)))))
  )))) $165))
))) '('('"_logical_id" '216506))))
(let $167 '"Paths {\n  Name: \"ds\"\n  Children {\n    Name: \"1\"\n    Children {\n      Name: \"store_returns\"\n      Children {\n        Name: \"part-001.parquet\"\n        Size: 352130\n        Read: true\n      }\n      Children {\n        Name: \"part-002.parquet\"\n        Size: 351972\n        Read: true\n      }\n      Children {\n        Name: \"part-003.parquet\"\n        Size: 352172\n        Read: true\n      }\n      Children {\n        Name: \"part-004.parquet\"\n        Size: 354234\n        Read: true\n      }\n      Children {\n        Name: \"part-005.parquet\"\n        Size: 353149\n        Read: true\n      }\n      Children {\n        Name: \"part-006.parquet\"\n        Size: 352211\n        Read: true\n      }\n      Children {\n        Name: \"part-007.parquet\"\n        Size: 353725\n        Read: true\n      }\n      Children {\n        Name: \"part-008.parquet\"\n        Size: 352533\n        Read: true\n      }\n      Children {\n        Name: \"part-009.parquet\"\n        Size: 353275\n        Read: true\n      }\n      Children {\n        Name: \"part-010.parquet\"\n        Size: 353095\n        Read: true\n      }\n      Children {\n        Name: \"part-011.parquet\"\n        Size: 353258\n        Read: true\n      }\n      Children {\n        Name: \"part-012.parquet\"\n        Size: 352596\n        Read: true\n      }\n      Children {\n        Name: \"part-013.parquet\"\n        Size: 353409\n        Read: true\n      }\n      Children {\n        Name: \"part-014.parquet\"\n        Size: 352535\n        Read: true\n      }\n      Children {\n        Name: \"part-015.parquet\"\n        Size: 352338\n        Read: true\n      }\n      Children {\n        Name: \"part-016.parquet\"\n        Size: 352132\n        Read: true\n      }\n      Children {\n        Name: \"part-017.parquet\"\n        Size: 353177\n        Read: true\n      }\n      Children {\n        Name: \"part-018.parquet\"\n        Size: 353575\n        Read: true\n      }\n      Children {\n        Name: \"part-019.parquet\"\n        Size: 352485\n        Read: true\n      }\n      Children {\n        Name: \"part-020.parquet\"\n        Size: 353126\n        Read: true\n      }\n      Children {\n        Name: \"part-021.parquet\"\n        Size: 353538\n        Read: true\n      }\n      Children {\n        Name: \"part-022.parquet\"\n        Size: 354078\n        Read: true\n      }\n      Children {\n        Name: \"part-023.parquet\"\n        Size: 352504\n        Read: true\n      }\n      Children {\n        Name: \"part-024.parquet\"\n        Size: 352599\n        Read: true\n      }\n      Children {\n        Name: \"part-025.parquet\"\n        Size: 353338\n        Read: true\n      }\n      Children {\n        Name: \"part-026.parquet\"\n        Size: 353637\n        Read: true\n      }\n      Children {\n        Name: \"part-027.parquet\"\n        Size: 353127\n        Read: true\n      }\n      Children {\n        Name: \"part-028.parquet\"\n        Size: 353468\n        Read: true\n      }\n      Children {\n        Name: \"part-029.parquet\"\n        Size: 352877\n        Read: true\n      }\n      Children {\n        Name: \"part-030.parquet\"\n        Size: 352269\n        Read: true\n      }\n      Children {\n        Name: \"part-031.parquet\"\n        Size: 353249\n        Read: true\n      }\n      Children {\n        Name: \"part-032.parquet\"\n        Size: 352726\n        Read: true\n      }\n      Children {\n        Name: \"part-033.parquet\"\n        Size: 354056\n        Read: true\n      }\n      Children {\n        Name: \"part-034.parquet\"\n        Size: 353913\n        Read: true\n      }\n      Children {\n        Name: \"part-035.parquet\"\n        Size: 353099\n        Read: true\n      }\n      Children {\n        Name: \"part-036.parquet\"\n        Size: 353243\n        Read: true\n      }\n      Children {\n        Name: \"part-037.parquet\"\n        Size: 354172\n        Read: true\n      }\n      Children {\n        Name: \"part-038.parquet\"\n        Size: 352819\n        Read: true\n      }\n      Children {\n        Name: \"part-039.parquet\"\n        Size: 351572\n        Read: true\n      }\n      Children {\n        Name: \"part-040.parquet\"\n        Size: 352794\n        Read: true\n      }\n      Children {\n        Name: \"part-041.parquet\"\n        Size: 353297\n        Read: true\n      }\n      Children {\n        Name: \"part-042.parquet\"\n        Size: 353354\n        Read: true\n      }\n      Children {\n        Name: \"part-043.parquet\"\n        Size: 352755\n        Read: true\n      }\n      Children {\n        Name: \"part-044.parquet\"\n        Size: 352740\n        Read: true\n      }\n      Children {\n        Name: \"part-045.parquet\"\n        Size: 353288\n        Read: true\n      }\n      Children {\n        Name: \"part-046.parquet\"\n        Size: 353092\n        Read: true\n      }\n      Children {\n        Name: \"part-047.parquet\"\n        Size: 352312\n        Read: true\n      }\n      Children {\n        Name: \"part-048.parquet\"\n        Size: 354032\n        Read: true\n      }\n      Children {\n        Name: \"part-049.parquet\"\n        Size: 352646\n        Read: true\n      }\n      Children {\n        Name: \"part-050.parquet\"\n        Size: 352855\n        Read: true\n      }\n      Children {\n        Name: \"part-051.parquet\"\n        Size: 353495\n        Read: true\n      }\n      Children {\n        Name: \"part-052.parquet\"\n        Size: 353981\n        Read: true\n      }\n      Children {\n        Name: \"part-053.parquet\"\n        Size: 353060\n        Read: true\n      }\n      Children {\n        Name: \"part-054.parquet\"\n        Size: 352751\n        Read: true\n      }\n      Children {\n        Name: \"part-055.parquet\"\n        Size: 352577\n        Read: true\n      }\n      Children {\n        Name: \"part-056.parquet\"\n        Size: 353041\n        Read: true\n      }\n      Children {\n        Name: \"part-057.parquet\"\n        Size: 352763\n        Read: true\n      }\n      Children {\n        Name: \"part-058.parquet\"\n        Size: 353450\n        Read: true\n      }\n      Children {\n        Name: \"part-059.parquet\"\n        Size: 354041\n        Read: true\n      }\n      Children {\n        Name: \"part-060.parquet\"\n        Size: 352925\n        Read: true\n      }\n      IsDirectory: true\n    }\n    IsDirectory: true\n  }\n  IsDirectory: true\n}\n")
(let $168 '"sr_return_amt_inc_tax")
(let $169 '"sr_return_quantity")
(let $170 '"sr_return_ship_cost")
(let $171 '"sr_return_time_sk")
(let $172 '"sr_returned_date_sk")
(let $173 '"sr_reversed_charge")
(let $174 (StructType '('"sr_addr_sk" $19) '('"sr_cdemo_sk" $19) '('"sr_customer_sk" $19) '('"sr_fee" $21) '('"sr_hdemo_sk" $19) '('"sr_item_sk" $19) '('"sr_net_loss" $21) '('"sr_reason_sk" $19) '('"sr_refunded_cash" $21) '('"sr_return_amt" $21) '($168 $21) '($169 $19) '($170 $21) '('"sr_return_tax" $21) '($171 $19) '($172 $19) '($173 $21) '('"sr_store_credit" $21) '('"sr_store_sk" $19) '('"sr_ticket_number" $19)))
(let $175 '"{\n    \"primary_keys\" = [\n        \"sr_item_sk\";\n        \"sr_ticket_number\"\n    ]\n}")
(let $176 (S3ParseSettings '('((String $167) $16 (AsStruct))) $17 '"" '"parquet" $174 '('('"constraints" $175))))
(let $177 '($172))
(let $178 (DqStage '((DqSource $14 $176)) (lambda '($578) (FilterNullMembers (FlatMap (SkipNullMembers (NarrowMap (WideFromBlocks (DqSourceWideBlockWrap $578 $14 $174 $26)) (lambda '($579 $580 $581 $582 $583 $584 $585 $586 $587 $588 $589 $590 $591 $592 $593 $594 $595 $596 $597 $598) (AsStruct '('"sr_addr_sk" $579) '('"sr_cdemo_sk" $580) '('"sr_customer_sk" $581) '('"sr_fee" $582) '('"sr_hdemo_sk" $583) '('"sr_item_sk" $584) '('"sr_net_loss" $585) '('"sr_reason_sk" $586) '('"sr_refunded_cash" $587) '('"sr_return_amt" $588) '($168 $589) '($169 $590) '($170 $591) '('"sr_return_tax" $592) '($171 $593) '($172 $594) '($173 $595) '('"sr_store_credit" $596) '('"sr_store_sk" $597) '('"sr_ticket_number" $598)))) $177) (lambda '($599) (block '(
  (let $600 (Member $599 $172))
  (return (Just (AsStruct '('_yql_dq_key_left_0 $600) '('"sr_addr_sk" (Member $599 '"sr_addr_sk")) '('"sr_cdemo_sk" (Member $599 '"sr_cdemo_sk")) '('"sr_customer_sk" (Member $599 '"sr_customer_sk")) '('"sr_fee" (Member $599 '"sr_fee")) '('"sr_hdemo_sk" (Member $599 '"sr_hdemo_sk")) '('"sr_item_sk" (Member $599 '"sr_item_sk")) '('"sr_net_loss" (Member $599 '"sr_net_loss")) '('"sr_reason_sk" (Member $599 '"sr_reason_sk")) '('"sr_refunded_cash" (Member $599 '"sr_refunded_cash")) '('"sr_return_amt" (Member $599 '"sr_return_amt")) '($168 (Member $599 $168)) '($169 (Member $599 $169)) '($170 (Member $599 $170)) '('"sr_return_tax" (Member $599 '"sr_return_tax")) '($171 (Member $599 $171)) '($172 $600) '($173 (Member $599 $173)) '('"sr_store_credit" (Member $599 '"sr_store_credit")) '('"sr_store_sk" (Member $599 '"sr_store_sk")) '('"sr_ticket_number" (Member $599 '"sr_ticket_number")))))
)))) $28)) '('('"_logical_id" '213951))))
(let $179 '"d2.d_current_month")
(let $180 '"d2.d_current_quarter")
(let $181 '"d2.d_current_week")
(let $182 '"d2.d_current_year")
(let $183 '"d2.d_following_holiday")
(let $184 '"d2.d_fy_quarter_seq")
(let $185 '"d2.d_quarter_name")
(let $186 '"store_returns.sr_addr_sk")
(let $187 '"store_returns.sr_cdemo_sk")
(let $188 '"store_returns.sr_customer_sk")
(let $189 '"store_returns.sr_fee")
(let $190 '"store_returns.sr_hdemo_sk")
(let $191 '"store_returns.sr_item_sk")
(let $192 '"store_returns.sr_net_loss")
(let $193 '"store_returns.sr_reason_sk")
(let $194 '"store_returns.sr_refunded_cash")
(let $195 '"store_returns.sr_return_amt")
(let $196 '"store_returns.sr_return_amt_inc_tax")
(let $197 '"store_returns.sr_return_quantity")
(let $198 '"store_returns.sr_return_ship_cost")
(let $199 '"store_returns.sr_return_tax")
(let $200 '"store_returns.sr_return_time_sk")
(let $201 '"store_returns.sr_returned_date_sk")
(let $202 '"store_returns.sr_reversed_charge")
(let $203 '"store_returns.sr_store_credit")
(let $204 '"store_returns.sr_store_sk")
(let $205 '"store_returns.sr_ticket_number")
(let $206 '('_yql_dq_key_right_0 '_yql_dq_key_right_1))
(let $207 (DqStage '((DqCnHashShuffle (TDqOutput $178 '0) $28) (DqCnHashShuffle (TDqOutput $37 '0) $36)) (lambda '($601 $602) (block '(
  (let $603 (lambda '($607) (Member $607 '_yql_dq_key_left_0) (Member $607 '"sr_addr_sk") (Member $607 '"sr_cdemo_sk") (Member $607 '"sr_customer_sk") (Member $607 '"sr_fee") (Member $607 '"sr_hdemo_sk") (Member $607 '"sr_item_sk") (Member $607 '"sr_net_loss") (Member $607 '"sr_reason_sk") (Member $607 '"sr_refunded_cash") (Member $607 '"sr_return_amt") (Member $607 $168) (Member $607 $169) (Member $607 $170) (Member $607 '"sr_return_tax") (Member $607 $171) (Member $607 $172) (Member $607 $173) (Member $607 '"sr_store_credit") (Member $607 '"sr_store_sk") (Member $607 '"sr_ticket_number")))
  (let $604 '('0 '0 '1 '1 '2 '2 '3 '3 '4 '4 '5 '5 '6 '6 '7 '7 '8 '8 '9 '9 '10 '10 '11 '11 '12 '12 '13 '13 '14 '14 '15 '15 '16 '16 '17 '17 '18 '18 '19 '19 '20 '20))
  (let $605 '('0 '21 '1 '22 '2 '23 '3 '24 '4 '25 '5 '26 '6 '27 '7 '28 '8 '29 '9 '30 '10 '31 '11 '32 '12 '33 '13 '34 '14 '35 '15 '36 '16 '37 '17 '38 '18 '39 '19 '40 '20 '41 '21 '42 '22 '43 '23 '44 '24 '45 '25 '46 '26 '47 '27 '48 '28 '49))
  (let $606 (GraceJoinCore (ExpandMap $601 $603) (ExpandMap $602 $121) '"Inner" $50 $50 $604 $605 $177 $35 '()))
  (return (FilterNullMembers (FlatMap (SkipNullMembers (NarrowMap $606 (lambda '($608 $609 $610 $611 $612 $613 $614 $615 $616 $617 $618 $619 $620 $621 $622 $623 $624 $625 $626 $627 $628 $629 $630 $631 $632 $633 $634 $635 $636 $637 $638 $639 $640 $641 $642 $643 $644 $645 $646 $647 $648 $649 $650 $651 $652 $653 $654 $655 $656 $657) (AsStruct '('"d2.d_current_day" $630) '($179 $631) '($180 $632) '($181 $633) '($182 $634) '('"d2.d_date" $635) '('"d2.d_date_id" $636) '('"d2.d_date_sk" $637) '('"d2.d_day_name" $638) '('"d2.d_dom" $639) '('"d2.d_dow" $640) '('"d2.d_first_dom" $641) '($183 $642) '($184 $643) '('"d2.d_fy_week_seq" $644) '('"d2.d_fy_year" $645) '('"d2.d_holiday" $646) '('"d2.d_last_dom" $647) '('"d2.d_month_seq" $648) '('"d2.d_moy" $649) '('"d2.d_qoy" $650) '($185 $651) '('"d2.d_quarter_seq" $652) '('"d2.d_same_day_lq" $653) '('"d2.d_same_day_ly" $654) '('"d2.d_week_seq" $655) '('"d2.d_weekend" $656) '('"d2.d_year" $657) '($186 $609) '($187 $610) '($188 $611) '($189 $612) '($190 $613) '($191 $614) '($192 $615) '($193 $616) '($194 $617) '($195 $618) '($196 $619) '($197 $620) '($198 $621) '($199 $622) '($200 $623) '($201 $624) '($202 $625) '($203 $626) '($204 $627) '($205 $628)))) '($188 $191)) (lambda '($658) (block '(
    (let $659 (Member $658 $188))
    (let $660 (Member $658 $191))
    (return (Just (AsStruct '('_yql_dq_key_right_0 $659) '('_yql_dq_key_right_1 $660) '('"d2.d_current_day" (Member $658 '"d2.d_current_day")) '($179 (Member $658 $179)) '($180 (Member $658 $180)) '($181 (Member $658 $181)) '($182 (Member $658 $182)) '('"d2.d_date" (Member $658 '"d2.d_date")) '('"d2.d_date_id" (Member $658 '"d2.d_date_id")) '('"d2.d_date_sk" (Member $658 '"d2.d_date_sk")) '('"d2.d_day_name" (Member $658 '"d2.d_day_name")) '('"d2.d_dom" (Member $658 '"d2.d_dom")) '('"d2.d_dow" (Member $658 '"d2.d_dow")) '('"d2.d_first_dom" (Member $658 '"d2.d_first_dom")) '($183 (Member $658 $183)) '($184 (Member $658 $184)) '('"d2.d_fy_week_seq" (Member $658 '"d2.d_fy_week_seq")) '('"d2.d_fy_year" (Member $658 '"d2.d_fy_year")) '('"d2.d_holiday" (Member $658 '"d2.d_holiday")) '('"d2.d_last_dom" (Member $658 '"d2.d_last_dom")) '('"d2.d_month_seq" (Member $658 '"d2.d_month_seq")) '('"d2.d_moy" (Member $658 '"d2.d_moy")) '('"d2.d_qoy" (Member $658 '"d2.d_qoy")) '($185 (Member $658 $185)) '('"d2.d_quarter_seq" (Member $658 '"d2.d_quarter_seq")) '('"d2.d_same_day_lq" (Member $658 '"d2.d_same_day_lq")) '('"d2.d_same_day_ly" (Member $658 '"d2.d_same_day_ly")) '('"d2.d_week_seq" (Member $658 '"d2.d_week_seq")) '('"d2.d_weekend" (Member $658 '"d2.d_weekend")) '('"d2.d_year" (Member $658 '"d2.d_year")) '($186 (Member $658 $186)) '($187 (Member $658 $187)) '($188 $659) '($189 (Member $658 $189)) '($190 (Member $658 $190)) '($191 $660) '($192 (Member $658 $192)) '($193 (Member $658 $193)) '($194 (Member $658 $194)) '($195 (Member $658 $195)) '($196 (Member $658 $196)) '($197 (Member $658 $197)) '($198 (Member $658 $198)) '($199 (Member $658 $199)) '($200 (Member $658 $200)) '($201 (Member $658 $201)) '($202 (Member $658 $202)) '($203 (Member $658 $203)) '($204 (Member $658 $204)) '($205 (Member $658 $205)))))
  )))) $206))
))) '('('"_logical_id" '216484))))
(let $208 (DqStage '((DqCnHashShuffle (TDqOutput $166 '0) $165) (DqCnHashShuffle (TDqOutput $207 '0) $206)) (lambda '($661 $662) (block '(
  (let $663 (lambda '($669) (Member $669 '_yql_dq_key_left_0) (Member $669 '_yql_dq_key_left_1) (Member $669 $122) (Member $669 $123) (Member $669 $124) (Member $669 $125) (Member $669 $126) (Member $669 $127) (Member $669 $128) (Member $669 $129) (Member $669 $130) (Member $669 $131) (Member $669 $132) (Member $669 $133) (Member $669 $134) (Member $669 $135) (Member $669 $136) (Member $669 $137) (Member $669 $138) (Member $669 $139) (Member $669 $140) (Member $669 $141) (Member $669 $142) (Member $669 $143) (Member $669 $144) (Member $669 $145) (Member $669 $146) (Member $669 $147) (Member $669 $148) (Member $669 $149) (Member $669 $150) (Member $669 $151) (Member $669 $152) (Member $669 $153) (Member $669 $154) (Member $669 $155) (Member $669 '"d1.d_current_day") (Member $669 $51) (Member $669 $52) (Member $669 $53) (Member $669 $54) (Member $669 '"d1.d_date") (Member $669 '"d1.d_date_id") (Member $669 '"d1.d_date_sk") (Member $669 '"d1.d_day_name") (Member $669 '"d1.d_dom") (Member $669 '"d1.d_dow") (Member $669 '"d1.d_first_dom") (Member $669 $55) (Member $669 $56) (Member $669 '"d1.d_fy_week_seq") (Member $669 '"d1.d_fy_year") (Member $669 '"d1.d_holiday") (Member $669 '"d1.d_last_dom") (Member $669 '"d1.d_month_seq") (Member $669 '"d1.d_moy") (Member $669 '"d1.d_qoy") (Member $669 $57) (Member $669 '"d1.d_quarter_seq") (Member $669 '"d1.d_same_day_lq") (Member $669 '"d1.d_same_day_ly") (Member $669 '"d1.d_week_seq") (Member $669 '"d1.d_weekend") (Member $669 '"d1.d_year") (Member $669 '"d3.d_current_day") (Member $669 $156) (Member $669 $157) (Member $669 $158) (Member $669 $159) (Member $669 '"d3.d_date") (Member $669 '"d3.d_date_id") (Member $669 '"d3.d_date_sk") (Member $669 '"d3.d_day_name") (Member $669 '"d3.d_dom") (Member $669 '"d3.d_dow") (Member $669 '"d3.d_first_dom") (Member $669 $160) (Member $669 $161) (Member $669 '"d3.d_fy_week_seq") (Member $669 '"d3.d_fy_year") (Member $669 '"d3.d_holiday") (Member $669 '"d3.d_last_dom") (Member $669 '"d3.d_month_seq") (Member $669 '"d3.d_moy") (Member $669 '"d3.d_qoy") (Member $669 $162) (Member $669 '"d3.d_quarter_seq") (Member $669 '"d3.d_same_day_lq") (Member $669 '"d3.d_same_day_ly") (Member $669 '"d3.d_week_seq") (Member $669 '"d3.d_weekend") (Member $669 '"d3.d_year") (Member $669 '"store.s_city") (Member $669 $82) (Member $669 $83) (Member $669 $84) (Member $669 '"store.s_country") (Member $669 '"store.s_county") (Member $669 $85) (Member $669 $86) (Member $669 $87) (Member $669 $88) (Member $669 $89) (Member $669 '"store.s_hours") (Member $669 '"store.s_manager") (Member $669 $90) (Member $669 $91) (Member $669 $92) (Member $669 $93) (Member $669 $94) (Member $669 $95) (Member $669 '"store.s_state") (Member $669 '"store.s_store_id") (Member $669 $96) (Member $669 '"store.s_store_sk") (Member $669 $97) (Member $669 $98) (Member $669 $99) (Member $669 $100) (Member $669 $101) (Member $669 '"store.s_zip") (Member $669 $58) (Member $669 $59) (Member $669 $60) (Member $669 $61) (Member $669 $62) (Member $669 $63) (Member $669 $64) (Member $669 $65) (Member $669 $66) (Member $669 $67) (Member $669 $68) (Member $669 $69) (Member $669 $70) (Member $669 $71) (Member $669 $72) (Member $669 $73) (Member $669 $74) (Member $669 $75) (Member $669 $76) (Member $669 $77) (Member $669 $78) (Member $669 $79) (Member $669 $80)))
  (let $664 (lambda '($670) (Member $670 '_yql_dq_key_right_0) (Member $670 '_yql_dq_key_right_1) (Member $670 '"d2.d_current_day") (Member $670 $179) (Member $670 $180) (Member $670 $181) (Member $670 $182) (Member $670 '"d2.d_date") (Member $670 '"d2.d_date_id") (Member $670 '"d2.d_date_sk") (Member $670 '"d2.d_day_name") (Member $670 '"d2.d_dom") (Member $670 '"d2.d_dow") (Member $670 '"d2.d_first_dom") (Member $670 $183) (Member $670 $184) (Member $670 '"d2.d_fy_week_seq") (Member $670 '"d2.d_fy_year") (Member $670 '"d2.d_holiday") (Member $670 '"d2.d_last_dom") (Member $670 '"d2.d_month_seq") (Member $670 '"d2.d_moy") (Member $670 '"d2.d_qoy") (Member $670 $185) (Member $670 '"d2.d_quarter_seq") (Member $670 '"d2.d_same_day_lq") (Member $670 '"d2.d_same_day_ly") (Member $670 '"d2.d_week_seq") (Member $670 '"d2.d_weekend") (Member $670 '"d2.d_year") (Member $670 $186) (Member $670 $187) (Member $670 $188) (Member $670 $189) (Member $670 $190) (Member $670 $191) (Member $670 $192) (Member $670 $193) (Member $670 $194) (Member $670 $195) (Member $670 $196) (Member $670 $197) (Member $670 $198) (Member $670 $199) (Member $670 $200) (Member $670 $201) (Member $670 $202) (Member $670 $203) (Member $670 $204) (Member $670 $205)))
  (let $665 '('0 '1))
  (let $666 '('0 '0 '1 '1 '2 '2 '3 '3 '4 '4 '5 '5 '6 '6 '7 '7 '8 '8 '9 '9 '10 '10 '11 '11 '12 '12 '13 '13 '14 '14 '15 '15 '16 '16 '17 '17 '18 '18 '19 '19 '20 '20 '21 '21 '22 '22 '23 '23 '24 '24 '25 '25 '26 '26 '27 '27 '28 '28 '29 '29 '30 '30 '31 '31 '32 '32 '33 '33 '34 '34 '35 '35 '36 '36 '37 '37 '38 '38 '39 '39 '40 '40 '41 '41 '42 '42 '43 '43 '44 '44 '45 '45 '46 '46 '47 '47 '48 '48 '49 '49 '50 '50 '51 '51 '52 '52 '53 '53 '54 '54 '55 '55 '56 '56 '57 '57 '58 '58 '59 '59 '60 '60 '61 '61 '62 '62 '63 '63 '64 '64 '65 '65 '66 '66 '67 '67 '68 '68 '69 '69 '70 '70 '71 '71 '72 '72 '73 '73 '74 '74 '75 '75 '76 '76 '77 '77 '78 '78 '79 '79 '80 '80 '81 '81 '82 '82 '83 '83 '84 '84 '85 '85 '86 '86 '87 '87 '88 '88 '89 '89 '90 '90 '91 '91 '92 '92 '93 '93 '94 '94 '95 '95 '96 '96 '97 '97 '98 '98 '99 '99 '100 '100 '101 '101 '102 '102 '103 '103 '104 '104 '105 '105 '106 '106 '107 '107 '108 '108 '109 '109 '110 '110 '111 '111 '112 '112 '113 '113 '114 '114 '115 '115 '116 '116 '117 '117 '118 '118 '119 '119 '120 '120 '121 '121 '122 '122 '123 '123 '124 '124 '125 '125 '126 '126 '127 '127 '128 '128 '129 '129 '130 '130 '131 '131 '132 '132 '133 '133 '134 '134 '135 '135 '136 '136 '137 '137 '138 '138 '139 '139 '140 '140 '141 '141 '142 '142 '143 '143))
  (let $667 '('0 '144 '1 '145 '2 '146 '3 '147 '4 '148 '5 '149 '6 '150 '7 '151 '8 '152 '9 '153 '10 '154 '11 '155 '12 '156 '13 '157 '14 '158 '15 '159 '16 '160 '17 '161 '18 '162 '19 '163 '20 '164 '21 '165 '22 '166 '23 '167 '24 '168 '25 '169 '26 '170 '27 '171 '28 '172 '29 '173 '30 '174 '31 '175 '32 '176 '33 '177 '34 '178 '35 '179 '36 '180 '37 '181 '38 '182 '39 '183 '40 '184 '41 '185 '42 '186 '43 '187 '44 '188 '45 '189 '46 '190 '47 '191 '48 '192 '49 '193))
  (let $668 (GraceJoinCore (ExpandMap $661 $663) (ExpandMap $662 $664) '"Inner" $665 $665 $666 $667 '('"cs_item_sk" '"ss_customer_sk") '('"sr_customer_sk" '"sr_item_sk") '()))
  (return (NarrowMap $668 (lambda '($671 $672 $673 $674 $675 $676 $677 $678 $679 $680 $681 $682 $683 $684 $685 $686 $687 $688 $689 $690 $691 $692 $693 $694 $695 $696 $697 $698 $699 $700 $701 $702 $703 $704 $705 $706 $707 $708 $709 $710 $711 $712 $713 $714 $715 $716 $717 $718 $719 $720 $721 $722 $723 $724 $725 $726 $727 $728 $729 $730 $731 $732 $733 $734 $735 $736 $737 $738 $739 $740 $741 $742 $743 $744 $745 $746 $747 $748 $749 $750 $751 $752 $753 $754 $755 $756 $757 $758 $759 $760 $761 $762 $763 $764 $765 $766 $767 $768 $769 $770 $771 $772 $773 $774 $775 $776 $777 $778 $779 $780 $781 $782 $783 $784 $785 $786 $787 $788 $789 $790 $791 $792 $793 $794 $795 $796 $797 $798 $799 $800 $801 $802 $803 $804 $805 $806 $807 $808 $809 $810 $811 $812 $813 $814 $815 $816 $817 $818 $819 $820 $821 $822 $823 $824 $825 $826 $827 $828 $829 $830 $831 $832 $833 $834 $835 $836 $837 $838 $839 $840 $841 $842 $843 $844 $845 $846 $847 $848 $849 $850 $851 $852 $853 $854 $855 $856 $857 $858 $859 $860 $861 $862 $863 $864) (AsStruct '($122 $673) '($123 $674) '($124 $675) '($125 $676) '($126 $677) '($127 $678) '($128 $679) '($129 $680) '($130 $681) '($131 $682) '($132 $683) '($133 $684) '($134 $685) '($135 $686) '($136 $687) '($137 $688) '($138 $689) '($139 $690) '($140 $691) '($141 $692) '($142 $693) '($143 $694) '($144 $695) '($145 $696) '($146 $697) '($147 $698) '($148 $699) '($149 $700) '($150 $701) '($151 $702) '($152 $703) '($153 $704) '($154 $705) '($155 $706) '('"d1.d_current_day" $707) '($51 $708) '($52 $709) '($53 $710) '($54 $711) '('"d1.d_date" $712) '('"d1.d_date_id" $713) '('"d1.d_date_sk" $714) '('"d1.d_day_name" $715) '('"d1.d_dom" $716) '('"d1.d_dow" $717) '('"d1.d_first_dom" $718) '($55 $719) '($56 $720) '('"d1.d_fy_week_seq" $721) '('"d1.d_fy_year" $722) '('"d1.d_holiday" $723) '('"d1.d_last_dom" $724) '('"d1.d_month_seq" $725) '('"d1.d_moy" $726) '('"d1.d_qoy" $727) '($57 $728) '('"d1.d_quarter_seq" $729) '('"d1.d_same_day_lq" $730) '('"d1.d_same_day_ly" $731) '('"d1.d_week_seq" $732) '('"d1.d_weekend" $733) '('"d1.d_year" $734) '('"d2.d_current_day" $817) '($179 $818) '($180 $819) '($181 $820) '($182 $821) '('"d2.d_date" $822) '('"d2.d_date_id" $823) '('"d2.d_date_sk" $824) '('"d2.d_day_name" $825) '('"d2.d_dom" $826) '('"d2.d_dow" $827) '('"d2.d_first_dom" $828) '($183 $829) '($184 $830) '('"d2.d_fy_week_seq" $831) '('"d2.d_fy_year" $832) '('"d2.d_holiday" $833) '('"d2.d_last_dom" $834) '('"d2.d_month_seq" $835) '('"d2.d_moy" $836) '('"d2.d_qoy" $837) '($185 $838) '('"d2.d_quarter_seq" $839) '('"d2.d_same_day_lq" $840) '('"d2.d_same_day_ly" $841) '('"d2.d_week_seq" $842) '('"d2.d_weekend" $843) '('"d2.d_year" $844) '('"d3.d_current_day" $735) '($156 $736) '($157 $737) '($158 $738) '($159 $739) '('"d3.d_date" $740) '('"d3.d_date_id" $741) '('"d3.d_date_sk" $742) '('"d3.d_day_name" $743) '('"d3.d_dom" $744) '('"d3.d_dow" $745) '('"d3.d_first_dom" $746) '($160 $747) '($161 $748) '('"d3.d_fy_week_seq" $749) '('"d3.d_fy_year" $750) '('"d3.d_holiday" $751) '('"d3.d_last_dom" $752) '('"d3.d_month_seq" $753) '('"d3.d_moy" $754) '('"d3.d_qoy" $755) '($162 $756) '('"d3.d_quarter_seq" $757) '('"d3.d_same_day_lq" $758) '('"d3.d_same_day_ly" $759) '('"d3.d_week_seq" $760) '('"d3.d_weekend" $761) '('"d3.d_year" $762) '('"store.s_city" $763) '($82 $764) '($83 $765) '($84 $766) '('"store.s_country" $767) '('"store.s_county" $768) '($85 $769) '($86 $770) '($87 $771) '($88 $772) '($89 $773) '('"store.s_hours" $774) '('"store.s_manager" $775) '($90 $776) '($91 $777) '($92 $778) '($93 $779) '($94 $780) '($95 $781) '('"store.s_state" $782) '('"store.s_store_id" $783) '($96 $784) '('"store.s_store_sk" $785) '($97 $786) '($98 $787) '($99 $788) '($100 $789) '($101 $790) '('"store.s_zip" $791) '($186 $845) '($187 $846) '($188 $847) '($189 $848) '($190 $849) '($191 $850) '($192 $851) '($193 $852) '($194 $853) '($195 $854) '($196 $855) '($197 $856) '($198 $857) '($199 $858) '($200 $859) '($201 $860) '($202 $861) '($203 $862) '($204 $863) '($205 $864) '($58 $792) '($59 $793) '($60 $794) '($61 $795) '($62 $796) '($63 $797) '($64 $798) '($65 $799) '($66 $800) '($67 $801) '($68 $802) '($69 $803) '($70 $804) '($71 $805) '($72 $806) '($73 $807) '($74 $808) '($75 $809) '($76 $810) '($77 $811) '($78 $812) '($79 $813) '($80 $814)))))
))) '('('"_logical_id" '220069))))
(let $209 (DqStage '((DqCnUnionAll (TDqOutput $208 '0))) (lambda '($865) $865) '('('"_logical_id" '221705))))
(let $210 '($58 $59 $60 $61 $62 $63 $64 $65 $66 $67 $68 $69 $70 $71 $72 $73 $74 $75 $76 $77 $78 $79 $80 '"d1.d_current_day" $51 $52 $53 $54 '"d1.d_date" '"d1.d_date_id" '"d1.d_date_sk" '"d1.d_day_name" '"d1.d_dom" '"d1.d_dow" '"d1.d_first_dom" $55 $56 '"d1.d_fy_week_seq" '"d1.d_fy_year" '"d1.d_holiday" '"d1.d_last_dom" '"d1.d_month_seq" '"d1.d_moy" '"d1.d_qoy" $57 '"d1.d_quarter_seq" '"d1.d_same_day_lq" '"d1.d_same_day_ly" '"d1.d_week_seq" '"d1.d_weekend" '"d1.d_year" $186 $187 $188 $189 $190 $191 $192 $193 $194 $195 $196 $197 $198 $199 $200 $201 $202 $203 $204 $205 '"d2.d_current_day" $179 $180 $181 $182 '"d2.d_date" '"d2.d_date_id" '"d2.d_date_sk" '"d2.d_day_name" '"d2.d_dom" '"d2.d_dow" '"d2.d_first_dom" $183 $184 '"d2.d_fy_week_seq" '"d2.d_fy_year" '"d2.d_holiday" '"d2.d_last_dom" '"d2.d_month_seq" '"d2.d_moy" '"d2.d_qoy" $185 '"d2.d_quarter_seq" '"d2.d_same_day_lq" '"d2.d_same_day_ly" '"d2.d_week_seq" '"d2.d_weekend" '"d2.d_year" $122 $123 $124 $125 $126 $127 $128 $129 $130 $131 $132 $133 $134 $135 $136 $137 $138 $139 $140 $141 $142 $143 $144 $145 $146 $147 $148 $149 $150 $151 $152 $153 $154 $155 '"d3.d_current_day" $156 $157 $158 $159 '"d3.d_date" '"d3.d_date_id" '"d3.d_date_sk" '"d3.d_day_name" '"d3.d_dom" '"d3.d_dow" '"d3.d_first_dom" $160 $161 '"d3.d_fy_week_seq" '"d3.d_fy_year" '"d3.d_holiday" '"d3.d_last_dom" '"d3.d_month_seq" '"d3.d_moy" '"d3.d_qoy" $162 '"d3.d_quarter_seq" '"d3.d_same_day_lq" '"d3.d_same_day_ly" '"d3.d_week_seq" '"d3.d_weekend" '"d3.d_year" '"store.s_city" $82 $83 $84 '"store.s_country" '"store.s_county" $85 $86 $87 $88 $89 '"store.s_hours" '"store.s_manager" $90 $91 $92 $93 $94 $95 '"store.s_state" '"store.s_store_id" $96 '"store.s_store_sk" $97 $98 $99 $100 $101 '"store.s_zip"))
(let $211 '('('type) '('autoref) '('"columns" $210) '('"freezeColumns")))
(let $212 (ResPull! $12 $13 (Key) (DqCnResult (TDqOutput $209 '0) '()) $211 '"dq"))
(return (Commit! (Commit! $212 $13) (DataSink '"s3" '"yq-tpc-local")))
)
ulya-sidorina commented 3 months ago

CrossJoinToInner algorithm in DuckDB

https://github.com/duckdb/duckdb/blob/main/src/optimizer/pushdown/pushdown_cross_product.cpp

pavelvelikhov commented 3 months ago

Смотрите, имхо самое правильное решение:

Вообще исходное дерево cross-joins не трогать (тогда кстати можно расслабить условие и произвольное дерево брать, с любыми видами джоинов, да и вообще не стоит менять порядок который пользователь ввел).

Просто один за другим пушить предикат на максимальную глубину, но с учетом отношения эквивалентности аттрибутов. Тут правда надо аккуратно считать эквивалентность, если у нас в дереве разного вида джоины. Но мы уже это делаем: https://github.com/ydb-platform/ydb/blob/main/ydb/library/yql/dq/opt/dq_opt_join_hypergraph.h#L266

Или пока не заморачиваться и только деревья cross-joins поддерживать

qrort commented 3 months ago

I introduced a pragma RotateJoinTree="false"; If enabled in queries above, it yields the following results:

queries in this ticket: fixed

q8: no improvement. We need to investigate further, the last andTerm is and (substring(cast(s_zip as string),0,2) = substring(V1.ca_zip,0,2)) and maybe it is not possible to rewrite the cross join q14: all cross joins are rewritten into inner joins, but query still does not complete q25: fixed q29: does not reproduce without pragma (maybe gen_queries produces a query with reordered joins or and terms) q33: fixed q72: no cross joins in initial query q85: fixed