== Physical Plan ==
Execute SaveIntoDataSourceCommand (1)
+- SaveIntoDataSourceCommand (2)
+- Project (1137)
+- Project (1136)
+- Project (1135)
+- Project (1134)
+- Project (1133)
+- Project (1132)
+- Project (1131)
+- Project (1130)
+- Project (1129)
+- Join (1128)
:- Project (355)
: +- Project (354)
: +- Join (353)
: :- Project (170)
: : +- Project (169)
: : +- Project (168)
: : +- Project (167)
: : +- Project (166)
: : +- Project (165)
: : +- Join (164)
: : :- Project (22)
: : : +- Project (21)
: : : +- Project (20)
: : : +- Project (19)
: : : +- Generate (18)
: : : +- Project (17)
: : : +- Generate (16)
: : : +- Project (15)
: : : +- Join (14)
: : : :- Project (11)
: : : : +- Join (10)
: : : : :- Project (5)
: : : : : +- RepartitionByExpression (4)
: : : : : +- LogicalRelation (3)
: : : : +- Project (9)
: : : : +- Project (8)
: : : : +- Repartition (7)
: : : : +- LogicalRelation (6)
: : : +- Repartition (13)
: : : +- LogicalRelation (12)
: : +- Project (163)
: : +- Aggregate (162)
: : +- Project (161)
: : +- Join (160)
: : :- Project (90)
: : : +- Filter (89)
: : : +- Join (88)
: : : :- Filter (67)
: : : : +- Project (66)
: : : : +- Project (65)
: : : : +- Generate (64)
: : : : +- Project (63)
: : : : +- Aggregate (62)
: : : : +- Project (61)
: : : : +- Generate (60)
: : : : +- Join (59)
: : : : :- Repartition (24)
: : : : : +- LogicalRelation (23)
: : : : +- Project (58)
: : : : +- Join (57)
: : : : :- Project (34)
: : : : : +- Project (33)
: : : : : +- Generate (32)
: : : : : +- Project (31)
: : : : : +- Generate (30)
: : : : : +- Project (29)
: : : : : +- Project (28)
: : : : : +- Filter (27)
: : : : : +- Repartition (26)
: : : : : +- LogicalRelation (25)
: : : : +- Deduplicate (56)
: : : : +- Project (55)
: : : : +- Project (54)
: : : : +- Project (53)
: : : : +- Project (52)
: : : : +- Project (51)
: : : : +- Generate (50)
: : : : +- Project (49)
: : : : +- Generate (48)
: : : : +- Project (47)
: : : : +- Join (46)
: : : : :- Project (43)
: : : : : +- Join (42)
: : : : : :- Project (37)
: : : : : : +- RepartitionByExpression (36)
: : : : : : +- LogicalRelation (35)
: : : : : +- Project (41)
: : : : : +- Project (40)
: : : : : +- Repartition (39)
: : : : : +- LogicalRelation (38)
: : : : +- Repartition (45)
: : : : +- LogicalRelation (44)
: : : +- Project (87)
: : : +- Project (86)
: : : +- Project (85)
: : : +- Project (84)
: : : +- Generate (83)
: : : +- Project (82)
: : : +- Generate (81)
: : : +- Project (80)
: : : +- Join (79)
: : : :- Project (76)
: : : : +- Join (75)
: : : : :- Project (70)
: : : : : +- RepartitionByExpression (69)
: : : : : +- LogicalRelation (68)
: : : : +- Project (74)
: : : : +- Project (73)
: : : : +- Repartition (72)
: : : : +- LogicalRelation (71)
: : : +- Repartition (78)
: : : +- LogicalRelation (77)
: : +- Aggregate (159)
: : +- Project (158)
: : +- Filter (157)
: : +- Join (156)
: : :- Filter (135)
: : : +- Project (134)
: : : +- Project (133)
: : : +- Generate (132)
: : : +- Project (131)
: : : +- Aggregate (130)
: : : +- Project (129)
: : : +- Generate (128)
: : : +- Join (127)
: : : :- Repartition (92)
: : : : +- LogicalRelation (91)
: : : +- Project (126)
: : : +- Join (125)
: : : :- Project (102)
: : : : +- Project (101)
: : : : +- Generate (100)
: : : : +- Project (99)
: : : : +- Generate (98)
: : : : +- Project (97)
: : : : +- Project (96)
: : : : +- Filter (95)
: : : : +- Repartition (94)
: : : : +- LogicalRelation (93)
: : : +- Deduplicate (124)
: : : +- Project (123)
: : : +- Project (122)
: : : +- Project (121)
: : : +- Project (120)
: : : +- Project (119)
: : : +- Generate (118)
: : : +- Project (117)
: : : +- Generate (116)
: : : +- Project (115)
: : : +- Join (114)
: : : :- Project (111)
: : : : +- Join (110)
: : : : :- Project (105)
: : : : : +- RepartitionByExpression (104)
: : : : : +- LogicalRelation (103)
: : : : +- Project (109)
: : : : +- Project (108)
: : : : +- Repartition (107)
: : : : +- LogicalRelation (106)
: : : +- Repartition (113)
: : : +- LogicalRelation (112)
: : +- Project (155)
: : +- Project (154)
: : +- Project (153)
: : +- Project (152)
: : +- Generate (151)
: : +- Project (150)
: : +- Generate (149)
: : +- Project (148)
: : +- Join (147)
: : :- Project (144)
: : : +- Join (143)
: : : :- Project (138)
: : : : +- RepartitionByExpression (137)
: : : : +- LogicalRelation (136)
: : : +- Project (142)
: : : +- Project (141)
: : : +- Repartition (140)
: : : +- LogicalRelation (139)
: : +- Repartition (146)
: : +- LogicalRelation (145)
: +- SerializeFromObject (352)
: +- MapElements (351)
: +- DeserializeToObject (350)
: +- Project (349)
: +- Project (348)
: +- Join (347)
: :- SubqueryAlias (343)
: : +- Aggregate (342)
: : +- Project (341)
: : +- Join (340)
: : :- Project (338)
: : : +- Project (337)
: : : +- Project (336)
: : : +- Project (335)
: : : +- Project (334)
: : : +- Project (333)
: : : +- Join (332)
: : : :- Project (190)
: : : : +- Project (189)
: : : : +- Project (188)
: : : : +- Project (187)
: : : : +- Generate (186)
: : : : +- Project (185)
: : : : +- Generate (184)
: : : : +- Project (183)
: : : : +- Join (182)
: : : : :- Project (179)
: : : : : +- Join (178)
: : : : : :- Project (173)
: : : : : : +- RepartitionByExpression (172)
: : : : : : +- LogicalRelation (171)
: : : : : +- Project (177)
: : : : : +- Project (176)
: : : : : +- Repartition (175)
: : : : : +- LogicalRelation (174)
: : : : +- Repartition (181)
: : : : +- LogicalRelation (180)
: : : +- Project (331)
: : : +- Aggregate (330)
: : : +- Project (329)
: : : +- Join (328)
: : : :- Project (258)
: : : : +- Filter (257)
: : : : +- Join (256)
: : : : :- Filter (235)
: : : : : +- Project (234)
: : : : : +- Project (233)
: : : : : +- Generate (232)
: : : : : +- Project (231)
: : : : : +- Aggregate (230)
: : : : : +- Project (229)
: : : : : +- Generate (228)
: : : : : +- Join (227)
: : : : : :- Repartition (192)
: : : : : : +- LogicalRelation (191)
: : : : : +- Project (226)
: : : : : +- Join (225)
: : : : : :- Project (202)
: : : : : : +- Project (201)
: : : : : : +- Generate (200)
: : : : : : +- Project (199)
: : : : : : +- Generate (198)
: : : : : : +- Project (197)
: : : : : : +- Project (196)
: : : : : : +- Filter (195)
: : : : : : +- Repartition (194)
: : : : : : +- LogicalRelation (193)
: : : : : +- Deduplicate (224)
: : : : : +- Project (223)
: : : : : +- Project (222)
: : : : : +- Project (221)
: : : : : +- Project (220)
: : : : : +- Project (219)
: : : : : +- Generate (218)
: : : : : +- Project (217)
: : : : : +- Generate (216)
: : : : : +- Project (215)
: : : : : +- Join (214)
: : : : : :- Project (211)
: : : : : : +- Join (210)
: : : : : : :- Project (205)
: : : : : : : +- RepartitionByExpression (204)
: : : : : : : +- LogicalRelation (203)
: : : : : : +- Project (209)
: : : : : : +- Project (208)
: : : : : : +- Repartition (207)
: : : : : : +- LogicalRelation (206)
: : : : : +- Repartition (213)
: : : : : +- LogicalRelation (212)
: : : : +- Project (255)
: : : : +- Project (254)
: : : : +- Project (253)
: : : : +- Project (252)
: : : : +- Generate (251)
: : : : +- Project (250)
: : : : +- Generate (249)
: : : : +- Project (248)
: : : : +- Join (247)
: : : : :- Project (244)
: : : : : +- Join (243)
: : : : : :- Project (238)
: : : : : : +- RepartitionByExpression (237)
: : : : : : +- LogicalRelation (236)
: : : : : +- Project (242)
: : : : : +- Project (241)
: : : : : +- Repartition (240)
: : : : : +- LogicalRelation (239)
: : : : +- Repartition (246)
: : : : +- LogicalRelation (245)
: : : +- Aggregate (327)
: : : +- Project (326)
: : : +- Filter (325)
: : : +- Join (324)
: : : :- Filter (303)
: : : : +- Project (302)
: : : : +- Project (301)
: : : : +- Generate (300)
: : : : +- Project (299)
: : : : +- Aggregate (298)
: : : : +- Project (297)
: : : : +- Generate (296)
: : : : +- Join (295)
: : : : :- Repartition (260)
: : : : : +- LogicalRelation (259)
: : : : +- Project (294)
: : : : +- Join (293)
: : : : :- Project (270)
: : : : : +- Project (269)
: : : : : +- Generate (268)
: : : : : +- Project (267)
: : : : : +- Generate (266)
: : : : : +- Project (265)
: : : : : +- Project (264)
: : : : : +- Filter (263)
: : : : : +- Repartition (262)
: : : : : +- LogicalRelation (261)
: : : : +- Deduplicate (292)
: : : : +- Project (291)
: : : : +- Project (290)
: : : : +- Project (289)
: : : : +- Project (288)
: : : : +- Project (287)
: : : : +- Generate (286)
: : : : +- Project (285)
: : : : +- Generate (284)
: : : : +- Project (283)
: : : : +- Join (282)
: : : : :- Project (279)
: : : : : +- Join (278)
: : : : : :- Project (273)
: : : : : : +- RepartitionByExpression (272)
: : : : : : +- LogicalRelation (271)
: : : : : +- Project (277)
: : : : : +- Project (276)
: : : : : +- Repartition (275)
: : : : : +- LogicalRelation (274)
: : : : +- Repartition (281)
: : : : +- LogicalRelation (280)
: : : +- Project (323)
: : : +- Project (322)
: : : +- Project (321)
: : : +- Project (320)
: : : +- Generate (319)
: : : +- Project (318)
: : : +- Generate (317)
: : : +- Project (316)
: : : +- Join (315)
: : : :- Project (312)
: : : : +- Join (311)
: : : : :- Project (306)
: : : : : +- RepartitionByExpression (305)
: : : : : +- LogicalRelation (304)
: : : : +- Project (310)
: : : : +- Project (309)
: : : : +- Repartition (308)
: : : : +- LogicalRelation (307)
: : : +- Repartition (314)
: : : +- LogicalRelation (313)
: : +- LogicalRelation (339)
: +- Project (346)
: +- Repartition (345)
: +- LogicalRelation (344)
+- Aggregate (1127)
+- Union (1126)
:- Filter (760)
: +- Aggregate (759)
: +- Project (758)
: +- Project (757)
: +- Window (756)
: +- Project (755)
: +- Project (754)
: +- Project (753)
: +- Join (752)
: :- Project (745)
: : +- Join (744)
: : :- Project (708)
: : : +- Project (707)
: : : +- Join (706)
: : : :- Project (523)
: : : : +- Project (522)
: : : : +- Project (521)
: : : : +- Project (520)
: : : : +- Project (519)
: : : : +- Project (518)
: : : : +- Join (517)
: : : : :- Project (375)
: : : : : +- Project (374)
: : : : : +- Project (373)
: : : : : +- Project (372)
: : : : : +- Generate (371)
: : : : : +- Project (370)
: : : : : +- Generate (369)
: : : : : +- Project (368)
: : : : : +- Join (367)
: : : : : :- Project (364)
: : : : : : +- Join (363)
: : : : : : :- Project (358)
: : : : : : : +- RepartitionByExpression (357)
: : : : : : : +- LogicalRelation (356)
: : : : : : +- Project (362)
: : : : : : +- Project (361)
: : : : : : +- Repartition (360)
: : : : : : +- LogicalRelation (359)
: : : : : +- Repartition (366)
: : : : : +- LogicalRelation (365)
: : : : +- Project (516)
: : : : +- Aggregate (515)
: : : : +- Project (514)
: : : : +- Join (513)
: : : : :- Project (443)
: : : : : +- Filter (442)
: : : : : +- Join (441)
: : : : : :- Filter (420)
: : : : : : +- Project (419)
: : : : : : +- Project (418)
: : : : : : +- Generate (417)
: : : : : : +- Project (416)
: : : : : : +- Aggregate (415)
: : : : : : +- Project (414)
: : : : : : +- Generate (413)
: : : : : : +- Join (412)
: : : : : : :- Repartition (377)
: : : : : : : +- LogicalRelation (376)
: : : : : : +- Project (411)
: : : : : : +- Join (410)
: : : : : : :- Project (387)
: : : : : : : +- Project (386)
: : : : : : : +- Generate (385)
: : : : : : : +- Project (384)
: : : : : : : +- Generate (383)
: : : : : : : +- Project (382)
: : : : : : : +- Project (381)
: : : : : : : +- Filter (380)
: : : : : : : +- Repartition (379)
: : : : : : : +- LogicalRelation (378)
: : : : : : +- Deduplicate (409)
: : : : : : +- Project (408)
: : : : : : +- Project (407)
: : : : : : +- Project (406)
: : : : : : +- Project (405)
: : : : : : +- Project (404)
: : : : : : +- Generate (403)
: : : : : : +- Project (402)
: : : : : : +- Generate (401)
: : : : : : +- Project (400)
: : : : : : +- Join (399)
: : : : : : :- Project (396)
: : : : : : : +- Join (395)
: : : : : : : :- Project (390)
: : : : : : : : +- RepartitionByExpression (389)
: : : : : : : : +- LogicalRelation (388)
: : : : : : : +- Project (394)
: : : : : : : +- Project (393)
: : : : : : : +- Repartition (392)
: : : : : : : +- LogicalRelation (391)
: : : : : : +- Repartition (398)
: : : : : : +- LogicalRelation (397)
: : : : : +- Project (440)
: : : : : +- Project (439)
: : : : : +- Project (438)
: : : : : +- Project (437)
: : : : : +- Generate (436)
: : : : : +- Project (435)
: : : : : +- Generate (434)
: : : : : +- Project (433)
: : : : : +- Join (432)
: : : : : :- Project (429)
: : : : : : +- Join (428)
: : : : : : :- Project (423)
: : : : : : : +- RepartitionByExpression (422)
: : : : : : : +- LogicalRelation (421)
: : : : : : +- Project (427)
: : : : : : +- Project (426)
: : : : : : +- Repartition (425)
: : : : : : +- LogicalRelation (424)
: : : : : +- Repartition (431)
: : : : : +- LogicalRelation (430)
: : : : +- Aggregate (512)
: : : : +- Project (511)
: : : : +- Filter (510)
: : : : +- Join (509)
: : : : :- Filter (488)
: : : : : +- Project (487)
: : : : : +- Project (486)
: : : : : +- Generate (485)
: : : : : +- Project (484)
: : : : : +- Aggregate (483)
: : : : : +- Project (482)
: : : : : +- Generate (481)
: : : : : +- Join (480)
: : : : : :- Repartition (445)
: : : : : : +- LogicalRelation (444)
: : : : : +- Project (479)
: : : : : +- Join (478)
: : : : : :- Project (455)
: : : : : : +- Project (454)
: : : : : : +- Generate (453)
: : : : : : +- Project (452)
: : : : : : +- Generate (451)
: : : : : : +- Project (450)
: : : : : : +- Project (449)
: : : : : : +- Filter (448)
: : : : : : +- Repartition (447)
: : : : : : +- LogicalRelation (446)
: : : : : +- Deduplicate (477)
: : : : : +- Project (476)
: : : : : +- Project (475)
: : : : : +- Project (474)
: : : : : +- Project (473)
: : : : : +- Project (472)
: : : : : +- Generate (471)
: : : : : +- Project (470)
: : : : : +- Generate (469)
: : : : : +- Project (468)
: : : : : +- Join (467)
: : : : : :- Project (464)
: : : : : : +- Join (463)
: : : : : : :- Project (458)
: : : : : : : +- RepartitionByExpression (457)
: : : : : : : +- LogicalRelation (456)
: : : : : : +- Project (462)
: : : : : : +- Project (461)
: : : : : : +- Repartition (460)
: : : : : : +- LogicalRelation (459)
: : : : : +- Repartition (466)
: : : : : +- LogicalRelation (465)
: : : : +- Project (508)
: : : : +- Project (507)
: : : : +- Project (506)
: : : : +- Project (505)
: : : : +- Generate (504)
: : : : +- Project (503)
: : : : +- Generate (502)
: : : : +- Project (501)
: : : : +- Join (500)
: : : : :- Project (497)
: : : : : +- Join (496)
: : : : : :- Project (491)
: : : : : : +- RepartitionByExpression (490)
: : : : : : +- LogicalRelation (489)
: : : : : +- Project (495)
: : : : : +- Project (494)
: : : : : +- Repartition (493)
: : : : : +- LogicalRelation (492)
: : : : +- Repartition (499)
: : : : +- LogicalRelation (498)
: : : +- SerializeFromObject (705)
: : : +- MapElements (704)
: : : +- DeserializeToObject (703)
: : : +- Project (702)
: : : +- Project (701)
: : : +- Join (700)
: : : :- SubqueryAlias (696)
: : : : +- Aggregate (695)
: : : : +- Project (694)
: : : : +- Join (693)
: : : : :- Project (691)
: : : : : +- Project (690)
: : : : : +- Project (689)
: : : : : +- Project (688)
: : : : : +- Project (687)
: : : : : +- Project (686)
: : : : : +- Join (685)
: : : : : :- Project (543)
: : : : : : +- Project (542)
: : : : : : +- Project (541)
: : : : : : +- Project (540)
: : : : : : +- Generate (539)
: : : : : : +- Project (538)
: : : : : : +- Generate (537)
: : : : : : +- Project (536)
: : : : : : +- Join (535)
: : : : : : :- Project (532)
: : : : : : : +- Join (531)
: : : : : : : :- Project (526)
: : : : : : : : +- RepartitionByExpression (525)
: : : : : : : : +- LogicalRelation (524)
: : : : : : : +- Project (530)
: : : : : : : +- Project (529)
: : : : : : : +- Repartition (528)
: : : : : : : +- LogicalRelation (527)
: : : : : : +- Repartition (534)
: : : : : : +- LogicalRelation (533)
: : : : : +- Project (684)
: : : : : +- Aggregate (683)
: : : : : +- Project (682)
: : : : : +- Join (681)
: : : : : :- Project (611)
: : : : : : +- Filter (610)
: : : : : : +- Join (609)
: : : : : : :- Filter (588)
: : : : : : : +- Project (587)
: : : : : : : +- Project (586)
: : : : : : : +- Generate (585)
: : : : : : : +- Project (584)
: : : : : : : +- Aggregate (583)
: : : : : : : +- Project (582)
: : : : : : : +- Generate (581)
: : : : : : : +- Join (580)
: : : : : : : :- Repartition (545)
: : : : : : : : +- LogicalRelation (544)
: : : : : : : +- Project (579)
: : : : : : : +- Join (578)
: : : : : : : :- Project (555)
: : : : : : : : +- Project (554)
: : : : : : : : +- Generate (553)
: : : : : : : : +- Project (552)
: : : : : : : : +- Generate (551)
: : : : : : : : +- Project (550)
: : : : : : : : +- Project (549)
: : : : : : : : +- Filter (548)
: : : : : : : : +- Repartition (547)
: : : : : : : : +- LogicalRelation (546)
: : : : : : : +- Deduplicate (577)
: : : : : : : +- Project (576)
: : : : : : : +- Project (575)
: : : : : : : +- Project (574)
: : : : : : : +- Project (573)
: : : : : : : +- Project (572)
: : : : : : : +- Generate (571)
: : : : : : : +- Project (570)
: : : : : : : +- Generate (569)
: : : : : : : +- Project (568)
: : : : : : : +- Join (567)
: : : : : : : :- Project (564)
: : : : : : : : +- Join (563)
: : : : : : : : :- Project (558)
: : : : : : : : : +- RepartitionByExpression (557)
: : : : : : : : : +- LogicalRelation (556)
: : : : : : : : +- Project (562)
: : : : : : : : +- Project (561)
: : : : : : : : +- Repartition (560)
: : : : : : : : +- LogicalRelation (559)
: : : : : : : +- Repartition (566)
: : : : : : : +- LogicalRelation (565)
: : : : : : +- Project (608)
: : : : : : +- Project (607)
: : : : : : +- Project (606)
: : : : : : +- Project (605)
: : : : : : +- Generate (604)
: : : : : : +- Project (603)
: : : : : : +- Generate (602)
: : : : : : +- Project (601)
: : : : : : +- Join (600)
: : : : : : :- Project (597)
: : : : : : : +- Join (596)
: : : : : : : :- Project (591)
: : : : : : : : +- RepartitionByExpression (590)
: : : : : : : : +- LogicalRelation (589)
: : : : : : : +- Project (595)
: : : : : : : +- Project (594)
: : : : : : : +- Repartition (593)
: : : : : : : +- LogicalRelation (592)
: : : : : : +- Repartition (599)
: : : : : : +- LogicalRelation (598)
: : : : : +- Aggregate (680)
: : : : : +- Project (679)
: : : : : +- Filter (678)
: : : : : +- Join (677)
: : : : : :- Filter (656)
: : : : : : +- Project (655)
: : : : : : +- Project (654)
: : : : : : +- Generate (653)
: : : : : : +- Project (652)
: : : : : : +- Aggregate (651)
: : : : : : +- Project (650)
: : : : : : +- Generate (649)
: : : : : : +- Join (648)
: : : : : : :- Repartition (613)
: : : : : : : +- LogicalRelation (612)
: : : : : : +- Project (647)
: : : : : : +- Join (646)
: : : : : : :- Project (623)
: : : : : : : +- Project (622)
: : : : : : : +- Generate (621)
: : : : : : : +- Project (620)
: : : : : : : +- Generate (619)
: : : : : : : +- Project (618)
: : : : : : : +- Project (617)
: : : : : : : +- Filter (616)
: : : : : : : +- Repartition (615)
: : : : : : : +- LogicalRelation (614)
: : : : : : +- Deduplicate (645)
: : : : : : +- Project (644)
: : : : : : +- Project (643)
: : : : : : +- Project (642)
: : : : : : +- Project (641)
: : : : : : +- Project (640)
: : : : : : +- Generate (639)
: : : : : : +- Project (638)
: : : : : : +- Generate (637)
: : : : : : +- Project (636)
: : : : : : +- Join (635)
: : : : : : :- Project (632)
: : : : : : : +- Join (631)
: : : : : : : :- Project (626)
: : : : : : : : +- RepartitionByExpression (625)
: : : : : : : : +- LogicalRelation (624)
: : : : : : : +- Project (630)
: : : : : : : +- Project (629)
: : : : : : : +- Repartition (628)
: : : : : : : +- LogicalRelation (627)
: : : : : : +- Repartition (634)
: : : : : : +- LogicalRelation (633)
: : : : : +- Project (676)
: : : : : +- Project (675)
: : : : : +- Project (674)
: : : : : +- Project (673)
: : : : : +- Generate (672)
: : : : : +- Project (671)
: : : : : +- Generate (670)
: : : : : +- Project (669)
: : : : : +- Join (668)
: : : : : :- Project (665)
: : : : : : +- Join (664)
: : : : : : :- Project (659)
: : : : : : : +- RepartitionByExpression (658)
: : : : : : : +- LogicalRelation (657)
: : : : : : +- Project (663)
: : : : : : +- Project (662)
: : : : : : +- Repartition (661)
: : : : : : +- LogicalRelation (660)
: : : : : +- Repartition (667)
: : : : : +- LogicalRelation (666)
: : : : +- LogicalRelation (692)
: : : +- Project (699)
: : : +- Repartition (698)
: : : +- LogicalRelation (697)
: : +- Project (743)
: : +- Project (742)
: : +- Join (741)
: : :- Project (718)
: : : +- Project (717)
: : : +- Generate (716)
: : : +- Project (715)
: : : +- Generate (714)
: : : +- Project (713)
: : : +- Project (712)
: : : +- Filter (711)
: : : +- Repartition (710)
: : : +- LogicalRelation (709)
: : +- Deduplicate (740)
: : +- Project (739)
: : +- Project (738)
: : +- Project (737)
: : +- Project (736)
: : +- Project (735)
: : +- Generate (734)
: : +- Project (733)
: : +- Generate (732)
: : +- Project (731)
: : +- Join (730)
: : :- Project (727)
: : : +- Join (726)
: : : :- Project (721)
: : : : +- RepartitionByExpression (720)
: : : : +- LogicalRelation (719)
: : : +- Project (725)
: : : +- Project (724)
: : : +- Repartition (723)
: : : +- LogicalRelation (722)
: : +- Repartition (729)
: : +- LogicalRelation (728)
: +- Project (751)
: +- Filter (750)
: +- Project (749)
: +- Generate (748)
: +- Repartition (747)
: +- LogicalRelation (746)
+- Filter (1125)
+- Aggregate (1124)
+- Project (1123)
+- Project (1122)
+- Project (1121)
+- Join (1120)
:- Project (1113)
: +- Project (1112)
: +- Join (1111)
: :- Project (928)
: : +- Project (927)
: : +- Project (926)
: : +- Project (925)
: : +- Project (924)
: : +- Project (923)
: : +- Join (922)
: : :- Project (780)
: : : +- Project (779)
: : : +- Project (778)
: : : +- Project (777)
: : : +- Generate (776)
: : : +- Project (775)
: : : +- Generate (774)
: : : +- Project (773)
: : : +- Join (772)
: : : :- Project (769)
: : : : +- Join (768)
: : : : :- Project (763)
: : : : : +- RepartitionByExpression (762)
: : : : : +- LogicalRelation (761)
: : : : +- Project (767)
: : : : +- Project (766)
: : : : +- Repartition (765)
: : : : +- LogicalRelation (764)
: : : +- Repartition (771)
: : : +- LogicalRelation (770)
: : +- Project (921)
: : +- Aggregate (920)
: : +- Project (919)
: : +- Join (918)
: : :- Project (848)
: : : +- Filter (847)
: : : +- Join (846)
: : : :- Filter (825)
: : : : +- Project (824)
: : : : +- Project (823)
: : : : +- Generate (822)
: : : : +- Project (821)
: : : : +- Aggregate (820)
: : : : +- Project (819)
: : : : +- Generate (818)
: : : : +- Join (817)
: : : : :- Repartition (782)
: : : : : +- LogicalRelation (781)
: : : : +- Project (816)
: : : : +- Join (815)
: : : : :- Project (792)
: : : : : +- Project (791)
: : : : : +- Generate (790)
: : : : : +- Project (789)
: : : : : +- Generate (788)
: : : : : +- Project (787)
: : : : : +- Project (786)
: : : : : +- Filter (785)
: : : : : +- Repartition (784)
: : : : : +- LogicalRelation (783)
: : : : +- Deduplicate (814)
: : : : +- Project (813)
: : : : +- Project (812)
: : : : +- Project (811)
: : : : +- Project (810)
: : : : +- Project (809)
: : : : +- Generate (808)
: : : : +- Project (807)
: : : : +- Generate (806)
: : : : +- Project (805)
: : : : +- Join (804)
: : : : :- Project (801)
: : : : : +- Join (800)
: : : : : :- Project (795)
: : : : : : +- RepartitionByExpression (794)
: : : : : : +- LogicalRelation (793)
: : : : : +- Project (799)
: : : : : +- Project (798)
: : : : : +- Repartition (797)
: : : : : +- LogicalRelation (796)
: : : : +- Repartition (803)
: : : : +- LogicalRelation (802)
: : : +- Project (845)
: : : +- Project (844)
: : : +- Project (843)
: : : +- Project (842)
: : : +- Generate (841)
: : : +- Project (840)
: : : +- Generate (839)
: : : +- Project (838)
: : : +- Join (837)
: : : :- Project (834)
: : : : +- Join (833)
: : : : :- Project (828)
: : : : : +- RepartitionByExpression (827)
: : : : : +- LogicalRelation (826)
: : : : +- Project (832)
: : : : +- Project (831)
: : : : +- Repartition (830)
: : : : +- LogicalRelation (829)
: : : +- Repartition (836)
: : : +- LogicalRelation (835)
: : +- Aggregate (917)
: : +- Project (916)
: : +- Filter (915)
: : +- Join (914)
: : :- Filter (893)
: : : +- Project (892)
: : : +- Project (891)
: : : +- Generate (890)
: : : +- Project (889)
: : : +- Aggregate (888)
: : : +- Project (887)
: : : +- Generate (886)
: : : +- Join (885)
: : : :- Repartition (850)
: : : : +- LogicalRelation (849)
: : : +- Project (884)
: : : +- Join (883)
: : : :- Project (860)
: : : : +- Project (859)
: : : : +- Generate (858)
: : : : +- Project (857)
: : : : +- Generate (856)
: : : : +- Project (855)
: : : : +- Project (854)
: : : : +- Filter (853)
: : : : +- Repartition (852)
: : : : +- LogicalRelation (851)
: : : +- Deduplicate (882)
: : : +- Project (881)
: : : +- Project (880)
: : : +- Project (879)
: : : +- Project (878)
: : : +- Project (877)
: : : +- Generate (876)
: : : +- Project (875)
: : : +- Generate (874)
: : : +- Project (873)
: : : +- Join (872)
: : : :- Project (869)
: : : : +- Join (868)
: : : : :- Project (863)
: : : : : +- RepartitionByExpression (862)
: : : : : +- LogicalRelation (861)
: : : : +- Project (867)
: : : : +- Project (866)
: : : : +- Repartition (865)
: : : : +- LogicalRelation (864)
: : : +- Repartition (871)
: : : +- LogicalRelation (870)
: : +- Project (913)
: : +- Project (912)
: : +- Project (911)
: : +- Project (910)
: : +- Generate (909)
: : +- Project (908)
: : +- Generate (907)
: : +- Project (906)
: : +- Join (905)
: : :- Project (902)
: : : +- Join (901)
: : : :- Project (896)
: : : : +- RepartitionByExpression (895)
: : : : +- LogicalRelation (894)
: : : +- Project (900)
: : : +- Project (899)
: : : +- Repartition (898)
: : : +- LogicalRelation (897)
: : +- Repartition (904)
: : +- LogicalRelation (903)
: +- SerializeFromObject (1110)
: +- MapElements (1109)
: +- DeserializeToObject (1108)
: +- Project (1107)
: +- Project (1106)
: +- Join (1105)
: :- SubqueryAlias (1101)
: : +- Aggregate (1100)
: : +- Project (1099)
: : +- Join (1098)
: : :- Project (1096)
: : : +- Project (1095)
: : : +- Project (1094)
: : : +- Project (1093)
: : : +- Project (1092)
: : : +- Project (1091)
: : : +- Join (1090)
: : : :- Project (948)
: : : : +- Project (947)
: : : : +- Project (946)
: : : : +- Project (945)
: : : : +- Generate (944)
: : : : +- Project (943)
: : : : +- Generate (942)
: : : : +- Project (941)
: : : : +- Join (940)
: : : : :- Project (937)
: : : : : +- Join (936)
: : : : : :- Project (931)
: : : : : : +- RepartitionByExpression (930)
: : : : : : +- LogicalRelation (929)
: : : : : +- Project (935)
: : : : : +- Project (934)
: : : : : +- Repartition (933)
: : : : : +- LogicalRelation (932)
: : : : +- Repartition (939)
: : : : +- LogicalRelation (938)
: : : +- Project (1089)
: : : +- Aggregate (1088)
: : : +- Project (1087)
: : : +- Join (1086)
: : : :- Project (1016)
: : : : +- Filter (1015)
: : : : +- Join (1014)
: : : : :- Filter (993)
: : : : : +- Project (992)
: : : : : +- Project (991)
: : : : : +- Generate (990)
: : : : : +- Project (989)
: : : : : +- Aggregate (988)
: : : : : +- Project (987)
: : : : : +- Generate (986)
: : : : : +- Join (985)
: : : : : :- Repartition (950)
: : : : : : +- LogicalRelation (949)
: : : : : +- Project (984)
: : : : : +- Join (983)
: : : : : :- Project (960)
: : : : : : +- Project (959)
: : : : : : +- Generate (958)
: : : : : : +- Project (957)
: : : : : : +- Generate (956)
: : : : : : +- Project (955)
: : : : : : +- Project (954)
: : : : : : +- Filter (953)
: : : : : : +- Repartition (952)
: : : : : : +- LogicalRelation (951)
: : : : : +- Deduplicate (982)
: : : : : +- Project (981)
: : : : : +- Project (980)
: : : : : +- Project (979)
: : : : : +- Project (978)
: : : : : +- Project (977)
: : : : : +- Generate (976)
: : : : : +- Project (975)
: : : : : +- Generate (974)
: : : : : +- Project (973)
: : : : : +- Join (972)
: : : : : :- Project (969)
: : : : : : +- Join (968)
: : : : : : :- Project (963)
: : : : : : : +- RepartitionByExpression (962)
: : : : : : : +- LogicalRelation (961)
: : : : : : +- Project (967)
: : : : : : +- Project (966)
: : : : : : +- Repartition (965)
: : : : : : +- LogicalRelation (964)
: : : : : +- Repartition (971)
: : : : : +- LogicalRelation (970)
: : : : +- Project (1013)
: : : : +- Project (1012)
: : : : +- Project (1011)
: : : : +- Project (1010)
: : : : +- Generate (1009)
: : : : +- Project (1008)
: : : : +- Generate (1007)
: : : : +- Project (1006)
: : : : +- Join (1005)
: : : : :- Project (1002)
: : : : : +- Join (1001)
: : : : : :- Project (996)
: : : : : : +- RepartitionByExpression (995)
: : : : : : +- LogicalRelation (994)
: : : : : +- Project (1000)
: : : : : +- Project (999)
: : : : : +- Repartition (998)
: : : : : +- LogicalRelation (997)
: : : : +- Repartition (1004)
: : : : +- LogicalRelation (1003)
: : : +- Aggregate (1085)
: : : +- Project (1084)
: : : +- Filter (1083)
: : : +- Join (1082)
: : : :- Filter (1061)
: : : : +- Project (1060)
: : : : +- Project (1059)
: : : : +- Generate (1058)
: : : : +- Project (1057)
: : : : +- Aggregate (1056)
: : : : +- Project (1055)
: : : : +- Generate (1054)
: : : : +- Join (1053)
: : : : :- Repartition (1018)
: : : : : +- LogicalRelation (1017)
: : : : +- Project (1052)
: : : : +- Join (1051)
: : : : :- Project (1028)
: : : : : +- Project (1027)
: : : : : +- Generate (1026)
: : : : : +- Project (1025)
: : : : : +- Generate (1024)
: : : : : +- Project (1023)
: : : : : +- Project (1022)
: : : : : +- Filter (1021)
: : : : : +- Repartition (1020)
: : : : : +- LogicalRelation (1019)
: : : : +- Deduplicate (1050)
: : : : +- Project (1049)
: : : : +- Project (1048)
: : : : +- Project (1047)
: : : : +- Project (1046)
: : : : +- Project (1045)
: : : : +- Generate (1044)
: : : : +- Project (1043)
: : : : +- Generate (1042)
: : : : +- Project (1041)
: : : : +- Join (1040)
: : : : :- Project (1037)
: : : : : +- Join (1036)
: : : : : :- Project (1031)
: : : : : : +- RepartitionByExpression (1030)
: : : : : : +- LogicalRelation (1029)
: : : : : +- Project (1035)
: : : : : +- Project (1034)
: : : : : +- Repartition (1033)
: : : : : +- LogicalRelation (1032)
: : : : +- Repartition (1039)
: : : : +- LogicalRelation (1038)
: : : +- Project (1081)
: : : +- Project (1080)
: : : +- Project (1079)
: : : +- Project (1078)
: : : +- Generate (1077)
: : : +- Project (1076)
: : : +- Generate (1075)
: : : +- Project (1074)
: : : +- Join (1073)
: : : :- Project (1070)
: : : : +- Join (1069)
: : : : :- Project (1064)
: : : : : +- RepartitionByExpression (1063)
: : : : : +- LogicalRelation (1062)
: : : : +- Project (1068)
: : : : +- Project (1067)
: : : : +- Repartition (1066)
: : : : +- LogicalRelation (1065)
: : : +- Repartition (1072)
: : : +- LogicalRelation (1071)
: : +- LogicalRelation (1097)
: +- Project (1104)
: +- Repartition (1103)
: +- LogicalRelation (1102)
+- Project (1119)
+- Filter (1118)
+- Project (1117)
+- Generate (1116)
+- Repartition (1115)
+- LogicalRelation (1114)
(1) Execute SaveIntoDataSourceCommand
Output: []
(2) SaveIntoDataSourceCommand
Arguments: org.apache.spark.sql.delta.sources.DeltaDataSource@4fd82041, [path=hdlfs://7da5304c-1f57-47fa-b75a-0f0b4349c280.files.hdl.prod-eu20.hanacloud.ondemand.com:443/crp-order-quantity-kpi-service/internal/data-snapshot/10000000004/0_1_10000000004], Overwrite
(3) LogicalRelation
Arguments: parquet, [product#1127, plant#1128, orderDateTime#1129, planningStartDateTime#1130], false
(4) RepartitionByExpression
Arguments: [product#1127, plant#1128], 37
(5) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129]
(6) LogicalRelation
Arguments: parquet, [systemId#1158, internalUUID#1159, plant#1160, product#1161, blockedForReplenishmentStartingFrom#1162, productionAspect#1163, salesPlant#1164, listing#1165, sourceOfSupplyCategory#1166], false
(7) Repartition
Arguments: 37, true
(8) Project
Arguments: [systemId#1158, internalUUID#1159, plant#1160, product#1161, blockedForReplenishmentStartingFrom#1162, productionAspect#1163, salesPlant#1164, listing#1165, sourceOfSupplyCategory#1166, struct(systemId, systemId#1158, internalUUID, internalUUID#1159, plant, plant#1160, product, product#1161, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#1162, productionAspect, productionAspect#1163, salesPlant, salesPlant#1164, listing, listing#1165, sourceOfSupplyCategory, sourceOfSupplyCategory#1166) AS productPlant#1168]
(9) Project
Arguments: [productPlant#1168]
(10) Join
Arguments: LeftOuter, ((product#1127 <=> productPlant#1168.product.internalRefUUID) AND (plant#1128 <=> productPlant#1168.plant.internalRefUUID))
(11) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168]
(12) LogicalRelation
Arguments: parquet, [systemId#1193, internalUUID#1194, id#1195, displayId#1196, name#1197, baseUnitOfMeasure#1198, unitOfMeasures#1199, unitOfMeasureConversions#1200, productionAspect#1201, salesAspect#1202, procurementAspect#1203], false
(13) Repartition
Arguments: 37, true
(14) Join
Arguments: LeftOuter, (product#1127 = internalUUID#1194)
(15) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, systemId#1193, internalUUID#1194, id#1195, displayId#1196, name#1197, baseUnitOfMeasure#1198, unitOfMeasures#1199, unitOfMeasureConversions#1200, productionAspect#1201, salesAspect#1202, procurementAspect#1203, filter(unitOfMeasureConversions#1200, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#1168.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#1168.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#1198.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#1198.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#1205]
(16) Generate
Arguments: explode(filteredUnitOfMeasureConversions#1205.quantityNumerator), true, [quantityNumerator#1213]
(17) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, systemId#1193, internalUUID#1194, id#1195, displayId#1196, name#1197, baseUnitOfMeasure#1198, unitOfMeasures#1199, unitOfMeasureConversions#1200, productionAspect#1201, salesAspect#1202, procurementAspect#1203, filteredUnitOfMeasureConversions#1205, quantityNumerator#1213]
(18) Generate
Arguments: explode(filteredUnitOfMeasureConversions#1205.quantityDenominator), true, [quantityDenominator#1216]
(19) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, systemId#1193, internalUUID#1194, id#1195, displayId#1196, name#1197, baseUnitOfMeasure#1198, unitOfMeasures#1199, unitOfMeasureConversions#1200, productionAspect#1201, salesAspect#1202, procurementAspect#1203, filteredUnitOfMeasureConversions#1205, quantityNumerator#1213, quantityDenominator#1216]
(20) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, systemId#1193, internalUUID#1194, id#1195, displayId#1196, name#1197, baseUnitOfMeasure#1198, unitOfMeasures#1199, unitOfMeasureConversions#1200, productionAspect#1201, salesAspect#1202, procurementAspect#1203, filteredUnitOfMeasureConversions#1205, quantityNumerator#1213, quantityDenominator#1216, (cast(quantityNumerator#1213 as double) / cast(quantityDenominator#1216 as double)) AS outboundUnit#1217]
(21) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, systemId#1193, internalUUID#1194, id#1195, displayId#1196, name#1197, baseUnitOfMeasure#1198, unitOfMeasures#1199, unitOfMeasureConversions#1200, productionAspect#1201, salesAspect#1202, procurementAspect#1203, filteredUnitOfMeasureConversions#1205, quantityNumerator#1213, quantityDenominator#1216, CASE WHEN (isnull(outboundUnit#1217) OR (outboundUnit#1217 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#1217 END AS outboundUnit#1218]
(22) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218]
(23) LogicalRelation
Arguments: parquet, [systemId#1321, internalUUID#1322, product#1323, plant#1324, calculationDateTime#1325, stockQuantities#1326], false
(24) Repartition
Arguments: 37, true
(25) LogicalRelation
Arguments: parquet, [marketUnit#1241, description#1242, articleHierarchy#1243, defaultCurrency#1244, responsibilities#1245, replenishmentTypes#1246, distributionCenters#1247, assignedArticleHierarchyNodes#1248, minOrderQtySetting#1249, minOrderQtySettingInternal#1250, listingCheck#1251, odsSelection#1252, demandProfiles#1253, constraintProfiles#1254, optimizationProfiles#1255, orderGroupSplitProfiles#1256, supplierMinimumProfiles#1257, multipleRestrictionProfiles#1258, preferredUomSource#1259, handlingOfUnfulfilledDemands#1260, negligibleQuantitiesThreshold#1261, eventtype#1262], false
(26) Repartition
Arguments: 37, true
(27) Filter
Arguments: (marketUnit#1241 <=> 10000_OP_PERF)
(28) Project
Arguments: [marketUnit#1241, description#1242, articleHierarchy#1243, defaultCurrency#1244, responsibilities#1245, replenishmentTypes#1246, distributionCenters#1247, assignedArticleHierarchyNodes#1248, minOrderQtySetting#1249, minOrderQtySettingInternal#1250, listingCheck#1251, odsSelection#1252, demandProfiles#1253, constraintProfiles#1254, optimizationProfiles#1255, orderGroupSplitProfiles#1256, supplierMinimumProfiles#1257, multipleRestrictionProfiles#1258, preferredUomSource#1259, handlingOfUnfulfilledDemands#1260, negligibleQuantitiesThreshold#1261, eventtype#1262]
(29) Project
Arguments: [distributionCenters#1247]
(30) Generate
Arguments: explode(distributionCenters#1247), false, [distributionCenters#1265]
(31) Project
Arguments: [distributionCenters#1265]
(32) Generate
Arguments: explode(distributionCenters#1265.storageLocations), false, [storageLocations#1272]
(33) Project
Arguments: [distributionCenters#1265.id AS plantId#1266, distributionCenters#1265.internalRefUUID AS plantUuid#1267, storageLocations#1272]
(34) Project
Arguments: [plantId#1266, plantUuid#1267, storageLocations#1272.id AS storageLocId#1273, storageLocations#1272.internalRefUUID AS storageLocUuid#1274]
(35) LogicalRelation
Arguments: parquet, [product#1536, plant#1537, orderDateTime#1538, planningStartDateTime#1539], false
(36) RepartitionByExpression
Arguments: [product#1536, plant#1537], 37
(37) Project
Arguments: [product#1536, plant#1537, orderDateTime#1538]
(38) LogicalRelation
Arguments: parquet, [systemId#1540, internalUUID#1541, plant#1542, product#1543, blockedForReplenishmentStartingFrom#1544, productionAspect#1545, salesPlant#1546, listing#1547, sourceOfSupplyCategory#1548], false
(39) Repartition
Arguments: 37, true
(40) Project
Arguments: [systemId#1540, internalUUID#1541, plant#1542, product#1543, blockedForReplenishmentStartingFrom#1544, productionAspect#1545, salesPlant#1546, listing#1547, sourceOfSupplyCategory#1548, struct(systemId, systemId#1540, internalUUID, internalUUID#1541, plant, plant#1542, product, product#1543, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#1544, productionAspect, productionAspect#1545, salesPlant, salesPlant#1546, listing, listing#1547, sourceOfSupplyCategory, sourceOfSupplyCategory#1548) AS productPlant#1549]
(41) Project
Arguments: [productPlant#1549]
(42) Join
Arguments: LeftOuter, ((product#1536 <=> productPlant#1549.product.internalRefUUID) AND (plant#1537 <=> productPlant#1549.plant.internalRefUUID))
(43) Project
Arguments: [product#1536, plant#1537, orderDateTime#1538, productPlant#1549]
(44) LogicalRelation
Arguments: parquet, [systemId#1550, internalUUID#1551, id#1552, displayId#1553, name#1554, baseUnitOfMeasure#1555, unitOfMeasures#1556, unitOfMeasureConversions#1557, productionAspect#1558, salesAspect#1559, procurementAspect#1560], false
(45) Repartition
Arguments: 37, true
(46) Join
Arguments: LeftOuter, (product#1536 = internalUUID#1551)
(47) Project
Arguments: [product#1536, plant#1537, orderDateTime#1538, productPlant#1549, systemId#1550, internalUUID#1551, id#1552, displayId#1553, name#1554, baseUnitOfMeasure#1555, unitOfMeasures#1556, unitOfMeasureConversions#1557, productionAspect#1558, salesAspect#1559, procurementAspect#1560, filter(unitOfMeasureConversions#1557, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#1549.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#1549.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#1555.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#1555.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#1561]
(48) Generate
Arguments: explode(filteredUnitOfMeasureConversions#1561.quantityNumerator), true, [quantityNumerator#1562]
(49) Project
Arguments: [product#1536, plant#1537, orderDateTime#1538, productPlant#1549, systemId#1550, internalUUID#1551, id#1552, displayId#1553, name#1554, baseUnitOfMeasure#1555, unitOfMeasures#1556, unitOfMeasureConversions#1557, productionAspect#1558, salesAspect#1559, procurementAspect#1560, filteredUnitOfMeasureConversions#1561, quantityNumerator#1562]
(50) Generate
Arguments: explode(filteredUnitOfMeasureConversions#1561.quantityDenominator), true, [quantityDenominator#1563]
(51) Project
Arguments: [product#1536, plant#1537, orderDateTime#1538, productPlant#1549, systemId#1550, internalUUID#1551, id#1552, displayId#1553, name#1554, baseUnitOfMeasure#1555, unitOfMeasures#1556, unitOfMeasureConversions#1557, productionAspect#1558, salesAspect#1559, procurementAspect#1560, filteredUnitOfMeasureConversions#1561, quantityNumerator#1562, quantityDenominator#1563]
(52) Project
Arguments: [product#1536, plant#1537, orderDateTime#1538, productPlant#1549, systemId#1550, internalUUID#1551, id#1552, displayId#1553, name#1554, baseUnitOfMeasure#1555, unitOfMeasures#1556, unitOfMeasureConversions#1557, productionAspect#1558, salesAspect#1559, procurementAspect#1560, filteredUnitOfMeasureConversions#1561, quantityNumerator#1562, quantityDenominator#1563, (cast(quantityNumerator#1562 as double) / cast(quantityDenominator#1563 as double)) AS outboundUnit#1564]
(53) Project
Arguments: [product#1536, plant#1537, orderDateTime#1538, productPlant#1549, systemId#1550, internalUUID#1551, id#1552, displayId#1553, name#1554, baseUnitOfMeasure#1555, unitOfMeasures#1556, unitOfMeasureConversions#1557, productionAspect#1558, salesAspect#1559, procurementAspect#1560, filteredUnitOfMeasureConversions#1561, quantityNumerator#1562, quantityDenominator#1563, CASE WHEN (isnull(outboundUnit#1564) OR (outboundUnit#1564 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#1564 END AS outboundUnit#1565]
(54) Project
Arguments: [product#1536, plant#1537, orderDateTime#1538, productPlant#1549, outboundUnit#1565]
(55) Project
Arguments: [plant#1537]
(56) Deduplicate
Arguments: [plant#1537]
(57) Join
Arguments: Inner, (plantUuid#1267 = plant#1537)
(58) Project
Arguments: [plantId#1266, plantUuid#1267, storageLocId#1273, storageLocUuid#1274]
(59) Join
Arguments: Inner, (plant#1324.internalRefUUID <=> plantUuid#1267)
(60) Generate
Arguments: explode(filter(stockQuantities#1326, lambdafunction(((lambda x#1330.storageLocation.internalRefUuid = storageLocUuid#1274) AND (lambda x#1330.storageLocation.Id = storageLocId#1273)), lambda x#1330, false))), false, [stockQuantity#1331]
(61) Project
Arguments: [systemId#1321, internalUUID#1322, product#1323, plant#1324, calculationDateTime#1325, stockQuantities#1326, plantId#1266, plantUuid#1267, storageLocId#1273, storageLocUuid#1274, stockQuantity#1331]
(62) Aggregate
Arguments: [plantUuid#1267, internalUUID#1322, plant#1324, product#1323, systemId#1321], [plantUuid#1267, internalUUID#1322, plant#1324, product#1323, systemId#1321, first(calculationDateTime#1325, false) AS calculationDateTime#1332, collect_list(stockQuantity#1331, 0, 0) AS stockQuantities#1333]
(63) Project
Arguments: [systemId#1321, internalUUID#1322, product#1323, plant#1324, calculationDateTime#1332, stockQuantities#1333]
(64) Generate
Arguments: explode(stockQuantities#1333), false, [stockQuantity#1348]
(65) Project
Arguments: [systemId#1321, internalUUID#1322, product#1323, plant#1324, calculationDateTime#1332, stockQuantities#1333, stockQuantity#1348]
(66) Project
Arguments: [plant#1324.id AS plant#1349, plant#1324.internalRefUUID AS plantUuid#1350, product#1323.id AS product#1351, product#1323.internalRefUUID AS productUuid#1352, calculationDateTime#1332, stockQuantity#1348.storagelocation.id AS storageLocId#1353, stockQuantity#1348.storagelocation.internalRefUUID AS storageLocUuid#1354, stockQuantity#1348.quantity.measure AS quantity#1355, stockQuantity#1348.specialStockIndicator.code AS specialStockIndicator#1356, stockQuantity#1348.stockType.code AS stockType#1357]
(67) Filter
Arguments: ((specialStockIndicator#1356 = ) AND (stockType#1357 = 01))
(68) LogicalRelation
Arguments: parquet, [product#1367, plant#1368, orderDateTime#1369, planningStartDateTime#1370], false
(69) RepartitionByExpression
Arguments: [product#1367, plant#1368], 37
(70) Project
Arguments: [product#1367, plant#1368, orderDateTime#1369]
(71) LogicalRelation
Arguments: parquet, [systemId#1371, internalUUID#1372, plant#1373, product#1374, blockedForReplenishmentStartingFrom#1375, productionAspect#1376, salesPlant#1377, listing#1378, sourceOfSupplyCategory#1379], false
(72) Repartition
Arguments: 37, true
(73) Project
Arguments: [systemId#1371, internalUUID#1372, plant#1373, product#1374, blockedForReplenishmentStartingFrom#1375, productionAspect#1376, salesPlant#1377, listing#1378, sourceOfSupplyCategory#1379, struct(systemId, systemId#1371, internalUUID, internalUUID#1372, plant, plant#1373, product, product#1374, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#1375, productionAspect, productionAspect#1376, salesPlant, salesPlant#1377, listing, listing#1378, sourceOfSupplyCategory, sourceOfSupplyCategory#1379) AS productPlant#1380]
(74) Project
Arguments: [productPlant#1380]
(75) Join
Arguments: LeftOuter, ((product#1367 <=> productPlant#1380.product.internalRefUUID) AND (plant#1368 <=> productPlant#1380.plant.internalRefUUID))
(76) Project
Arguments: [product#1367, plant#1368, orderDateTime#1369, productPlant#1380]
(77) LogicalRelation
Arguments: parquet, [systemId#1381, internalUUID#1382, id#1383, displayId#1384, name#1385, baseUnitOfMeasure#1386, unitOfMeasures#1387, unitOfMeasureConversions#1388, productionAspect#1389, salesAspect#1390, procurementAspect#1391], false
(78) Repartition
Arguments: 37, true
(79) Join
Arguments: LeftOuter, (product#1367 = internalUUID#1382)
(80) Project
Arguments: [product#1367, plant#1368, orderDateTime#1369, productPlant#1380, systemId#1381, internalUUID#1382, id#1383, displayId#1384, name#1385, baseUnitOfMeasure#1386, unitOfMeasures#1387, unitOfMeasureConversions#1388, productionAspect#1389, salesAspect#1390, procurementAspect#1391, filter(unitOfMeasureConversions#1388, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#1380.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#1380.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#1386.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#1386.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#1392]
(81) Generate
Arguments: explode(filteredUnitOfMeasureConversions#1392.quantityNumerator), true, [quantityNumerator#1393]
(82) Project
Arguments: [product#1367, plant#1368, orderDateTime#1369, productPlant#1380, systemId#1381, internalUUID#1382, id#1383, displayId#1384, name#1385, baseUnitOfMeasure#1386, unitOfMeasures#1387, unitOfMeasureConversions#1388, productionAspect#1389, salesAspect#1390, procurementAspect#1391, filteredUnitOfMeasureConversions#1392, quantityNumerator#1393]
(83) Generate
Arguments: explode(filteredUnitOfMeasureConversions#1392.quantityDenominator), true, [quantityDenominator#1394]
(84) Project
Arguments: [product#1367, plant#1368, orderDateTime#1369, productPlant#1380, systemId#1381, internalUUID#1382, id#1383, displayId#1384, name#1385, baseUnitOfMeasure#1386, unitOfMeasures#1387, unitOfMeasureConversions#1388, productionAspect#1389, salesAspect#1390, procurementAspect#1391, filteredUnitOfMeasureConversions#1392, quantityNumerator#1393, quantityDenominator#1394]
(85) Project
Arguments: [product#1367, plant#1368, orderDateTime#1369, productPlant#1380, systemId#1381, internalUUID#1382, id#1383, displayId#1384, name#1385, baseUnitOfMeasure#1386, unitOfMeasures#1387, unitOfMeasureConversions#1388, productionAspect#1389, salesAspect#1390, procurementAspect#1391, filteredUnitOfMeasureConversions#1392, quantityNumerator#1393, quantityDenominator#1394, (cast(quantityNumerator#1393 as double) / cast(quantityDenominator#1394 as double)) AS outboundUnit#1395]
(86) Project
Arguments: [product#1367, plant#1368, orderDateTime#1369, productPlant#1380, systemId#1381, internalUUID#1382, id#1383, displayId#1384, name#1385, baseUnitOfMeasure#1386, unitOfMeasures#1387, unitOfMeasureConversions#1388, productionAspect#1389, salesAspect#1390, procurementAspect#1391, filteredUnitOfMeasureConversions#1392, quantityNumerator#1393, quantityDenominator#1394, CASE WHEN (isnull(outboundUnit#1395) OR (outboundUnit#1395 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#1395 END AS outboundUnit#1396]
(87) Project
Arguments: [product#1367, plant#1368, orderDateTime#1369, productPlant#1380, outboundUnit#1396]
(88) Join
Arguments: Inner, ((plantUuid#1350 = plant#1368) AND (productUuid#1352 = product#1367))
(89) Filter
Arguments: (calculationDateTime#1332 <= orderDateTime#1369)
(90) Project
Arguments: [plantUuid#1350 AS plant#1400, productUuid#1352 AS product#1401, storageLocId#1353, calculationDateTime#1332, quantity#1355]
(91) LogicalRelation
Arguments: parquet, [systemId#1409, internalUUID#1410, product#1411, plant#1412, calculationDateTime#1413, stockQuantities#1414], false
(92) Repartition
Arguments: 37, true
(93) LogicalRelation
Arguments: parquet, [marketUnit#1415, description#1416, articleHierarchy#1417, defaultCurrency#1418, responsibilities#1419, replenishmentTypes#1420, distributionCenters#1421, assignedArticleHierarchyNodes#1422, minOrderQtySetting#1423, minOrderQtySettingInternal#1424, listingCheck#1425, odsSelection#1426, demandProfiles#1427, constraintProfiles#1428, optimizationProfiles#1429, orderGroupSplitProfiles#1430, supplierMinimumProfiles#1431, multipleRestrictionProfiles#1432, preferredUomSource#1433, handlingOfUnfulfilledDemands#1434, negligibleQuantitiesThreshold#1435, eventtype#1436], false
(94) Repartition
Arguments: 37, true
(95) Filter
Arguments: (marketUnit#1415 <=> 10000_OP_PERF)
(96) Project
Arguments: [marketUnit#1415, description#1416, articleHierarchy#1417, defaultCurrency#1418, responsibilities#1419, replenishmentTypes#1420, distributionCenters#1421, assignedArticleHierarchyNodes#1422, minOrderQtySetting#1423, minOrderQtySettingInternal#1424, listingCheck#1425, odsSelection#1426, demandProfiles#1427, constraintProfiles#1428, optimizationProfiles#1429, orderGroupSplitProfiles#1430, supplierMinimumProfiles#1431, multipleRestrictionProfiles#1432, preferredUomSource#1433, handlingOfUnfulfilledDemands#1434, negligibleQuantitiesThreshold#1435, eventtype#1436]
(97) Project
Arguments: [distributionCenters#1421]
(98) Generate
Arguments: explode(distributionCenters#1421), false, [distributionCenters#1437]
(99) Project
Arguments: [distributionCenters#1437]
(100) Generate
Arguments: explode(distributionCenters#1437.storageLocations), false, [storageLocations#1438]
(101) Project
Arguments: [distributionCenters#1437.id AS plantId#1439, distributionCenters#1437.internalRefUUID AS plantUuid#1440, storageLocations#1438]
(102) Project
Arguments: [plantId#1439, plantUuid#1440, storageLocations#1438.id AS storageLocId#1441, storageLocations#1438.internalRefUUID AS storageLocUuid#1442]
(103) LogicalRelation
Arguments: parquet, [product#1443, plant#1444, orderDateTime#1445, planningStartDateTime#1446], false
(104) RepartitionByExpression
Arguments: [product#1443, plant#1444], 37
(105) Project
Arguments: [product#1443, plant#1444, orderDateTime#1445]
(106) LogicalRelation
Arguments: parquet, [systemId#1447, internalUUID#1448, plant#1449, product#1450, blockedForReplenishmentStartingFrom#1451, productionAspect#1452, salesPlant#1453, listing#1454, sourceOfSupplyCategory#1455], false
(107) Repartition
Arguments: 37, true
(108) Project
Arguments: [systemId#1447, internalUUID#1448, plant#1449, product#1450, blockedForReplenishmentStartingFrom#1451, productionAspect#1452, salesPlant#1453, listing#1454, sourceOfSupplyCategory#1455, struct(systemId, systemId#1447, internalUUID, internalUUID#1448, plant, plant#1449, product, product#1450, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#1451, productionAspect, productionAspect#1452, salesPlant, salesPlant#1453, listing, listing#1454, sourceOfSupplyCategory, sourceOfSupplyCategory#1455) AS productPlant#1456]
(109) Project
Arguments: [productPlant#1456]
(110) Join
Arguments: LeftOuter, ((product#1443 <=> productPlant#1456.product.internalRefUUID) AND (plant#1444 <=> productPlant#1456.plant.internalRefUUID))
(111) Project
Arguments: [product#1443, plant#1444, orderDateTime#1445, productPlant#1456]
(112) LogicalRelation
Arguments: parquet, [systemId#1457, internalUUID#1458, id#1459, displayId#1460, name#1461, baseUnitOfMeasure#1462, unitOfMeasures#1463, unitOfMeasureConversions#1464, productionAspect#1465, salesAspect#1466, procurementAspect#1467], false
(113) Repartition
Arguments: 37, true
(114) Join
Arguments: LeftOuter, (product#1443 = internalUUID#1458)
(115) Project
Arguments: [product#1443, plant#1444, orderDateTime#1445, productPlant#1456, systemId#1457, internalUUID#1458, id#1459, displayId#1460, name#1461, baseUnitOfMeasure#1462, unitOfMeasures#1463, unitOfMeasureConversions#1464, productionAspect#1465, salesAspect#1466, procurementAspect#1467, filter(unitOfMeasureConversions#1464, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#1456.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#1456.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#1462.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#1462.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#1468]
(116) Generate
Arguments: explode(filteredUnitOfMeasureConversions#1468.quantityNumerator), true, [quantityNumerator#1469]
(117) Project
Arguments: [product#1443, plant#1444, orderDateTime#1445, productPlant#1456, systemId#1457, internalUUID#1458, id#1459, displayId#1460, name#1461, baseUnitOfMeasure#1462, unitOfMeasures#1463, unitOfMeasureConversions#1464, productionAspect#1465, salesAspect#1466, procurementAspect#1467, filteredUnitOfMeasureConversions#1468, quantityNumerator#1469]
(118) Generate
Arguments: explode(filteredUnitOfMeasureConversions#1468.quantityDenominator), true, [quantityDenominator#1470]
(119) Project
Arguments: [product#1443, plant#1444, orderDateTime#1445, productPlant#1456, systemId#1457, internalUUID#1458, id#1459, displayId#1460, name#1461, baseUnitOfMeasure#1462, unitOfMeasures#1463, unitOfMeasureConversions#1464, productionAspect#1465, salesAspect#1466, procurementAspect#1467, filteredUnitOfMeasureConversions#1468, quantityNumerator#1469, quantityDenominator#1470]
(120) Project
Arguments: [product#1443, plant#1444, orderDateTime#1445, productPlant#1456, systemId#1457, internalUUID#1458, id#1459, displayId#1460, name#1461, baseUnitOfMeasure#1462, unitOfMeasures#1463, unitOfMeasureConversions#1464, productionAspect#1465, salesAspect#1466, procurementAspect#1467, filteredUnitOfMeasureConversions#1468, quantityNumerator#1469, quantityDenominator#1470, (cast(quantityNumerator#1469 as double) / cast(quantityDenominator#1470 as double)) AS outboundUnit#1471]
(121) Project
Arguments: [product#1443, plant#1444, orderDateTime#1445, productPlant#1456, systemId#1457, internalUUID#1458, id#1459, displayId#1460, name#1461, baseUnitOfMeasure#1462, unitOfMeasures#1463, unitOfMeasureConversions#1464, productionAspect#1465, salesAspect#1466, procurementAspect#1467, filteredUnitOfMeasureConversions#1468, quantityNumerator#1469, quantityDenominator#1470, CASE WHEN (isnull(outboundUnit#1471) OR (outboundUnit#1471 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#1471 END AS outboundUnit#1472]
(122) Project
Arguments: [product#1443, plant#1444, orderDateTime#1445, productPlant#1456, outboundUnit#1472]
(123) Project
Arguments: [plant#1444]
(124) Deduplicate
Arguments: [plant#1444]
(125) Join
Arguments: Inner, (plantUuid#1440 = plant#1444)
(126) Project
Arguments: [plantId#1439, plantUuid#1440, storageLocId#1441, storageLocUuid#1442]
(127) Join
Arguments: Inner, (plant#1412.internalRefUUID <=> plantUuid#1440)
(128) Generate
Arguments: explode(filter(stockQuantities#1414, lambdafunction(((lambda x#1330.storageLocation.internalRefUuid = storageLocUuid#1442) AND (lambda x#1330.storageLocation.Id = storageLocId#1441)), lambda x#1330, false))), false, [stockQuantity#1473]
(129) Project
Arguments: [systemId#1409, internalUUID#1410, product#1411, plant#1412, calculationDateTime#1413, stockQuantities#1414, plantId#1439, plantUuid#1440, storageLocId#1441, storageLocUuid#1442, stockQuantity#1473]
(130) Aggregate
Arguments: [plantUuid#1440, internalUUID#1410, plant#1412, product#1411, systemId#1409], [plantUuid#1440, internalUUID#1410, plant#1412, product#1411, systemId#1409, first(calculationDateTime#1413, false) AS calculationDateTime#1474, collect_list(stockQuantity#1473, 0, 0) AS stockQuantities#1475]
(131) Project
Arguments: [systemId#1409, internalUUID#1410, product#1411, plant#1412, calculationDateTime#1474, stockQuantities#1475]
(132) Generate
Arguments: explode(stockQuantities#1475), false, [stockQuantity#1476]
(133) Project
Arguments: [systemId#1409, internalUUID#1410, product#1411, plant#1412, calculationDateTime#1474, stockQuantities#1475, stockQuantity#1476]
(134) Project
Arguments: [plant#1412.id AS plant#1477, plant#1412.internalRefUUID AS plantUuid#1478, product#1411.id AS product#1479, product#1411.internalRefUUID AS productUuid#1480, calculationDateTime#1474, stockQuantity#1476.storagelocation.id AS storageLocId#1481, stockQuantity#1476.storagelocation.internalRefUUID AS storageLocUuid#1482, stockQuantity#1476.quantity.measure AS quantity#1483, stockQuantity#1476.specialStockIndicator.code AS specialStockIndicator#1484, stockQuantity#1476.stockType.code AS stockType#1485]
(135) Filter
Arguments: ((specialStockIndicator#1484 = ) AND (stockType#1485 = 01))
(136) LogicalRelation
Arguments: parquet, [product#1486, plant#1487, orderDateTime#1488, planningStartDateTime#1489], false
(137) RepartitionByExpression
Arguments: [product#1486, plant#1487], 37
(138) Project
Arguments: [product#1486, plant#1487, orderDateTime#1488]
(139) LogicalRelation
Arguments: parquet, [systemId#1490, internalUUID#1491, plant#1492, product#1493, blockedForReplenishmentStartingFrom#1494, productionAspect#1495, salesPlant#1496, listing#1497, sourceOfSupplyCategory#1498], false
(140) Repartition
Arguments: 37, true
(141) Project
Arguments: [systemId#1490, internalUUID#1491, plant#1492, product#1493, blockedForReplenishmentStartingFrom#1494, productionAspect#1495, salesPlant#1496, listing#1497, sourceOfSupplyCategory#1498, struct(systemId, systemId#1490, internalUUID, internalUUID#1491, plant, plant#1492, product, product#1493, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#1494, productionAspect, productionAspect#1495, salesPlant, salesPlant#1496, listing, listing#1497, sourceOfSupplyCategory, sourceOfSupplyCategory#1498) AS productPlant#1499]
(142) Project
Arguments: [productPlant#1499]
(143) Join
Arguments: LeftOuter, ((product#1486 <=> productPlant#1499.product.internalRefUUID) AND (plant#1487 <=> productPlant#1499.plant.internalRefUUID))
(144) Project
Arguments: [product#1486, plant#1487, orderDateTime#1488, productPlant#1499]
(145) LogicalRelation
Arguments: parquet, [systemId#1500, internalUUID#1501, id#1502, displayId#1503, name#1504, baseUnitOfMeasure#1505, unitOfMeasures#1506, unitOfMeasureConversions#1507, productionAspect#1508, salesAspect#1509, procurementAspect#1510], false
(146) Repartition
Arguments: 37, true
(147) Join
Arguments: LeftOuter, (product#1486 = internalUUID#1501)
(148) Project
Arguments: [product#1486, plant#1487, orderDateTime#1488, productPlant#1499, systemId#1500, internalUUID#1501, id#1502, displayId#1503, name#1504, baseUnitOfMeasure#1505, unitOfMeasures#1506, unitOfMeasureConversions#1507, productionAspect#1508, salesAspect#1509, procurementAspect#1510, filter(unitOfMeasureConversions#1507, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#1499.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#1499.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#1505.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#1505.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#1511]
(149) Generate
Arguments: explode(filteredUnitOfMeasureConversions#1511.quantityNumerator), true, [quantityNumerator#1512]
(150) Project
Arguments: [product#1486, plant#1487, orderDateTime#1488, productPlant#1499, systemId#1500, internalUUID#1501, id#1502, displayId#1503, name#1504, baseUnitOfMeasure#1505, unitOfMeasures#1506, unitOfMeasureConversions#1507, productionAspect#1508, salesAspect#1509, procurementAspect#1510, filteredUnitOfMeasureConversions#1511, quantityNumerator#1512]
(151) Generate
Arguments: explode(filteredUnitOfMeasureConversions#1511.quantityDenominator), true, [quantityDenominator#1513]
(152) Project
Arguments: [product#1486, plant#1487, orderDateTime#1488, productPlant#1499, systemId#1500, internalUUID#1501, id#1502, displayId#1503, name#1504, baseUnitOfMeasure#1505, unitOfMeasures#1506, unitOfMeasureConversions#1507, productionAspect#1508, salesAspect#1509, procurementAspect#1510, filteredUnitOfMeasureConversions#1511, quantityNumerator#1512, quantityDenominator#1513]
(153) Project
Arguments: [product#1486, plant#1487, orderDateTime#1488, productPlant#1499, systemId#1500, internalUUID#1501, id#1502, displayId#1503, name#1504, baseUnitOfMeasure#1505, unitOfMeasures#1506, unitOfMeasureConversions#1507, productionAspect#1508, salesAspect#1509, procurementAspect#1510, filteredUnitOfMeasureConversions#1511, quantityNumerator#1512, quantityDenominator#1513, (cast(quantityNumerator#1512 as double) / cast(quantityDenominator#1513 as double)) AS outboundUnit#1514]
(154) Project
Arguments: [product#1486, plant#1487, orderDateTime#1488, productPlant#1499, systemId#1500, internalUUID#1501, id#1502, displayId#1503, name#1504, baseUnitOfMeasure#1505, unitOfMeasures#1506, unitOfMeasureConversions#1507, productionAspect#1508, salesAspect#1509, procurementAspect#1510, filteredUnitOfMeasureConversions#1511, quantityNumerator#1512, quantityDenominator#1513, CASE WHEN (isnull(outboundUnit#1514) OR (outboundUnit#1514 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#1514 END AS outboundUnit#1515]
(155) Project
Arguments: [product#1486, plant#1487, orderDateTime#1488, productPlant#1499, outboundUnit#1515]
(156) Join
Arguments: Inner, ((plantUuid#1478 = plant#1487) AND (productUuid#1480 = product#1486))
(157) Filter
Arguments: (calculationDateTime#1474 <= orderDateTime#1488)
(158) Project
Arguments: [plantUuid#1478 AS plant#1516, productUuid#1480 AS product#1517, storageLocId#1481, calculationDateTime#1474, quantity#1483]
(159) Aggregate
Arguments: [plant#1516, product#1517, storageLocId#1481], [plant#1516, product#1517, storageLocId#1481, max(calculationDateTime#1474) AS max_calc_datetime#1402]
(160) Join
Arguments: Inner, ((((plant#1400 <=> plant#1516) AND (product#1401 <=> product#1517)) AND (storageLocId#1353 <=> storageLocId#1481)) AND (calculationDateTime#1332 <=> max_calc_datetime#1402))
(161) Project
Arguments: [plant#1400, product#1401, storageLocId#1353, calculationDateTime#1332, quantity#1355]
(162) Aggregate
Arguments: [product#1401, plant#1400], [product#1401, plant#1400, sum(quantity#1355) AS quantitySum#1526, min(calculationDateTime#1332) AS minCalculationDateTime#1527]
(163) Project
Arguments: [product#1401, plant#1400, quantitySum#1526, minCalculationDateTime#1527, round(quantitySum#1526, 0) AS roundedQuantitySum#1535]
(164) Join
Arguments: LeftOuter, ((plant#1128 = plant#1400) AND (product#1127 = product#1401))
(165) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218, roundedQuantitySum#1535, minCalculationDateTime#1527]
(166) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218, roundedQuantitySum#1535, minCalculationDateTime#1527, CASE WHEN isnotnull(minCalculationDateTime#1527) THEN minCalculationDateTime#1527 ELSE orderDateTime#1129 END AS stockDatetime#1569]
(167) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218, roundedQuantitySum#1535, minCalculationDateTime#1527, stockDatetime#1569, CASE WHEN isnotnull(roundedQuantitySum#1535) THEN array(roundedQuantitySum#1535) ELSE array(0.0) END AS stockBatchQuantities#1570]
(168) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218, roundedQuantitySum#1535, minCalculationDateTime#1527, stockDatetime#1569, stockBatchQuantities#1570, array(2199-01-01 00:00:00) AS stockBatchShelfLifeEndDatetimes#1571]
(169) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218, roundedQuantitySum#1535, stockDatetime#1569, stockBatchQuantities#1570, stockBatchShelfLifeEndDatetimes#1571]
(170) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218, stockDatetime#1569, stockBatchQuantities#1570, stockBatchShelfLifeEndDatetimes#1571]
(171) LogicalRelation
Arguments: parquet, [product#2711, plant#2712, orderDateTime#2713, planningStartDateTime#2714], false
(172) RepartitionByExpression
Arguments: [product#2711, plant#2712], 37
(173) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713]
(174) LogicalRelation
Arguments: parquet, [systemId#2715, internalUUID#2716, plant#2717, product#2718, blockedForReplenishmentStartingFrom#2719, productionAspect#2720, salesPlant#2721, listing#2722, sourceOfSupplyCategory#2723], false
(175) Repartition
Arguments: 37, true
(176) Project
Arguments: [systemId#2715, internalUUID#2716, plant#2717, product#2718, blockedForReplenishmentStartingFrom#2719, productionAspect#2720, salesPlant#2721, listing#2722, sourceOfSupplyCategory#2723, struct(systemId, systemId#2715, internalUUID, internalUUID#2716, plant, plant#2717, product, product#2718, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#2719, productionAspect, productionAspect#2720, salesPlant, salesPlant#2721, listing, listing#2722, sourceOfSupplyCategory, sourceOfSupplyCategory#2723) AS productPlant#2724]
(177) Project
Arguments: [productPlant#2724]
(178) Join
Arguments: LeftOuter, ((product#2711 <=> productPlant#2724.product.internalRefUUID) AND (plant#2712 <=> productPlant#2724.plant.internalRefUUID))
(179) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724]
(180) LogicalRelation
Arguments: parquet, [systemId#2725, internalUUID#2726, id#2727, displayId#2728, name#2729, baseUnitOfMeasure#2730, unitOfMeasures#2731, unitOfMeasureConversions#2732, productionAspect#2733, salesAspect#2734, procurementAspect#2735], false
(181) Repartition
Arguments: 37, true
(182) Join
Arguments: LeftOuter, (product#2711 = internalUUID#2726)
(183) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, systemId#2725, internalUUID#2726, id#2727, displayId#2728, name#2729, baseUnitOfMeasure#2730, unitOfMeasures#2731, unitOfMeasureConversions#2732, productionAspect#2733, salesAspect#2734, procurementAspect#2735, filter(unitOfMeasureConversions#2732, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#2724.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#2724.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#2730.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#2730.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#2736]
(184) Generate
Arguments: explode(filteredUnitOfMeasureConversions#2736.quantityNumerator), true, [quantityNumerator#2737]
(185) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, systemId#2725, internalUUID#2726, id#2727, displayId#2728, name#2729, baseUnitOfMeasure#2730, unitOfMeasures#2731, unitOfMeasureConversions#2732, productionAspect#2733, salesAspect#2734, procurementAspect#2735, filteredUnitOfMeasureConversions#2736, quantityNumerator#2737]
(186) Generate
Arguments: explode(filteredUnitOfMeasureConversions#2736.quantityDenominator), true, [quantityDenominator#2738]
(187) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, systemId#2725, internalUUID#2726, id#2727, displayId#2728, name#2729, baseUnitOfMeasure#2730, unitOfMeasures#2731, unitOfMeasureConversions#2732, productionAspect#2733, salesAspect#2734, procurementAspect#2735, filteredUnitOfMeasureConversions#2736, quantityNumerator#2737, quantityDenominator#2738]
(188) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, systemId#2725, internalUUID#2726, id#2727, displayId#2728, name#2729, baseUnitOfMeasure#2730, unitOfMeasures#2731, unitOfMeasureConversions#2732, productionAspect#2733, salesAspect#2734, procurementAspect#2735, filteredUnitOfMeasureConversions#2736, quantityNumerator#2737, quantityDenominator#2738, (cast(quantityNumerator#2737 as double) / cast(quantityDenominator#2738 as double)) AS outboundUnit#2739]
(189) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, systemId#2725, internalUUID#2726, id#2727, displayId#2728, name#2729, baseUnitOfMeasure#2730, unitOfMeasures#2731, unitOfMeasureConversions#2732, productionAspect#2733, salesAspect#2734, procurementAspect#2735, filteredUnitOfMeasureConversions#2736, quantityNumerator#2737, quantityDenominator#2738, CASE WHEN (isnull(outboundUnit#2739) OR (outboundUnit#2739 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#2739 END AS outboundUnit#2740]
(190) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, outboundUnit#2740]
(191) LogicalRelation
Arguments: parquet, [systemId#2741, internalUUID#2742, product#2743, plant#2744, calculationDateTime#2745, stockQuantities#2746], false
(192) Repartition
Arguments: 37, true
(193) LogicalRelation
Arguments: parquet, [marketUnit#2747, description#2748, articleHierarchy#2749, defaultCurrency#2750, responsibilities#2751, replenishmentTypes#2752, distributionCenters#2753, assignedArticleHierarchyNodes#2754, minOrderQtySetting#2755, minOrderQtySettingInternal#2756, listingCheck#2757, odsSelection#2758, demandProfiles#2759, constraintProfiles#2760, optimizationProfiles#2761, orderGroupSplitProfiles#2762, supplierMinimumProfiles#2763, multipleRestrictionProfiles#2764, preferredUomSource#2765, handlingOfUnfulfilledDemands#2766, negligibleQuantitiesThreshold#2767, eventtype#2768], false
(194) Repartition
Arguments: 37, true
(195) Filter
Arguments: (marketUnit#2747 <=> 10000_OP_PERF)
(196) Project
Arguments: [marketUnit#2747, description#2748, articleHierarchy#2749, defaultCurrency#2750, responsibilities#2751, replenishmentTypes#2752, distributionCenters#2753, assignedArticleHierarchyNodes#2754, minOrderQtySetting#2755, minOrderQtySettingInternal#2756, listingCheck#2757, odsSelection#2758, demandProfiles#2759, constraintProfiles#2760, optimizationProfiles#2761, orderGroupSplitProfiles#2762, supplierMinimumProfiles#2763, multipleRestrictionProfiles#2764, preferredUomSource#2765, handlingOfUnfulfilledDemands#2766, negligibleQuantitiesThreshold#2767, eventtype#2768]
(197) Project
Arguments: [distributionCenters#2753]
(198) Generate
Arguments: explode(distributionCenters#2753), false, [distributionCenters#2769]
(199) Project
Arguments: [distributionCenters#2769]
(200) Generate
Arguments: explode(distributionCenters#2769.storageLocations), false, [storageLocations#2770]
(201) Project
Arguments: [distributionCenters#2769.id AS plantId#2771, distributionCenters#2769.internalRefUUID AS plantUuid#2772, storageLocations#2770]
(202) Project
Arguments: [plantId#2771, plantUuid#2772, storageLocations#2770.id AS storageLocId#2773, storageLocations#2770.internalRefUUID AS storageLocUuid#2774]
(203) LogicalRelation
Arguments: parquet, [product#2775, plant#2776, orderDateTime#2777, planningStartDateTime#2778], false
(204) RepartitionByExpression
Arguments: [product#2775, plant#2776], 37
(205) Project
Arguments: [product#2775, plant#2776, orderDateTime#2777]
(206) LogicalRelation
Arguments: parquet, [systemId#2779, internalUUID#2780, plant#2781, product#2782, blockedForReplenishmentStartingFrom#2783, productionAspect#2784, salesPlant#2785, listing#2786, sourceOfSupplyCategory#2787], false
(207) Repartition
Arguments: 37, true
(208) Project
Arguments: [systemId#2779, internalUUID#2780, plant#2781, product#2782, blockedForReplenishmentStartingFrom#2783, productionAspect#2784, salesPlant#2785, listing#2786, sourceOfSupplyCategory#2787, struct(systemId, systemId#2779, internalUUID, internalUUID#2780, plant, plant#2781, product, product#2782, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#2783, productionAspect, productionAspect#2784, salesPlant, salesPlant#2785, listing, listing#2786, sourceOfSupplyCategory, sourceOfSupplyCategory#2787) AS productPlant#2788]
(209) Project
Arguments: [productPlant#2788]
(210) Join
Arguments: LeftOuter, ((product#2775 <=> productPlant#2788.product.internalRefUUID) AND (plant#2776 <=> productPlant#2788.plant.internalRefUUID))
(211) Project
Arguments: [product#2775, plant#2776, orderDateTime#2777, productPlant#2788]
(212) LogicalRelation
Arguments: parquet, [systemId#2789, internalUUID#2790, id#2791, displayId#2792, name#2793, baseUnitOfMeasure#2794, unitOfMeasures#2795, unitOfMeasureConversions#2796, productionAspect#2797, salesAspect#2798, procurementAspect#2799], false
(213) Repartition
Arguments: 37, true
(214) Join
Arguments: LeftOuter, (product#2775 = internalUUID#2790)
(215) Project
Arguments: [product#2775, plant#2776, orderDateTime#2777, productPlant#2788, systemId#2789, internalUUID#2790, id#2791, displayId#2792, name#2793, baseUnitOfMeasure#2794, unitOfMeasures#2795, unitOfMeasureConversions#2796, productionAspect#2797, salesAspect#2798, procurementAspect#2799, filter(unitOfMeasureConversions#2796, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#2788.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#2788.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#2794.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#2794.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#2800]
(216) Generate
Arguments: explode(filteredUnitOfMeasureConversions#2800.quantityNumerator), true, [quantityNumerator#2801]
(217) Project
Arguments: [product#2775, plant#2776, orderDateTime#2777, productPlant#2788, systemId#2789, internalUUID#2790, id#2791, displayId#2792, name#2793, baseUnitOfMeasure#2794, unitOfMeasures#2795, unitOfMeasureConversions#2796, productionAspect#2797, salesAspect#2798, procurementAspect#2799, filteredUnitOfMeasureConversions#2800, quantityNumerator#2801]
(218) Generate
Arguments: explode(filteredUnitOfMeasureConversions#2800.quantityDenominator), true, [quantityDenominator#2802]
(219) Project
Arguments: [product#2775, plant#2776, orderDateTime#2777, productPlant#2788, systemId#2789, internalUUID#2790, id#2791, displayId#2792, name#2793, baseUnitOfMeasure#2794, unitOfMeasures#2795, unitOfMeasureConversions#2796, productionAspect#2797, salesAspect#2798, procurementAspect#2799, filteredUnitOfMeasureConversions#2800, quantityNumerator#2801, quantityDenominator#2802]
(220) Project
Arguments: [product#2775, plant#2776, orderDateTime#2777, productPlant#2788, systemId#2789, internalUUID#2790, id#2791, displayId#2792, name#2793, baseUnitOfMeasure#2794, unitOfMeasures#2795, unitOfMeasureConversions#2796, productionAspect#2797, salesAspect#2798, procurementAspect#2799, filteredUnitOfMeasureConversions#2800, quantityNumerator#2801, quantityDenominator#2802, (cast(quantityNumerator#2801 as double) / cast(quantityDenominator#2802 as double)) AS outboundUnit#2803]
(221) Project
Arguments: [product#2775, plant#2776, orderDateTime#2777, productPlant#2788, systemId#2789, internalUUID#2790, id#2791, displayId#2792, name#2793, baseUnitOfMeasure#2794, unitOfMeasures#2795, unitOfMeasureConversions#2796, productionAspect#2797, salesAspect#2798, procurementAspect#2799, filteredUnitOfMeasureConversions#2800, quantityNumerator#2801, quantityDenominator#2802, CASE WHEN (isnull(outboundUnit#2803) OR (outboundUnit#2803 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#2803 END AS outboundUnit#2804]
(222) Project
Arguments: [product#2775, plant#2776, orderDateTime#2777, productPlant#2788, outboundUnit#2804]
(223) Project
Arguments: [plant#2776]
(224) Deduplicate
Arguments: [plant#2776]
(225) Join
Arguments: Inner, (plantUuid#2772 = plant#2776)
(226) Project
Arguments: [plantId#2771, plantUuid#2772, storageLocId#2773, storageLocUuid#2774]
(227) Join
Arguments: Inner, (plant#2744.internalRefUUID <=> plantUuid#2772)
(228) Generate
Arguments: explode(filter(stockQuantities#2746, lambdafunction(((lambda x#1330.storageLocation.internalRefUuid = storageLocUuid#2774) AND (lambda x#1330.storageLocation.Id = storageLocId#2773)), lambda x#1330, false))), false, [stockQuantity#2805]
(229) Project
Arguments: [systemId#2741, internalUUID#2742, product#2743, plant#2744, calculationDateTime#2745, stockQuantities#2746, plantId#2771, plantUuid#2772, storageLocId#2773, storageLocUuid#2774, stockQuantity#2805]
(230) Aggregate
Arguments: [plantUuid#2772, internalUUID#2742, plant#2744, product#2743, systemId#2741], [plantUuid#2772, internalUUID#2742, plant#2744, product#2743, systemId#2741, first(calculationDateTime#2745, false) AS calculationDateTime#2806, collect_list(stockQuantity#2805, 0, 0) AS stockQuantities#2807]
(231) Project
Arguments: [systemId#2741, internalUUID#2742, product#2743, plant#2744, calculationDateTime#2806, stockQuantities#2807]
(232) Generate
Arguments: explode(stockQuantities#2807), false, [stockQuantity#2808]
(233) Project
Arguments: [systemId#2741, internalUUID#2742, product#2743, plant#2744, calculationDateTime#2806, stockQuantities#2807, stockQuantity#2808]
(234) Project
Arguments: [plant#2744.id AS plant#2809, plant#2744.internalRefUUID AS plantUuid#2810, product#2743.id AS product#2811, product#2743.internalRefUUID AS productUuid#2812, calculationDateTime#2806, stockQuantity#2808.storagelocation.id AS storageLocId#2813, stockQuantity#2808.storagelocation.internalRefUUID AS storageLocUuid#2814, stockQuantity#2808.quantity.measure AS quantity#2815, stockQuantity#2808.specialStockIndicator.code AS specialStockIndicator#2816, stockQuantity#2808.stockType.code AS stockType#2817]
(235) Filter
Arguments: ((specialStockIndicator#2816 = ) AND (stockType#2817 = 01))
(236) LogicalRelation
Arguments: parquet, [product#2818, plant#2819, orderDateTime#2820, planningStartDateTime#2821], false
(237) RepartitionByExpression
Arguments: [product#2818, plant#2819], 37
(238) Project
Arguments: [product#2818, plant#2819, orderDateTime#2820]
(239) LogicalRelation
Arguments: parquet, [systemId#2822, internalUUID#2823, plant#2824, product#2825, blockedForReplenishmentStartingFrom#2826, productionAspect#2827, salesPlant#2828, listing#2829, sourceOfSupplyCategory#2830], false
(240) Repartition
Arguments: 37, true
(241) Project
Arguments: [systemId#2822, internalUUID#2823, plant#2824, product#2825, blockedForReplenishmentStartingFrom#2826, productionAspect#2827, salesPlant#2828, listing#2829, sourceOfSupplyCategory#2830, struct(systemId, systemId#2822, internalUUID, internalUUID#2823, plant, plant#2824, product, product#2825, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#2826, productionAspect, productionAspect#2827, salesPlant, salesPlant#2828, listing, listing#2829, sourceOfSupplyCategory, sourceOfSupplyCategory#2830) AS productPlant#2831]
(242) Project
Arguments: [productPlant#2831]
(243) Join
Arguments: LeftOuter, ((product#2818 <=> productPlant#2831.product.internalRefUUID) AND (plant#2819 <=> productPlant#2831.plant.internalRefUUID))
(244) Project
Arguments: [product#2818, plant#2819, orderDateTime#2820, productPlant#2831]
(245) LogicalRelation
Arguments: parquet, [systemId#2832, internalUUID#2833, id#2834, displayId#2835, name#2836, baseUnitOfMeasure#2837, unitOfMeasures#2838, unitOfMeasureConversions#2839, productionAspect#2840, salesAspect#2841, procurementAspect#2842], false
(246) Repartition
Arguments: 37, true
(247) Join
Arguments: LeftOuter, (product#2818 = internalUUID#2833)
(248) Project
Arguments: [product#2818, plant#2819, orderDateTime#2820, productPlant#2831, systemId#2832, internalUUID#2833, id#2834, displayId#2835, name#2836, baseUnitOfMeasure#2837, unitOfMeasures#2838, unitOfMeasureConversions#2839, productionAspect#2840, salesAspect#2841, procurementAspect#2842, filter(unitOfMeasureConversions#2839, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#2831.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#2831.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#2837.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#2837.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#2843]
(249) Generate
Arguments: explode(filteredUnitOfMeasureConversions#2843.quantityNumerator), true, [quantityNumerator#2844]
(250) Project
Arguments: [product#2818, plant#2819, orderDateTime#2820, productPlant#2831, systemId#2832, internalUUID#2833, id#2834, displayId#2835, name#2836, baseUnitOfMeasure#2837, unitOfMeasures#2838, unitOfMeasureConversions#2839, productionAspect#2840, salesAspect#2841, procurementAspect#2842, filteredUnitOfMeasureConversions#2843, quantityNumerator#2844]
(251) Generate
Arguments: explode(filteredUnitOfMeasureConversions#2843.quantityDenominator), true, [quantityDenominator#2845]
(252) Project
Arguments: [product#2818, plant#2819, orderDateTime#2820, productPlant#2831, systemId#2832, internalUUID#2833, id#2834, displayId#2835, name#2836, baseUnitOfMeasure#2837, unitOfMeasures#2838, unitOfMeasureConversions#2839, productionAspect#2840, salesAspect#2841, procurementAspect#2842, filteredUnitOfMeasureConversions#2843, quantityNumerator#2844, quantityDenominator#2845]
(253) Project
Arguments: [product#2818, plant#2819, orderDateTime#2820, productPlant#2831, systemId#2832, internalUUID#2833, id#2834, displayId#2835, name#2836, baseUnitOfMeasure#2837, unitOfMeasures#2838, unitOfMeasureConversions#2839, productionAspect#2840, salesAspect#2841, procurementAspect#2842, filteredUnitOfMeasureConversions#2843, quantityNumerator#2844, quantityDenominator#2845, (cast(quantityNumerator#2844 as double) / cast(quantityDenominator#2845 as double)) AS outboundUnit#2846]
(254) Project
Arguments: [product#2818, plant#2819, orderDateTime#2820, productPlant#2831, systemId#2832, internalUUID#2833, id#2834, displayId#2835, name#2836, baseUnitOfMeasure#2837, unitOfMeasures#2838, unitOfMeasureConversions#2839, productionAspect#2840, salesAspect#2841, procurementAspect#2842, filteredUnitOfMeasureConversions#2843, quantityNumerator#2844, quantityDenominator#2845, CASE WHEN (isnull(outboundUnit#2846) OR (outboundUnit#2846 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#2846 END AS outboundUnit#2847]
(255) Project
Arguments: [product#2818, plant#2819, orderDateTime#2820, productPlant#2831, outboundUnit#2847]
(256) Join
Arguments: Inner, ((plantUuid#2810 = plant#2819) AND (productUuid#2812 = product#2818))
(257) Filter
Arguments: (calculationDateTime#2806 <= orderDateTime#2820)
(258) Project
Arguments: [plantUuid#2810 AS plant#2848, productUuid#2812 AS product#2849, storageLocId#2813, calculationDateTime#2806, quantity#2815]
(259) LogicalRelation
Arguments: parquet, [systemId#2850, internalUUID#2851, product#2852, plant#2853, calculationDateTime#2854, stockQuantities#2855], false
(260) Repartition
Arguments: 37, true
(261) LogicalRelation
Arguments: parquet, [marketUnit#2856, description#2857, articleHierarchy#2858, defaultCurrency#2859, responsibilities#2860, replenishmentTypes#2861, distributionCenters#2862, assignedArticleHierarchyNodes#2863, minOrderQtySetting#2864, minOrderQtySettingInternal#2865, listingCheck#2866, odsSelection#2867, demandProfiles#2868, constraintProfiles#2869, optimizationProfiles#2870, orderGroupSplitProfiles#2871, supplierMinimumProfiles#2872, multipleRestrictionProfiles#2873, preferredUomSource#2874, handlingOfUnfulfilledDemands#2875, negligibleQuantitiesThreshold#2876, eventtype#2877], false
(262) Repartition
Arguments: 37, true
(263) Filter
Arguments: (marketUnit#2856 <=> 10000_OP_PERF)
(264) Project
Arguments: [marketUnit#2856, description#2857, articleHierarchy#2858, defaultCurrency#2859, responsibilities#2860, replenishmentTypes#2861, distributionCenters#2862, assignedArticleHierarchyNodes#2863, minOrderQtySetting#2864, minOrderQtySettingInternal#2865, listingCheck#2866, odsSelection#2867, demandProfiles#2868, constraintProfiles#2869, optimizationProfiles#2870, orderGroupSplitProfiles#2871, supplierMinimumProfiles#2872, multipleRestrictionProfiles#2873, preferredUomSource#2874, handlingOfUnfulfilledDemands#2875, negligibleQuantitiesThreshold#2876, eventtype#2877]
(265) Project
Arguments: [distributionCenters#2862]
(266) Generate
Arguments: explode(distributionCenters#2862), false, [distributionCenters#2878]
(267) Project
Arguments: [distributionCenters#2878]
(268) Generate
Arguments: explode(distributionCenters#2878.storageLocations), false, [storageLocations#2879]
(269) Project
Arguments: [distributionCenters#2878.id AS plantId#2880, distributionCenters#2878.internalRefUUID AS plantUuid#2881, storageLocations#2879]
(270) Project
Arguments: [plantId#2880, plantUuid#2881, storageLocations#2879.id AS storageLocId#2882, storageLocations#2879.internalRefUUID AS storageLocUuid#2883]
(271) LogicalRelation
Arguments: parquet, [product#2884, plant#2885, orderDateTime#2886, planningStartDateTime#2887], false
(272) RepartitionByExpression
Arguments: [product#2884, plant#2885], 37
(273) Project
Arguments: [product#2884, plant#2885, orderDateTime#2886]
(274) LogicalRelation
Arguments: parquet, [systemId#2888, internalUUID#2889, plant#2890, product#2891, blockedForReplenishmentStartingFrom#2892, productionAspect#2893, salesPlant#2894, listing#2895, sourceOfSupplyCategory#2896], false
(275) Repartition
Arguments: 37, true
(276) Project
Arguments: [systemId#2888, internalUUID#2889, plant#2890, product#2891, blockedForReplenishmentStartingFrom#2892, productionAspect#2893, salesPlant#2894, listing#2895, sourceOfSupplyCategory#2896, struct(systemId, systemId#2888, internalUUID, internalUUID#2889, plant, plant#2890, product, product#2891, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#2892, productionAspect, productionAspect#2893, salesPlant, salesPlant#2894, listing, listing#2895, sourceOfSupplyCategory, sourceOfSupplyCategory#2896) AS productPlant#2897]
(277) Project
Arguments: [productPlant#2897]
(278) Join
Arguments: LeftOuter, ((product#2884 <=> productPlant#2897.product.internalRefUUID) AND (plant#2885 <=> productPlant#2897.plant.internalRefUUID))
(279) Project
Arguments: [product#2884, plant#2885, orderDateTime#2886, productPlant#2897]
(280) LogicalRelation
Arguments: parquet, [systemId#2898, internalUUID#2899, id#2900, displayId#2901, name#2902, baseUnitOfMeasure#2903, unitOfMeasures#2904, unitOfMeasureConversions#2905, productionAspect#2906, salesAspect#2907, procurementAspect#2908], false
(281) Repartition
Arguments: 37, true
(282) Join
Arguments: LeftOuter, (product#2884 = internalUUID#2899)
(283) Project
Arguments: [product#2884, plant#2885, orderDateTime#2886, productPlant#2897, systemId#2898, internalUUID#2899, id#2900, displayId#2901, name#2902, baseUnitOfMeasure#2903, unitOfMeasures#2904, unitOfMeasureConversions#2905, productionAspect#2906, salesAspect#2907, procurementAspect#2908, filter(unitOfMeasureConversions#2905, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#2897.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#2897.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#2903.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#2903.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#2909]
(284) Generate
Arguments: explode(filteredUnitOfMeasureConversions#2909.quantityNumerator), true, [quantityNumerator#2910]
(285) Project
Arguments: [product#2884, plant#2885, orderDateTime#2886, productPlant#2897, systemId#2898, internalUUID#2899, id#2900, displayId#2901, name#2902, baseUnitOfMeasure#2903, unitOfMeasures#2904, unitOfMeasureConversions#2905, productionAspect#2906, salesAspect#2907, procurementAspect#2908, filteredUnitOfMeasureConversions#2909, quantityNumerator#2910]
(286) Generate
Arguments: explode(filteredUnitOfMeasureConversions#2909.quantityDenominator), true, [quantityDenominator#2911]
(287) Project
Arguments: [product#2884, plant#2885, orderDateTime#2886, productPlant#2897, systemId#2898, internalUUID#2899, id#2900, displayId#2901, name#2902, baseUnitOfMeasure#2903, unitOfMeasures#2904, unitOfMeasureConversions#2905, productionAspect#2906, salesAspect#2907, procurementAspect#2908, filteredUnitOfMeasureConversions#2909, quantityNumerator#2910, quantityDenominator#2911]
(288) Project
Arguments: [product#2884, plant#2885, orderDateTime#2886, productPlant#2897, systemId#2898, internalUUID#2899, id#2900, displayId#2901, name#2902, baseUnitOfMeasure#2903, unitOfMeasures#2904, unitOfMeasureConversions#2905, productionAspect#2906, salesAspect#2907, procurementAspect#2908, filteredUnitOfMeasureConversions#2909, quantityNumerator#2910, quantityDenominator#2911, (cast(quantityNumerator#2910 as double) / cast(quantityDenominator#2911 as double)) AS outboundUnit#2912]
(289) Project
Arguments: [product#2884, plant#2885, orderDateTime#2886, productPlant#2897, systemId#2898, internalUUID#2899, id#2900, displayId#2901, name#2902, baseUnitOfMeasure#2903, unitOfMeasures#2904, unitOfMeasureConversions#2905, productionAspect#2906, salesAspect#2907, procurementAspect#2908, filteredUnitOfMeasureConversions#2909, quantityNumerator#2910, quantityDenominator#2911, CASE WHEN (isnull(outboundUnit#2912) OR (outboundUnit#2912 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#2912 END AS outboundUnit#2913]
(290) Project
Arguments: [product#2884, plant#2885, orderDateTime#2886, productPlant#2897, outboundUnit#2913]
(291) Project
Arguments: [plant#2885]
(292) Deduplicate
Arguments: [plant#2885]
(293) Join
Arguments: Inner, (plantUuid#2881 = plant#2885)
(294) Project
Arguments: [plantId#2880, plantUuid#2881, storageLocId#2882, storageLocUuid#2883]
(295) Join
Arguments: Inner, (plant#2853.internalRefUUID <=> plantUuid#2881)
(296) Generate
Arguments: explode(filter(stockQuantities#2855, lambdafunction(((lambda x#1330.storageLocation.internalRefUuid = storageLocUuid#2883) AND (lambda x#1330.storageLocation.Id = storageLocId#2882)), lambda x#1330, false))), false, [stockQuantity#2914]
(297) Project
Arguments: [systemId#2850, internalUUID#2851, product#2852, plant#2853, calculationDateTime#2854, stockQuantities#2855, plantId#2880, plantUuid#2881, storageLocId#2882, storageLocUuid#2883, stockQuantity#2914]
(298) Aggregate
Arguments: [plantUuid#2881, internalUUID#2851, plant#2853, product#2852, systemId#2850], [plantUuid#2881, internalUUID#2851, plant#2853, product#2852, systemId#2850, first(calculationDateTime#2854, false) AS calculationDateTime#2915, collect_list(stockQuantity#2914, 0, 0) AS stockQuantities#2916]
(299) Project
Arguments: [systemId#2850, internalUUID#2851, product#2852, plant#2853, calculationDateTime#2915, stockQuantities#2916]
(300) Generate
Arguments: explode(stockQuantities#2916), false, [stockQuantity#2917]
(301) Project
Arguments: [systemId#2850, internalUUID#2851, product#2852, plant#2853, calculationDateTime#2915, stockQuantities#2916, stockQuantity#2917]
(302) Project
Arguments: [plant#2853.id AS plant#2918, plant#2853.internalRefUUID AS plantUuid#2919, product#2852.id AS product#2920, product#2852.internalRefUUID AS productUuid#2921, calculationDateTime#2915, stockQuantity#2917.storagelocation.id AS storageLocId#2922, stockQuantity#2917.storagelocation.internalRefUUID AS storageLocUuid#2923, stockQuantity#2917.quantity.measure AS quantity#2924, stockQuantity#2917.specialStockIndicator.code AS specialStockIndicator#2925, stockQuantity#2917.stockType.code AS stockType#2926]
(303) Filter
Arguments: ((specialStockIndicator#2925 = ) AND (stockType#2926 = 01))
(304) LogicalRelation
Arguments: parquet, [product#2927, plant#2928, orderDateTime#2929, planningStartDateTime#2930], false
(305) RepartitionByExpression
Arguments: [product#2927, plant#2928], 37
(306) Project
Arguments: [product#2927, plant#2928, orderDateTime#2929]
(307) LogicalRelation
Arguments: parquet, [systemId#2931, internalUUID#2932, plant#2933, product#2934, blockedForReplenishmentStartingFrom#2935, productionAspect#2936, salesPlant#2937, listing#2938, sourceOfSupplyCategory#2939], false
(308) Repartition
Arguments: 37, true
(309) Project
Arguments: [systemId#2931, internalUUID#2932, plant#2933, product#2934, blockedForReplenishmentStartingFrom#2935, productionAspect#2936, salesPlant#2937, listing#2938, sourceOfSupplyCategory#2939, struct(systemId, systemId#2931, internalUUID, internalUUID#2932, plant, plant#2933, product, product#2934, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#2935, productionAspect, productionAspect#2936, salesPlant, salesPlant#2937, listing, listing#2938, sourceOfSupplyCategory, sourceOfSupplyCategory#2939) AS productPlant#2940]
(310) Project
Arguments: [productPlant#2940]
(311) Join
Arguments: LeftOuter, ((product#2927 <=> productPlant#2940.product.internalRefUUID) AND (plant#2928 <=> productPlant#2940.plant.internalRefUUID))
(312) Project
Arguments: [product#2927, plant#2928, orderDateTime#2929, productPlant#2940]
(313) LogicalRelation
Arguments: parquet, [systemId#2941, internalUUID#2942, id#2943, displayId#2944, name#2945, baseUnitOfMeasure#2946, unitOfMeasures#2947, unitOfMeasureConversions#2948, productionAspect#2949, salesAspect#2950, procurementAspect#2951], false
(314) Repartition
Arguments: 37, true
(315) Join
Arguments: LeftOuter, (product#2927 = internalUUID#2942)
(316) Project
Arguments: [product#2927, plant#2928, orderDateTime#2929, productPlant#2940, systemId#2941, internalUUID#2942, id#2943, displayId#2944, name#2945, baseUnitOfMeasure#2946, unitOfMeasures#2947, unitOfMeasureConversions#2948, productionAspect#2949, salesAspect#2950, procurementAspect#2951, filter(unitOfMeasureConversions#2948, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#2940.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#2940.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#2946.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#2946.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#2952]
(317) Generate
Arguments: explode(filteredUnitOfMeasureConversions#2952.quantityNumerator), true, [quantityNumerator#2953]
(318) Project
Arguments: [product#2927, plant#2928, orderDateTime#2929, productPlant#2940, systemId#2941, internalUUID#2942, id#2943, displayId#2944, name#2945, baseUnitOfMeasure#2946, unitOfMeasures#2947, unitOfMeasureConversions#2948, productionAspect#2949, salesAspect#2950, procurementAspect#2951, filteredUnitOfMeasureConversions#2952, quantityNumerator#2953]
(319) Generate
Arguments: explode(filteredUnitOfMeasureConversions#2952.quantityDenominator), true, [quantityDenominator#2954]
(320) Project
Arguments: [product#2927, plant#2928, orderDateTime#2929, productPlant#2940, systemId#2941, internalUUID#2942, id#2943, displayId#2944, name#2945, baseUnitOfMeasure#2946, unitOfMeasures#2947, unitOfMeasureConversions#2948, productionAspect#2949, salesAspect#2950, procurementAspect#2951, filteredUnitOfMeasureConversions#2952, quantityNumerator#2953, quantityDenominator#2954]
(321) Project
Arguments: [product#2927, plant#2928, orderDateTime#2929, productPlant#2940, systemId#2941, internalUUID#2942, id#2943, displayId#2944, name#2945, baseUnitOfMeasure#2946, unitOfMeasures#2947, unitOfMeasureConversions#2948, productionAspect#2949, salesAspect#2950, procurementAspect#2951, filteredUnitOfMeasureConversions#2952, quantityNumerator#2953, quantityDenominator#2954, (cast(quantityNumerator#2953 as double) / cast(quantityDenominator#2954 as double)) AS outboundUnit#2955]
(322) Project
Arguments: [product#2927, plant#2928, orderDateTime#2929, productPlant#2940, systemId#2941, internalUUID#2942, id#2943, displayId#2944, name#2945, baseUnitOfMeasure#2946, unitOfMeasures#2947, unitOfMeasureConversions#2948, productionAspect#2949, salesAspect#2950, procurementAspect#2951, filteredUnitOfMeasureConversions#2952, quantityNumerator#2953, quantityDenominator#2954, CASE WHEN (isnull(outboundUnit#2955) OR (outboundUnit#2955 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#2955 END AS outboundUnit#2956]
(323) Project
Arguments: [product#2927, plant#2928, orderDateTime#2929, productPlant#2940, outboundUnit#2956]
(324) Join
Arguments: Inner, ((plantUuid#2919 = plant#2928) AND (productUuid#2921 = product#2927))
(325) Filter
Arguments: (calculationDateTime#2915 <= orderDateTime#2929)
(326) Project
Arguments: [plantUuid#2919 AS plant#2957, productUuid#2921 AS product#2958, storageLocId#2922, calculationDateTime#2915, quantity#2924]
(327) Aggregate
Arguments: [plant#2957, product#2958, storageLocId#2922], [plant#2957, product#2958, storageLocId#2922, max(calculationDateTime#2915) AS max_calc_datetime#2959]
(328) Join
Arguments: Inner, ((((plant#2848 <=> plant#2957) AND (product#2849 <=> product#2958)) AND (storageLocId#2813 <=> storageLocId#2922)) AND (calculationDateTime#2806 <=> max_calc_datetime#2959))
(329) Project
Arguments: [plant#2848, product#2849, storageLocId#2813, calculationDateTime#2806, quantity#2815]
(330) Aggregate
Arguments: [product#2849, plant#2848], [product#2849, plant#2848, sum(quantity#2815) AS quantitySum#2960, min(calculationDateTime#2806) AS minCalculationDateTime#2961]
(331) Project
Arguments: [product#2849, plant#2848, quantitySum#2960, minCalculationDateTime#2961, round(quantitySum#2960, 0) AS roundedQuantitySum#2962]
(332) Join
Arguments: LeftOuter, ((plant#2712 = plant#2848) AND (product#2711 = product#2849))
(333) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, outboundUnit#2740, roundedQuantitySum#2962, minCalculationDateTime#2961]
(334) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, outboundUnit#2740, roundedQuantitySum#2962, minCalculationDateTime#2961, CASE WHEN isnotnull(minCalculationDateTime#2961) THEN minCalculationDateTime#2961 ELSE orderDateTime#2713 END AS stockDatetime#2963]
(335) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, outboundUnit#2740, roundedQuantitySum#2962, minCalculationDateTime#2961, stockDatetime#2963, CASE WHEN isnotnull(roundedQuantitySum#2962) THEN array(roundedQuantitySum#2962) ELSE array(0.0) END AS stockBatchQuantities#2964]
(336) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, outboundUnit#2740, roundedQuantitySum#2962, minCalculationDateTime#2961, stockDatetime#2963, stockBatchQuantities#2964, array(2199-01-01 00:00:00) AS stockBatchShelfLifeEndDatetimes#2965]
(337) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, outboundUnit#2740, roundedQuantitySum#2962, stockDatetime#2963, stockBatchQuantities#2964, stockBatchShelfLifeEndDatetimes#2965]
(338) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, outboundUnit#2740, stockDatetime#2963, stockBatchQuantities#2964, stockBatchShelfLifeEndDatetimes#2965]
(339) LogicalRelation
Arguments: parquet, [product#1572, plant#1573, demandChannel#1574, demandStream#1575, considerVariance#1576, demandTimeBuckets#1577, demandPointInTimeStart#1578, demandPointInTimeEnd#1579, demandPointInTime#1580], false
(340) Join
Arguments: LeftOuter, ((plant#1573 <=> plant#2712) AND (product#1572 <=> product#2711))
(341) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, outboundUnit#2740, stockDatetime#2963, stockBatchQuantities#2964, stockBatchShelfLifeEndDatetimes#2965, product#1572, plant#1573, demandChannel#1574, demandStream#1575, considerVariance#1576, demandTimeBuckets#1577, demandPointInTimeStart#1578, demandPointInTimeEnd#1579, demandPointInTime#1580, CASE WHEN isnotnull(product#1572) THEN struct(demandChannel, demandChannel#1574, demandStream, demandStream#1575, considerVariance, considerVariance#1576, demandTimeBuckets, demandTimeBuckets#1577, demandPointInTimeStart, demandPointInTimeStart#1578, demandPointInTimeEnd, demandPointInTimeEnd#1579, demandPointInTime, demandPointInTime#1580) ELSE cast(null as struct<demandChannel:string,demandStream:string,considerVariance:boolean,demandTimeBuckets:array<struct<demandStartDateTime:timestamp,demandQuantity:double,demandVariance:double>>,demandPointInTimeStart:timestamp,demandPointInTimeEnd:timestamp,demandPointInTime:array<struct<demandDateTime:timestamp,demandQuantity:double,demandVariance:double>>>) END AS rawDemands#1582]
(342) Aggregate
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, outboundUnit#2740, stockDatetime#2963, stockBatchQuantities#2964, stockBatchShelfLifeEndDatetimes#2965], [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, outboundUnit#2740, stockDatetime#2963, stockBatchQuantities#2964, stockBatchShelfLifeEndDatetimes#2965, collect_list(rawDemands#1582, 0, 0) AS rawDemands#1583]
(343) SubqueryAlias
Arguments: wl
(344) LogicalRelation
Arguments: parquet, [systemId#2661, internalUUID#2662, id#2663, displayId#2664, name#2665, category#2666, companyCode#2667, address#2668, mainDistributionChain#2669, mainPurchasingOrganization#2670, validPurchasingOrganizations#2671, productGroup#2672], false
(345) Repartition
Arguments: 37, true
(346) Project
Arguments: [systemId#2661, internalUUID#2662, id#2663, displayId#2664, name#2665, category#2666, companyCode#2667, address#2668, mainDistributionChain#2669, mainPurchasingOrganization#2670, validPurchasingOrganizations#2671, productGroup#2672, address#2668.timezone.code AS timezonecode#2674]
(347) Join
Arguments: LeftOuter, (plant#2712 <=> internalUUID#2662)
(348) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, outboundUnit#2740, stockDatetime#2963, stockBatchQuantities#2964, stockBatchShelfLifeEndDatetimes#2965, rawDemands#1583, systemId#2661, internalUUID#2662, id#2663, displayId#2664, name#2665, category#2666, companyCode#2667, address#2668, mainDistributionChain#2669, mainPurchasingOrganization#2670, validPurchasingOrganizations#2671, productGroup#2672, CASE WHEN isnotnull(timezonecode#2674) THEN timezonecode#2674 ELSE UTC END AS timezonecode#2676]
(349) Project
Arguments: [product#2711, plant#2712, orderDateTime#2713, productPlant#2724, outboundUnit#2740, stockDatetime#2963, stockBatchQuantities#2964, stockBatchShelfLifeEndDatetimes#2965, rawDemands#1583, timezonecode#2676]
(350) DeserializeToObject
Arguments: createexternalrow(invoke(product#2711.toString()), invoke(plant#2712.toString()), static_invoke(DateTimeUtils.toJavaTimestamp(orderDateTime#2713)), if (isnull(productPlant#2724)) null else createexternalrow(invoke(productPlant#2724.systemId.toString()), invoke(productPlant#2724.internalUUID.toString()), if (isnull(productPlant#2724.plant)) null else createexternalrow(invoke(productPlant#2724.plant.internalRefUUID.toString()), invoke(productPlant#2724.plant.id.toString()), StructField(internalRefUUID,StringType,true), StructField(id,StringType,true)), if (isnull(productPlant#2724.product)) null else createexternalrow(invoke(productPlant#2724.product.internalRefUUID.toString()), invoke(productPlant#2724.product.id.toString()), StructField(internalRefUUID,StringType,true), StructField(id,StringType,true)), static_invoke(DateTimeUtils.toJavaDate(productPlant#2724.blockedForReplenishmentStartingFrom)), if (isnull(productPlant#2724.productionAspect)) null else createexternalrow(if (isnull(productPlant#2724.productionAspect.productMovementPlants)) null else createexternalrow(if (isnull(productPlant#2724.productionAspect.productMovementPlants.unitOfIssue)) null else createexternalrow(invoke(productPlant#2724.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID.toString()), invoke(productPlant#2724.productionAspect.productMovementPlants.unitOfIssue.code.toString()), StructField(internalRefUUID,StringType,true), StructField(code,StringType,true)), StructField(unitOfIssue,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)), if (isnull(productPlant#2724.productionAspect.productPlanningPlants)) null else createexternalrow(if (isnull(productPlant#2724.productionAspect.productPlanningPlants.mrpType)) null else createexternalrow(invoke(productPlant#2724.productionAspect.productPlanningPlants.mrpType.internalRefUUID.toString()), invoke(productPlant#2724.productionAspect.productPlanningPlants.mrpType.code.toString()), StructField(internalRefUUID,StringType,true), StructField(code,StringType,true)), if (isnull(productPlant#2724.productionAspect.productPlanningPlants.abcIndicator)) null else createexternalrow(invoke(productPlant#2724.productionAspect.productPlanningPlants.abcIndicator.internalRefUUID.toString()), invoke(productPlant#2724.productionAspect.productPlanningPlants.abcIndicator.code.toString()), StructField(internalRefUUID,StringType,true), StructField(code,StringType,true)), if (isnull(productPlant#2724.productionAspect.productPlanningPlants.mrpController)) null else createexternalrow(invoke(productPlant#2724.productionAspect.productPlanningPlants.mrpController.internalRefUUID.toString()), invoke(productPlant#2724.productionAspect.productPlanningPlants.mrpController.id.toString()), StructField(internalRefUUID,StringType,true), StructField(id,StringType,true)), static_invoke(java.lang.Double.valueOf(productPlant#2724.productionAspect.productPlanningPlants.minimumLotSize)), if (isnull(productPlant#2724.productionAspect.productPlanningPlants.logisticalRoundingProfile)) null else createexternalrow(invoke(productPlant#2724.productionAspect.productPlanningPlants.logisticalRoundingProfile.internalRefUUID.toString()), invoke(productPlant#2724.productionAspect.productPlanningPlants.logisticalRoundingProfile.logisticalRoundingProfile.toString()), StructField(internalRefUUID,StringType,true), StructField(logisticalRoundingProfile,StringType,true)), StructField(mrpType,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true), StructField(abcIndicator,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true), StructField(mrpController,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true), StructField(minimumLotSize,DoubleType,true), StructField(logisticalRoundingProfile,StructType(StructField(internalRefUUID,StringType,true),StructField(logisticalRoundingProfile,StringType,true)),true)), StructField(productMovementPlants,StructType(StructField(unitOfIssue,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true), StructField(productPlanningPlants,StructType(StructField(mrpType,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(abcIndicator,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(mrpController,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(minimumLotSize,DoubleType,true),StructField(logisticalRoundingProfile,StructType(StructField(internalRefUUID,StringType,true),StructField(logisticalRoundingProfile,StringType,true)),true)),true)), if (isnull(productPlant#2724.salesPlant)) null else createexternalrow(if (isnull(productPlant#2724.salesPlant.loadingGroup)) null else createexternalrow(invoke(productPlant#2724.salesPlant.loadingGroup.internalRefUUID.toString()), invoke(productPlant#2724.salesPlant.loadingGroup.code.toString()), StructField(internalRefUUID,StringType,true), StructField(code,StringType,true)), StructField(loadingGroup,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)), mapobjects(lambdavariable(MapObject, StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true), true, 894), if (isnull(lambdavariable(MapObject, StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true), true, 894))) null else createexternalrow(static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true), true, 894).validFrom)), static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true), true, 894).validTo)), static_invoke(java.lang.Boolean.valueOf(lambdavariable(MapObject, StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true), true, 894).isListed)), StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true)), productPlant#2724.listing, Some(class scala.collection.mutable.ArraySeq)), if (isnull(productPlant#2724.sourceOfSupplyCategory)) null else createexternalrow(invoke(productPlant#2724.sourceOfSupplyCategory.internalRefUUID.toString()), invoke(productPlant#2724.sourceOfSupplyCategory.code.toString()), StructField(internalRefUUID,StringType,true), StructField(code,StringType,true)), StructField(systemId,StringType,true), StructField(internalUUID,StringType,true), StructField(plant,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true), StructField(product,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true), StructField(blockedForReplenishmentStartingFrom,DateType,true), StructField(productionAspect,StructType(StructField(productMovementPlants,StructType(StructField(unitOfIssue,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true),StructField(productPlanningPlants,StructType(StructField(mrpType,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(abcIndicator,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(mrpController,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(minimumLotSize,DoubleType,true),StructField(logisticalRoundingProfile,StructType(StructField(internalRefUUID,StringType,true),StructField(logisticalRoundingProfile,StringType,true)),true)),true)),true), StructField(salesPlant,StructType(StructField(loadingGroup,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true), StructField(listing,ArrayType(StructType(StructField(validFrom,TimestampType,true),StructField(validTo,TimestampType,true),StructField(isListed,BooleanType,true)),true),true), StructField(sourceOfSupplyCategory,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)), static_invoke(java.lang.Double.valueOf(outboundUnit#2740)), static_invoke(DateTimeUtils.toJavaTimestamp(stockDatetime#2963)), mapobjects(lambdavariable(MapObject, DoubleType, true, 895), static_invoke(java.lang.Double.valueOf(cast(lambdavariable(MapObject, DoubleType, true, 895) as double))), stockBatchQuantities#2964, Some(class scala.collection.mutable.ArraySeq)), mapobjects(lambdavariable(MapObject, TimestampType, false, 896), assertnotnull(static_invoke(DateTimeUtils.toJavaTimestamp(cast(lambdavariable(MapObject, TimestampType, false, 896) as timestamp)))), stockBatchShelfLifeEndDatetimes#2965, Some(class scala.collection.mutable.ArraySeq)), mapobjects(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897), assertnotnull(if (isnull(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897))) null else createexternalrow(invoke(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandChannel.toString()), invoke(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandStream.toString()), static_invoke(java.lang.Boolean.valueOf(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).considerVariance)), mapobjects(lambdavariable(MapObject, StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 898), if (isnull(lambdavariable(MapObject, StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 898))) null else createexternalrow(static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 898).demandStartDateTime)), static_invoke(java.lang.Double.valueOf(lambdavariable(MapObject, StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 898).demandQuantity)), static_invoke(java.lang.Double.valueOf(lambdavariable(MapObject, StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 898).demandVariance)), StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true)), lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandTimeBuckets, Some(class scala.collection.mutable.ArraySeq)), static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandPointInTimeStart)), static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandPointInTimeEnd)), mapobjects(lambdavariable(MapObject, StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 899), if (isnull(lambdavariable(MapObject, StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 899))) null else createexternalrow(static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 899).demandDateTime)), static_invoke(java.lang.Double.valueOf(lambdavariable(MapObject, StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 899).demandQuantity)), static_invoke(java.lang.Double.valueOf(lambdavariable(MapObject, StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 899).demandVariance)), StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true)), lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandPointInTime, Some(class scala.collection.mutable.ArraySeq)), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true))), rawDemands#1583, Some(class scala.collection.mutable.ArraySeq)), invoke(timezonecode#2676.toString()), StructField(product,StringType,true), StructField(plant,StringType,true), StructField(orderDateTime,TimestampType,true), StructField(productPlant,StructType(StructField(systemId,StringType,true),StructField(internalUUID,StringType,true),StructField(plant,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(product,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(blockedForReplenishmentStartingFrom,DateType,true),StructField(productionAspect,StructType(StructField(productMovementPlants,StructType(StructField(unitOfIssue,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true),StructField(productPlanningPlants,StructType(StructField(mrpType,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(abcIndicator,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(mrpController,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(minimumLotSize,DoubleType,true),StructField(logisticalRoundingProfile,StructType(StructField(internalRefUUID,StringType,true),StructField(logisticalRoundingProfile,StringType,true)),true)),true)),true),StructField(salesPlant,StructType(StructField(loadingGroup,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true),StructField(listing,ArrayType(StructType(StructField(validFrom,TimestampType,true),StructField(validTo,TimestampType,true),StructField(isListed,BooleanType,true)),true),true),StructField(sourceOfSupplyCategory,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true), StructField(outboundUnit,DoubleType,true), StructField(stockDatetime,TimestampType,true), StructField(stockBatchQuantities,ArrayType(DoubleType,true),false), StructField(stockBatchShelfLifeEndDatetimes,ArrayType(TimestampType,false),false), StructField(rawDemands,ArrayType(StructType(StructField(demandChannel,StringType,true),StructField(demandStream,StringType,true),StructField(considerVariance,BooleanType,true),StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true),StructField(demandPointInTimeStart,TimestampType,true),StructField(demandPointInTimeEnd,TimestampType,true),StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true)),false),false), StructField(timezonecode,StringType,true)), obj#2697: org.apache.spark.sql.Row
(351) MapElements
Arguments: com.sap.s4hana.eureka.business.crporderquantitykpiservice.core.business.datasnapshot.DemandTransformatorImpl$$Lambda/0x0000000802111db0@1fa786b, interface org.apache.spark.sql.Row, [StructField(product,StringType,true), StructField(plant,StringType,true), StructField(orderDateTime,TimestampType,true), StructField(productPlant,StructType(StructField(systemId,StringType,true),StructField(internalUUID,StringType,true),StructField(plant,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(product,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(blockedForReplenishmentStartingFrom,DateType,true),StructField(productionAspect,StructType(StructField(productMovementPlants,StructType(StructField(unitOfIssue,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true),StructField(productPlanningPlants,StructType(StructField(mrpType,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(abcIndicator,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(mrpController,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(minimumLotSize,DoubleType,true),StructField(logisticalRoundingProfile,StructType(StructField(internalRefUUID,StringType,true),StructField(logisticalRoundingProfile,StringType,true)),true)),true)),true),StructField(salesPlant,StructType(StructField(loadingGroup,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true),StructField(listing,ArrayType(StructType(StructField(validFrom,TimestampType,true),StructField(validTo,TimestampType,true),StructField(isListed,BooleanType,true)),true),true),StructField(sourceOfSupplyCategory,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true), StructField(outboundUnit,DoubleType,true), StructField(stockDatetime,TimestampType,true), StructField(stockBatchQuantities,ArrayType(DoubleType,true),false), StructField(stockBatchShelfLifeEndDatetimes,ArrayType(TimestampType,false),false), StructField(rawDemands,ArrayType(StructType(StructField(demandChannel,StringType,true),StructField(demandStream,StringType,true),StructField(considerVariance,BooleanType,true),StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true),StructField(demandPointInTimeStart,TimestampType,true),StructField(demandPointInTimeEnd,TimestampType,true),StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true)),false),false), StructField(timezonecode,StringType,true)], obj#2702: org.apache.spark.sql.Row
(352) SerializeFromObject
Arguments: [if (invoke(assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt(0))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 0, product), StringType, ObjectType(class java.lang.String)))) AS product#2707, if (invoke(assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt(1))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 1, plant), StringType, ObjectType(class java.lang.String)))) AS plant#2708, if (invoke(assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt(2))) null else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), assertnotnull(if (isnull(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)))) null else named_struct(demandChannel, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(0))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 0, demandChannel), StringType, ObjectType(class java.lang.String)))), demandStream, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(1))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 1, demandStream), StringType, ObjectType(class java.lang.String)))), considerVariance, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(2))) null else invoke(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 2, considerVariance), BooleanType, ObjectType(class java.lang.Boolean)).booleanValue()), demandValues, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(3))) null else if (invoke(class [D.isInstance(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 3, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object))))) static_invoke(ArrayData.toArrayData(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 3, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object)))) else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 885), assertnotnull(invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 885), DoubleType, ObjectType(class java.lang.Double)).doubleValue())), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 3, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object)), None), demandVariances, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(4))) null else if (invoke(class [D.isInstance(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object))))) static_invoke(ArrayData.toArrayData(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object)))) else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 886), invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 886), DoubleType, ObjectType(class java.lang.Double)).doubleValue()), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object)), None), anchorDatetimes, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(5))) null else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 887), assertnotnull(static_invoke(DateTimeUtils.fromJavaTimestamp(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 887), TimestampType, ObjectType(class java.sql.Timestamp))))), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 5, anchorDatetimes), ArrayType(TimestampType,false), ObjectType(class java.lang.Object)), None), anchorWeekdays, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(6))) null else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 888), assertnotnull(static_invoke(UTF8String.fromString(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 888), StringType, ObjectType(class java.lang.String))))), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 6, anchorWeekdays), ArrayType(StringType,false), ObjectType(class java.lang.Object)), None), anchorIndices, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(7))) null else if (invoke(class [I.isInstance(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 7, anchorIndices), ArrayType(IntegerType,false), ObjectType(class java.lang.Object))))) static_invoke(ArrayData.toArrayData(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 7, anchorIndices), ArrayType(IntegerType,false), ObjectType(class java.lang.Object)))) else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 889), assertnotnull(invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 889), IntegerType, ObjectType(class java.lang.Integer)).intValue())), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 7, anchorIndices), ArrayType(IntegerType,false), ObjectType(class java.lang.Object)), None))), validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 2, dayBucketDemands), ArrayType(StructType(StructField(demandChannel,StringType,true),StructField(demandStream,StringType,true),StructField(considerVariance,BooleanType,true),StructField(demandValues,ArrayType(DoubleType,false),true),StructField(demandVariances,ArrayType(DoubleType,true),true),StructField(anchorDatetimes,ArrayType(TimestampType,false),true),StructField(anchorWeekdays,ArrayType(StringType,false),true),StructField(anchorIndices,ArrayType(IntegerType,false),true)),false), ObjectType(class java.lang.Object)), None) AS dayBucketDemands#2709, if (invoke(assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt(3))) null else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), assertnotnull(if (isnull(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)))) null else named_struct(demandChannel, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(0))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 0, demandChannel), StringType, ObjectType(class java.lang.String)))), demandStream, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(1))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 1, demandStream), StringType, ObjectType(class java.lang.String)))), considerVariance, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(2))) null else invoke(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 2, considerVariance), BooleanType, ObjectType(class java.lang.Boolean)).booleanValue()), demandDatetimes, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(3))) null else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 891), assertnotnull(static_invoke(DateTimeUtils.fromJavaTimestamp(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 891), TimestampType, ObjectType(class java.sql.Timestamp))))), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 3, demandDatetimes), ArrayType(TimestampType,false), ObjectType(class java.lang.Object)), None), demandValues, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(4))) null else if (invoke(class [D.isInstance(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object))))) static_invoke(ArrayData.toArrayData(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object)))) else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 892), assertnotnull(invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 892), DoubleType, ObjectType(class java.lang.Double)).doubleValue())), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object)), None), demandVariances, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(5))) null else if (invoke(class [D.isInstance(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 5, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object))))) static_invoke(ArrayData.toArrayData(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 5, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object)))) else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 893), invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 893), DoubleType, ObjectType(class java.lang.Double)).doubleValue()), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 5, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object)), None), horizonStartDatetime, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(6))) null else static_invoke(DateTimeUtils.fromJavaTimestamp(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 6, horizonStartDatetime), TimestampType, ObjectType(class java.sql.Timestamp)))), horizonEndDatetime, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(7))) null else static_invoke(DateTimeUtils.fromJavaTimestamp(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 7, horizonEndDatetime), TimestampType, ObjectType(class java.sql.Timestamp)))))), validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 3, pointInTimeDemands), ArrayType(StructType(StructField(demandChannel,StringType,true),StructField(demandStream,StringType,true),StructField(considerVariance,BooleanType,true),StructField(demandDatetimes,ArrayType(TimestampType,false),true),StructField(demandValues,ArrayType(DoubleType,false),true),StructField(demandVariances,ArrayType(DoubleType,true),true),StructField(horizonStartDatetime,TimestampType,true),StructField(horizonEndDatetime,TimestampType,true)),false), ObjectType(class java.lang.Object)), None) AS pointInTimeDemands#2710]
(353) Join
Arguments: LeftOuter, ((plant#2708 <=> plant#1128) AND (product#2707 <=> product#1127))
(354) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218, stockDatetime#1569, stockBatchQuantities#1570, stockBatchShelfLifeEndDatetimes#1571, plant#2708, dayBucketDemands#2709, pointInTimeDemands#2710]
(355) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218, stockDatetime#1569, stockBatchQuantities#1570, stockBatchShelfLifeEndDatetimes#1571, dayBucketDemands#2709, pointInTimeDemands#2710]
(356) LogicalRelation
Arguments: parquet, [product#5271, plant#5272, orderDateTime#5273, planningStartDateTime#5274], false
(357) RepartitionByExpression
Arguments: [product#5271, plant#5272], 37
(358) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273]
(359) LogicalRelation
Arguments: parquet, [systemId#5275, internalUUID#5276, plant#5277, product#5278, blockedForReplenishmentStartingFrom#5279, productionAspect#5280, salesPlant#5281, listing#5282, sourceOfSupplyCategory#5283], false
(360) Repartition
Arguments: 37, true
(361) Project
Arguments: [systemId#5275, internalUUID#5276, plant#5277, product#5278, blockedForReplenishmentStartingFrom#5279, productionAspect#5280, salesPlant#5281, listing#5282, sourceOfSupplyCategory#5283, struct(systemId, systemId#5275, internalUUID, internalUUID#5276, plant, plant#5277, product, product#5278, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#5279, productionAspect, productionAspect#5280, salesPlant, salesPlant#5281, listing, listing#5282, sourceOfSupplyCategory, sourceOfSupplyCategory#5283) AS productPlant#5284]
(362) Project
Arguments: [productPlant#5284]
(363) Join
Arguments: LeftOuter, ((product#5271 <=> productPlant#5284.product.internalRefUUID) AND (plant#5272 <=> productPlant#5284.plant.internalRefUUID))
(364) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273, productPlant#5284]
(365) LogicalRelation
Arguments: parquet, [systemId#5285, internalUUID#5286, id#5287, displayId#5288, name#5289, baseUnitOfMeasure#5290, unitOfMeasures#5291, unitOfMeasureConversions#5292, productionAspect#5293, salesAspect#5294, procurementAspect#5295], false
(366) Repartition
Arguments: 37, true
(367) Join
Arguments: LeftOuter, (product#5271 = internalUUID#5286)
(368) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273, productPlant#5284, systemId#5285, internalUUID#5286, id#5287, displayId#5288, name#5289, baseUnitOfMeasure#5290, unitOfMeasures#5291, unitOfMeasureConversions#5292, productionAspect#5293, salesAspect#5294, procurementAspect#5295, filter(unitOfMeasureConversions#5292, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#5284.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#5284.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#5290.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#5290.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#5296]
(369) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5296.quantityNumerator), true, [quantityNumerator#5297]
(370) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273, productPlant#5284, systemId#5285, internalUUID#5286, id#5287, displayId#5288, name#5289, baseUnitOfMeasure#5290, unitOfMeasures#5291, unitOfMeasureConversions#5292, productionAspect#5293, salesAspect#5294, procurementAspect#5295, filteredUnitOfMeasureConversions#5296, quantityNumerator#5297]
(371) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5296.quantityDenominator), true, [quantityDenominator#5298]
(372) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273, productPlant#5284, systemId#5285, internalUUID#5286, id#5287, displayId#5288, name#5289, baseUnitOfMeasure#5290, unitOfMeasures#5291, unitOfMeasureConversions#5292, productionAspect#5293, salesAspect#5294, procurementAspect#5295, filteredUnitOfMeasureConversions#5296, quantityNumerator#5297, quantityDenominator#5298]
(373) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273, productPlant#5284, systemId#5285, internalUUID#5286, id#5287, displayId#5288, name#5289, baseUnitOfMeasure#5290, unitOfMeasures#5291, unitOfMeasureConversions#5292, productionAspect#5293, salesAspect#5294, procurementAspect#5295, filteredUnitOfMeasureConversions#5296, quantityNumerator#5297, quantityDenominator#5298, (cast(quantityNumerator#5297 as double) / cast(quantityDenominator#5298 as double)) AS outboundUnit#5299]
(374) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273, productPlant#5284, systemId#5285, internalUUID#5286, id#5287, displayId#5288, name#5289, baseUnitOfMeasure#5290, unitOfMeasures#5291, unitOfMeasureConversions#5292, productionAspect#5293, salesAspect#5294, procurementAspect#5295, filteredUnitOfMeasureConversions#5296, quantityNumerator#5297, quantityDenominator#5298, CASE WHEN (isnull(outboundUnit#5299) OR (outboundUnit#5299 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#5299 END AS outboundUnit#5300]
(375) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273, productPlant#5284, outboundUnit#5300]
(376) LogicalRelation
Arguments: parquet, [systemId#5301, internalUUID#5302, product#5303, plant#5304, calculationDateTime#5305, stockQuantities#5306], false
(377) Repartition
Arguments: 37, true
(378) LogicalRelation
Arguments: parquet, [marketUnit#5307, description#5308, articleHierarchy#5309, defaultCurrency#5310, responsibilities#5311, replenishmentTypes#5312, distributionCenters#5313, assignedArticleHierarchyNodes#5314, minOrderQtySetting#5315, minOrderQtySettingInternal#5316, listingCheck#5317, odsSelection#5318, demandProfiles#5319, constraintProfiles#5320, optimizationProfiles#5321, orderGroupSplitProfiles#5322, supplierMinimumProfiles#5323, multipleRestrictionProfiles#5324, preferredUomSource#5325, handlingOfUnfulfilledDemands#5326, negligibleQuantitiesThreshold#5327, eventtype#5328], false
(379) Repartition
Arguments: 37, true
(380) Filter
Arguments: (marketUnit#5307 <=> 10000_OP_PERF)
(381) Project
Arguments: [marketUnit#5307, description#5308, articleHierarchy#5309, defaultCurrency#5310, responsibilities#5311, replenishmentTypes#5312, distributionCenters#5313, assignedArticleHierarchyNodes#5314, minOrderQtySetting#5315, minOrderQtySettingInternal#5316, listingCheck#5317, odsSelection#5318, demandProfiles#5319, constraintProfiles#5320, optimizationProfiles#5321, orderGroupSplitProfiles#5322, supplierMinimumProfiles#5323, multipleRestrictionProfiles#5324, preferredUomSource#5325, handlingOfUnfulfilledDemands#5326, negligibleQuantitiesThreshold#5327, eventtype#5328]
(382) Project
Arguments: [distributionCenters#5313]
(383) Generate
Arguments: explode(distributionCenters#5313), false, [distributionCenters#5329]
(384) Project
Arguments: [distributionCenters#5329]
(385) Generate
Arguments: explode(distributionCenters#5329.storageLocations), false, [storageLocations#5330]
(386) Project
Arguments: [distributionCenters#5329.id AS plantId#5331, distributionCenters#5329.internalRefUUID AS plantUuid#5332, storageLocations#5330]
(387) Project
Arguments: [plantId#5331, plantUuid#5332, storageLocations#5330.id AS storageLocId#5333, storageLocations#5330.internalRefUUID AS storageLocUuid#5334]
(388) LogicalRelation
Arguments: parquet, [product#5335, plant#5336, orderDateTime#5337, planningStartDateTime#5338], false
(389) RepartitionByExpression
Arguments: [product#5335, plant#5336], 37
(390) Project
Arguments: [product#5335, plant#5336, orderDateTime#5337]
(391) LogicalRelation
Arguments: parquet, [systemId#5339, internalUUID#5340, plant#5341, product#5342, blockedForReplenishmentStartingFrom#5343, productionAspect#5344, salesPlant#5345, listing#5346, sourceOfSupplyCategory#5347], false
(392) Repartition
Arguments: 37, true
(393) Project
Arguments: [systemId#5339, internalUUID#5340, plant#5341, product#5342, blockedForReplenishmentStartingFrom#5343, productionAspect#5344, salesPlant#5345, listing#5346, sourceOfSupplyCategory#5347, struct(systemId, systemId#5339, internalUUID, internalUUID#5340, plant, plant#5341, product, product#5342, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#5343, productionAspect, productionAspect#5344, salesPlant, salesPlant#5345, listing, listing#5346, sourceOfSupplyCategory, sourceOfSupplyCategory#5347) AS productPlant#5348]
(394) Project
Arguments: [productPlant#5348]
(395) Join
Arguments: LeftOuter, ((product#5335 <=> productPlant#5348.product.internalRefUUID) AND (plant#5336 <=> productPlant#5348.plant.internalRefUUID))
(396) Project
Arguments: [product#5335, plant#5336, orderDateTime#5337, productPlant#5348]
(397) LogicalRelation
Arguments: parquet, [systemId#5349, internalUUID#5350, id#5351, displayId#5352, name#5353, baseUnitOfMeasure#5354, unitOfMeasures#5355, unitOfMeasureConversions#5356, productionAspect#5357, salesAspect#5358, procurementAspect#5359], false
(398) Repartition
Arguments: 37, true
(399) Join
Arguments: LeftOuter, (product#5335 = internalUUID#5350)
(400) Project
Arguments: [product#5335, plant#5336, orderDateTime#5337, productPlant#5348, systemId#5349, internalUUID#5350, id#5351, displayId#5352, name#5353, baseUnitOfMeasure#5354, unitOfMeasures#5355, unitOfMeasureConversions#5356, productionAspect#5357, salesAspect#5358, procurementAspect#5359, filter(unitOfMeasureConversions#5356, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#5348.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#5348.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#5354.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#5354.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#5360]
(401) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5360.quantityNumerator), true, [quantityNumerator#5361]
(402) Project
Arguments: [product#5335, plant#5336, orderDateTime#5337, productPlant#5348, systemId#5349, internalUUID#5350, id#5351, displayId#5352, name#5353, baseUnitOfMeasure#5354, unitOfMeasures#5355, unitOfMeasureConversions#5356, productionAspect#5357, salesAspect#5358, procurementAspect#5359, filteredUnitOfMeasureConversions#5360, quantityNumerator#5361]
(403) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5360.quantityDenominator), true, [quantityDenominator#5362]
(404) Project
Arguments: [product#5335, plant#5336, orderDateTime#5337, productPlant#5348, systemId#5349, internalUUID#5350, id#5351, displayId#5352, name#5353, baseUnitOfMeasure#5354, unitOfMeasures#5355, unitOfMeasureConversions#5356, productionAspect#5357, salesAspect#5358, procurementAspect#5359, filteredUnitOfMeasureConversions#5360, quantityNumerator#5361, quantityDenominator#5362]
(405) Project
Arguments: [product#5335, plant#5336, orderDateTime#5337, productPlant#5348, systemId#5349, internalUUID#5350, id#5351, displayId#5352, name#5353, baseUnitOfMeasure#5354, unitOfMeasures#5355, unitOfMeasureConversions#5356, productionAspect#5357, salesAspect#5358, procurementAspect#5359, filteredUnitOfMeasureConversions#5360, quantityNumerator#5361, quantityDenominator#5362, (cast(quantityNumerator#5361 as double) / cast(quantityDenominator#5362 as double)) AS outboundUnit#5363]
(406) Project
Arguments: [product#5335, plant#5336, orderDateTime#5337, productPlant#5348, systemId#5349, internalUUID#5350, id#5351, displayId#5352, name#5353, baseUnitOfMeasure#5354, unitOfMeasures#5355, unitOfMeasureConversions#5356, productionAspect#5357, salesAspect#5358, procurementAspect#5359, filteredUnitOfMeasureConversions#5360, quantityNumerator#5361, quantityDenominator#5362, CASE WHEN (isnull(outboundUnit#5363) OR (outboundUnit#5363 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#5363 END AS outboundUnit#5364]
(407) Project
Arguments: [product#5335, plant#5336, orderDateTime#5337, productPlant#5348, outboundUnit#5364]
(408) Project
Arguments: [plant#5336]
(409) Deduplicate
Arguments: [plant#5336]
(410) Join
Arguments: Inner, (plantUuid#5332 = plant#5336)
(411) Project
Arguments: [plantId#5331, plantUuid#5332, storageLocId#5333, storageLocUuid#5334]
(412) Join
Arguments: Inner, (plant#5304.internalRefUUID <=> plantUuid#5332)
(413) Generate
Arguments: explode(filter(stockQuantities#5306, lambdafunction(((lambda x#1330.storageLocation.internalRefUuid = storageLocUuid#5334) AND (lambda x#1330.storageLocation.Id = storageLocId#5333)), lambda x#1330, false))), false, [stockQuantity#5365]
(414) Project
Arguments: [systemId#5301, internalUUID#5302, product#5303, plant#5304, calculationDateTime#5305, stockQuantities#5306, plantId#5331, plantUuid#5332, storageLocId#5333, storageLocUuid#5334, stockQuantity#5365]
(415) Aggregate
Arguments: [plantUuid#5332, internalUUID#5302, plant#5304, product#5303, systemId#5301], [plantUuid#5332, internalUUID#5302, plant#5304, product#5303, systemId#5301, first(calculationDateTime#5305, false) AS calculationDateTime#5366, collect_list(stockQuantity#5365, 0, 0) AS stockQuantities#5367]
(416) Project
Arguments: [systemId#5301, internalUUID#5302, product#5303, plant#5304, calculationDateTime#5366, stockQuantities#5367]
(417) Generate
Arguments: explode(stockQuantities#5367), false, [stockQuantity#5368]
(418) Project
Arguments: [systemId#5301, internalUUID#5302, product#5303, plant#5304, calculationDateTime#5366, stockQuantities#5367, stockQuantity#5368]
(419) Project
Arguments: [plant#5304.id AS plant#5369, plant#5304.internalRefUUID AS plantUuid#5370, product#5303.id AS product#5371, product#5303.internalRefUUID AS productUuid#5372, calculationDateTime#5366, stockQuantity#5368.storagelocation.id AS storageLocId#5373, stockQuantity#5368.storagelocation.internalRefUUID AS storageLocUuid#5374, stockQuantity#5368.quantity.measure AS quantity#5375, stockQuantity#5368.specialStockIndicator.code AS specialStockIndicator#5376, stockQuantity#5368.stockType.code AS stockType#5377]
(420) Filter
Arguments: ((specialStockIndicator#5376 = ) AND (stockType#5377 = 01))
(421) LogicalRelation
Arguments: parquet, [product#5378, plant#5379, orderDateTime#5380, planningStartDateTime#5381], false
(422) RepartitionByExpression
Arguments: [product#5378, plant#5379], 37
(423) Project
Arguments: [product#5378, plant#5379, orderDateTime#5380]
(424) LogicalRelation
Arguments: parquet, [systemId#5382, internalUUID#5383, plant#5384, product#5385, blockedForReplenishmentStartingFrom#5386, productionAspect#5387, salesPlant#5388, listing#5389, sourceOfSupplyCategory#5390], false
(425) Repartition
Arguments: 37, true
(426) Project
Arguments: [systemId#5382, internalUUID#5383, plant#5384, product#5385, blockedForReplenishmentStartingFrom#5386, productionAspect#5387, salesPlant#5388, listing#5389, sourceOfSupplyCategory#5390, struct(systemId, systemId#5382, internalUUID, internalUUID#5383, plant, plant#5384, product, product#5385, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#5386, productionAspect, productionAspect#5387, salesPlant, salesPlant#5388, listing, listing#5389, sourceOfSupplyCategory, sourceOfSupplyCategory#5390) AS productPlant#5391]
(427) Project
Arguments: [productPlant#5391]
(428) Join
Arguments: LeftOuter, ((product#5378 <=> productPlant#5391.product.internalRefUUID) AND (plant#5379 <=> productPlant#5391.plant.internalRefUUID))
(429) Project
Arguments: [product#5378, plant#5379, orderDateTime#5380, productPlant#5391]
(430) LogicalRelation
Arguments: parquet, [systemId#5392, internalUUID#5393, id#5394, displayId#5395, name#5396, baseUnitOfMeasure#5397, unitOfMeasures#5398, unitOfMeasureConversions#5399, productionAspect#5400, salesAspect#5401, procurementAspect#5402], false
(431) Repartition
Arguments: 37, true
(432) Join
Arguments: LeftOuter, (product#5378 = internalUUID#5393)
(433) Project
Arguments: [product#5378, plant#5379, orderDateTime#5380, productPlant#5391, systemId#5392, internalUUID#5393, id#5394, displayId#5395, name#5396, baseUnitOfMeasure#5397, unitOfMeasures#5398, unitOfMeasureConversions#5399, productionAspect#5400, salesAspect#5401, procurementAspect#5402, filter(unitOfMeasureConversions#5399, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#5391.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#5391.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#5397.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#5397.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#5403]
(434) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5403.quantityNumerator), true, [quantityNumerator#5404]
(435) Project
Arguments: [product#5378, plant#5379, orderDateTime#5380, productPlant#5391, systemId#5392, internalUUID#5393, id#5394, displayId#5395, name#5396, baseUnitOfMeasure#5397, unitOfMeasures#5398, unitOfMeasureConversions#5399, productionAspect#5400, salesAspect#5401, procurementAspect#5402, filteredUnitOfMeasureConversions#5403, quantityNumerator#5404]
(436) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5403.quantityDenominator), true, [quantityDenominator#5405]
(437) Project
Arguments: [product#5378, plant#5379, orderDateTime#5380, productPlant#5391, systemId#5392, internalUUID#5393, id#5394, displayId#5395, name#5396, baseUnitOfMeasure#5397, unitOfMeasures#5398, unitOfMeasureConversions#5399, productionAspect#5400, salesAspect#5401, procurementAspect#5402, filteredUnitOfMeasureConversions#5403, quantityNumerator#5404, quantityDenominator#5405]
(438) Project
Arguments: [product#5378, plant#5379, orderDateTime#5380, productPlant#5391, systemId#5392, internalUUID#5393, id#5394, displayId#5395, name#5396, baseUnitOfMeasure#5397, unitOfMeasures#5398, unitOfMeasureConversions#5399, productionAspect#5400, salesAspect#5401, procurementAspect#5402, filteredUnitOfMeasureConversions#5403, quantityNumerator#5404, quantityDenominator#5405, (cast(quantityNumerator#5404 as double) / cast(quantityDenominator#5405 as double)) AS outboundUnit#5406]
(439) Project
Arguments: [product#5378, plant#5379, orderDateTime#5380, productPlant#5391, systemId#5392, internalUUID#5393, id#5394, displayId#5395, name#5396, baseUnitOfMeasure#5397, unitOfMeasures#5398, unitOfMeasureConversions#5399, productionAspect#5400, salesAspect#5401, procurementAspect#5402, filteredUnitOfMeasureConversions#5403, quantityNumerator#5404, quantityDenominator#5405, CASE WHEN (isnull(outboundUnit#5406) OR (outboundUnit#5406 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#5406 END AS outboundUnit#5407]
(440) Project
Arguments: [product#5378, plant#5379, orderDateTime#5380, productPlant#5391, outboundUnit#5407]
(441) Join
Arguments: Inner, ((plantUuid#5370 = plant#5379) AND (productUuid#5372 = product#5378))
(442) Filter
Arguments: (calculationDateTime#5366 <= orderDateTime#5380)
(443) Project
Arguments: [plantUuid#5370 AS plant#5408, productUuid#5372 AS product#5409, storageLocId#5373, calculationDateTime#5366, quantity#5375]
(444) LogicalRelation
Arguments: parquet, [systemId#5410, internalUUID#5411, product#5412, plant#5413, calculationDateTime#5414, stockQuantities#5415], false
(445) Repartition
Arguments: 37, true
(446) LogicalRelation
Arguments: parquet, [marketUnit#5416, description#5417, articleHierarchy#5418, defaultCurrency#5419, responsibilities#5420, replenishmentTypes#5421, distributionCenters#5422, assignedArticleHierarchyNodes#5423, minOrderQtySetting#5424, minOrderQtySettingInternal#5425, listingCheck#5426, odsSelection#5427, demandProfiles#5428, constraintProfiles#5429, optimizationProfiles#5430, orderGroupSplitProfiles#5431, supplierMinimumProfiles#5432, multipleRestrictionProfiles#5433, preferredUomSource#5434, handlingOfUnfulfilledDemands#5435, negligibleQuantitiesThreshold#5436, eventtype#5437], false
(447) Repartition
Arguments: 37, true
(448) Filter
Arguments: (marketUnit#5416 <=> 10000_OP_PERF)
(449) Project
Arguments: [marketUnit#5416, description#5417, articleHierarchy#5418, defaultCurrency#5419, responsibilities#5420, replenishmentTypes#5421, distributionCenters#5422, assignedArticleHierarchyNodes#5423, minOrderQtySetting#5424, minOrderQtySettingInternal#5425, listingCheck#5426, odsSelection#5427, demandProfiles#5428, constraintProfiles#5429, optimizationProfiles#5430, orderGroupSplitProfiles#5431, supplierMinimumProfiles#5432, multipleRestrictionProfiles#5433, preferredUomSource#5434, handlingOfUnfulfilledDemands#5435, negligibleQuantitiesThreshold#5436, eventtype#5437]
(450) Project
Arguments: [distributionCenters#5422]
(451) Generate
Arguments: explode(distributionCenters#5422), false, [distributionCenters#5438]
(452) Project
Arguments: [distributionCenters#5438]
(453) Generate
Arguments: explode(distributionCenters#5438.storageLocations), false, [storageLocations#5439]
(454) Project
Arguments: [distributionCenters#5438.id AS plantId#5440, distributionCenters#5438.internalRefUUID AS plantUuid#5441, storageLocations#5439]
(455) Project
Arguments: [plantId#5440, plantUuid#5441, storageLocations#5439.id AS storageLocId#5442, storageLocations#5439.internalRefUUID AS storageLocUuid#5443]
(456) LogicalRelation
Arguments: parquet, [product#5444, plant#5445, orderDateTime#5446, planningStartDateTime#5447], false
(457) RepartitionByExpression
Arguments: [product#5444, plant#5445], 37
(458) Project
Arguments: [product#5444, plant#5445, orderDateTime#5446]
(459) LogicalRelation
Arguments: parquet, [systemId#5448, internalUUID#5449, plant#5450, product#5451, blockedForReplenishmentStartingFrom#5452, productionAspect#5453, salesPlant#5454, listing#5455, sourceOfSupplyCategory#5456], false
(460) Repartition
Arguments: 37, true
(461) Project
Arguments: [systemId#5448, internalUUID#5449, plant#5450, product#5451, blockedForReplenishmentStartingFrom#5452, productionAspect#5453, salesPlant#5454, listing#5455, sourceOfSupplyCategory#5456, struct(systemId, systemId#5448, internalUUID, internalUUID#5449, plant, plant#5450, product, product#5451, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#5452, productionAspect, productionAspect#5453, salesPlant, salesPlant#5454, listing, listing#5455, sourceOfSupplyCategory, sourceOfSupplyCategory#5456) AS productPlant#5457]
(462) Project
Arguments: [productPlant#5457]
(463) Join
Arguments: LeftOuter, ((product#5444 <=> productPlant#5457.product.internalRefUUID) AND (plant#5445 <=> productPlant#5457.plant.internalRefUUID))
(464) Project
Arguments: [product#5444, plant#5445, orderDateTime#5446, productPlant#5457]
(465) LogicalRelation
Arguments: parquet, [systemId#5458, internalUUID#5459, id#5460, displayId#5461, name#5462, baseUnitOfMeasure#5463, unitOfMeasures#5464, unitOfMeasureConversions#5465, productionAspect#5466, salesAspect#5467, procurementAspect#5468], false
(466) Repartition
Arguments: 37, true
(467) Join
Arguments: LeftOuter, (product#5444 = internalUUID#5459)
(468) Project
Arguments: [product#5444, plant#5445, orderDateTime#5446, productPlant#5457, systemId#5458, internalUUID#5459, id#5460, displayId#5461, name#5462, baseUnitOfMeasure#5463, unitOfMeasures#5464, unitOfMeasureConversions#5465, productionAspect#5466, salesAspect#5467, procurementAspect#5468, filter(unitOfMeasureConversions#5465, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#5457.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#5457.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#5463.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#5463.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#5469]
(469) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5469.quantityNumerator), true, [quantityNumerator#5470]
(470) Project
Arguments: [product#5444, plant#5445, orderDateTime#5446, productPlant#5457, systemId#5458, internalUUID#5459, id#5460, displayId#5461, name#5462, baseUnitOfMeasure#5463, unitOfMeasures#5464, unitOfMeasureConversions#5465, productionAspect#5466, salesAspect#5467, procurementAspect#5468, filteredUnitOfMeasureConversions#5469, quantityNumerator#5470]
(471) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5469.quantityDenominator), true, [quantityDenominator#5471]
(472) Project
Arguments: [product#5444, plant#5445, orderDateTime#5446, productPlant#5457, systemId#5458, internalUUID#5459, id#5460, displayId#5461, name#5462, baseUnitOfMeasure#5463, unitOfMeasures#5464, unitOfMeasureConversions#5465, productionAspect#5466, salesAspect#5467, procurementAspect#5468, filteredUnitOfMeasureConversions#5469, quantityNumerator#5470, quantityDenominator#5471]
(473) Project
Arguments: [product#5444, plant#5445, orderDateTime#5446, productPlant#5457, systemId#5458, internalUUID#5459, id#5460, displayId#5461, name#5462, baseUnitOfMeasure#5463, unitOfMeasures#5464, unitOfMeasureConversions#5465, productionAspect#5466, salesAspect#5467, procurementAspect#5468, filteredUnitOfMeasureConversions#5469, quantityNumerator#5470, quantityDenominator#5471, (cast(quantityNumerator#5470 as double) / cast(quantityDenominator#5471 as double)) AS outboundUnit#5472]
(474) Project
Arguments: [product#5444, plant#5445, orderDateTime#5446, productPlant#5457, systemId#5458, internalUUID#5459, id#5460, displayId#5461, name#5462, baseUnitOfMeasure#5463, unitOfMeasures#5464, unitOfMeasureConversions#5465, productionAspect#5466, salesAspect#5467, procurementAspect#5468, filteredUnitOfMeasureConversions#5469, quantityNumerator#5470, quantityDenominator#5471, CASE WHEN (isnull(outboundUnit#5472) OR (outboundUnit#5472 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#5472 END AS outboundUnit#5473]
(475) Project
Arguments: [product#5444, plant#5445, orderDateTime#5446, productPlant#5457, outboundUnit#5473]
(476) Project
Arguments: [plant#5445]
(477) Deduplicate
Arguments: [plant#5445]
(478) Join
Arguments: Inner, (plantUuid#5441 = plant#5445)
(479) Project
Arguments: [plantId#5440, plantUuid#5441, storageLocId#5442, storageLocUuid#5443]
(480) Join
Arguments: Inner, (plant#5413.internalRefUUID <=> plantUuid#5441)
(481) Generate
Arguments: explode(filter(stockQuantities#5415, lambdafunction(((lambda x#1330.storageLocation.internalRefUuid = storageLocUuid#5443) AND (lambda x#1330.storageLocation.Id = storageLocId#5442)), lambda x#1330, false))), false, [stockQuantity#5474]
(482) Project
Arguments: [systemId#5410, internalUUID#5411, product#5412, plant#5413, calculationDateTime#5414, stockQuantities#5415, plantId#5440, plantUuid#5441, storageLocId#5442, storageLocUuid#5443, stockQuantity#5474]
(483) Aggregate
Arguments: [plantUuid#5441, internalUUID#5411, plant#5413, product#5412, systemId#5410], [plantUuid#5441, internalUUID#5411, plant#5413, product#5412, systemId#5410, first(calculationDateTime#5414, false) AS calculationDateTime#5475, collect_list(stockQuantity#5474, 0, 0) AS stockQuantities#5476]
(484) Project
Arguments: [systemId#5410, internalUUID#5411, product#5412, plant#5413, calculationDateTime#5475, stockQuantities#5476]
(485) Generate
Arguments: explode(stockQuantities#5476), false, [stockQuantity#5477]
(486) Project
Arguments: [systemId#5410, internalUUID#5411, product#5412, plant#5413, calculationDateTime#5475, stockQuantities#5476, stockQuantity#5477]
(487) Project
Arguments: [plant#5413.id AS plant#5478, plant#5413.internalRefUUID AS plantUuid#5479, product#5412.id AS product#5480, product#5412.internalRefUUID AS productUuid#5481, calculationDateTime#5475, stockQuantity#5477.storagelocation.id AS storageLocId#5482, stockQuantity#5477.storagelocation.internalRefUUID AS storageLocUuid#5483, stockQuantity#5477.quantity.measure AS quantity#5484, stockQuantity#5477.specialStockIndicator.code AS specialStockIndicator#5485, stockQuantity#5477.stockType.code AS stockType#5486]
(488) Filter
Arguments: ((specialStockIndicator#5485 = ) AND (stockType#5486 = 01))
(489) LogicalRelation
Arguments: parquet, [product#5487, plant#5488, orderDateTime#5489, planningStartDateTime#5490], false
(490) RepartitionByExpression
Arguments: [product#5487, plant#5488], 37
(491) Project
Arguments: [product#5487, plant#5488, orderDateTime#5489]
(492) LogicalRelation
Arguments: parquet, [systemId#5491, internalUUID#5492, plant#5493, product#5494, blockedForReplenishmentStartingFrom#5495, productionAspect#5496, salesPlant#5497, listing#5498, sourceOfSupplyCategory#5499], false
(493) Repartition
Arguments: 37, true
(494) Project
Arguments: [systemId#5491, internalUUID#5492, plant#5493, product#5494, blockedForReplenishmentStartingFrom#5495, productionAspect#5496, salesPlant#5497, listing#5498, sourceOfSupplyCategory#5499, struct(systemId, systemId#5491, internalUUID, internalUUID#5492, plant, plant#5493, product, product#5494, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#5495, productionAspect, productionAspect#5496, salesPlant, salesPlant#5497, listing, listing#5498, sourceOfSupplyCategory, sourceOfSupplyCategory#5499) AS productPlant#5500]
(495) Project
Arguments: [productPlant#5500]
(496) Join
Arguments: LeftOuter, ((product#5487 <=> productPlant#5500.product.internalRefUUID) AND (plant#5488 <=> productPlant#5500.plant.internalRefUUID))
(497) Project
Arguments: [product#5487, plant#5488, orderDateTime#5489, productPlant#5500]
(498) LogicalRelation
Arguments: parquet, [systemId#5501, internalUUID#5502, id#5503, displayId#5504, name#5505, baseUnitOfMeasure#5506, unitOfMeasures#5507, unitOfMeasureConversions#5508, productionAspect#5509, salesAspect#5510, procurementAspect#5511], false
(499) Repartition
Arguments: 37, true
(500) Join
Arguments: LeftOuter, (product#5487 = internalUUID#5502)
(501) Project
Arguments: [product#5487, plant#5488, orderDateTime#5489, productPlant#5500, systemId#5501, internalUUID#5502, id#5503, displayId#5504, name#5505, baseUnitOfMeasure#5506, unitOfMeasures#5507, unitOfMeasureConversions#5508, productionAspect#5509, salesAspect#5510, procurementAspect#5511, filter(unitOfMeasureConversions#5508, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#5500.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#5500.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#5506.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#5506.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#5512]
(502) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5512.quantityNumerator), true, [quantityNumerator#5513]
(503) Project
Arguments: [product#5487, plant#5488, orderDateTime#5489, productPlant#5500, systemId#5501, internalUUID#5502, id#5503, displayId#5504, name#5505, baseUnitOfMeasure#5506, unitOfMeasures#5507, unitOfMeasureConversions#5508, productionAspect#5509, salesAspect#5510, procurementAspect#5511, filteredUnitOfMeasureConversions#5512, quantityNumerator#5513]
(504) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5512.quantityDenominator), true, [quantityDenominator#5514]
(505) Project
Arguments: [product#5487, plant#5488, orderDateTime#5489, productPlant#5500, systemId#5501, internalUUID#5502, id#5503, displayId#5504, name#5505, baseUnitOfMeasure#5506, unitOfMeasures#5507, unitOfMeasureConversions#5508, productionAspect#5509, salesAspect#5510, procurementAspect#5511, filteredUnitOfMeasureConversions#5512, quantityNumerator#5513, quantityDenominator#5514]
(506) Project
Arguments: [product#5487, plant#5488, orderDateTime#5489, productPlant#5500, systemId#5501, internalUUID#5502, id#5503, displayId#5504, name#5505, baseUnitOfMeasure#5506, unitOfMeasures#5507, unitOfMeasureConversions#5508, productionAspect#5509, salesAspect#5510, procurementAspect#5511, filteredUnitOfMeasureConversions#5512, quantityNumerator#5513, quantityDenominator#5514, (cast(quantityNumerator#5513 as double) / cast(quantityDenominator#5514 as double)) AS outboundUnit#5515]
(507) Project
Arguments: [product#5487, plant#5488, orderDateTime#5489, productPlant#5500, systemId#5501, internalUUID#5502, id#5503, displayId#5504, name#5505, baseUnitOfMeasure#5506, unitOfMeasures#5507, unitOfMeasureConversions#5508, productionAspect#5509, salesAspect#5510, procurementAspect#5511, filteredUnitOfMeasureConversions#5512, quantityNumerator#5513, quantityDenominator#5514, CASE WHEN (isnull(outboundUnit#5515) OR (outboundUnit#5515 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#5515 END AS outboundUnit#5516]
(508) Project
Arguments: [product#5487, plant#5488, orderDateTime#5489, productPlant#5500, outboundUnit#5516]
(509) Join
Arguments: Inner, ((plantUuid#5479 = plant#5488) AND (productUuid#5481 = product#5487))
(510) Filter
Arguments: (calculationDateTime#5475 <= orderDateTime#5489)
(511) Project
Arguments: [plantUuid#5479 AS plant#5517, productUuid#5481 AS product#5518, storageLocId#5482, calculationDateTime#5475, quantity#5484]
(512) Aggregate
Arguments: [plant#5517, product#5518, storageLocId#5482], [plant#5517, product#5518, storageLocId#5482, max(calculationDateTime#5475) AS max_calc_datetime#5519]
(513) Join
Arguments: Inner, ((((plant#5408 <=> plant#5517) AND (product#5409 <=> product#5518)) AND (storageLocId#5373 <=> storageLocId#5482)) AND (calculationDateTime#5366 <=> max_calc_datetime#5519))
(514) Project
Arguments: [plant#5408, product#5409, storageLocId#5373, calculationDateTime#5366, quantity#5375]
(515) Aggregate
Arguments: [product#5409, plant#5408], [product#5409, plant#5408, sum(quantity#5375) AS quantitySum#5520, min(calculationDateTime#5366) AS minCalculationDateTime#5521]
(516) Project
Arguments: [product#5409, plant#5408, quantitySum#5520, minCalculationDateTime#5521, round(quantitySum#5520, 0) AS roundedQuantitySum#5522]
(517) Join
Arguments: LeftOuter, ((plant#5272 = plant#5408) AND (product#5271 = product#5409))
(518) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273, productPlant#5284, outboundUnit#5300, roundedQuantitySum#5522, minCalculationDateTime#5521]
(519) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273, productPlant#5284, outboundUnit#5300, roundedQuantitySum#5522, minCalculationDateTime#5521, CASE WHEN isnotnull(minCalculationDateTime#5521) THEN minCalculationDateTime#5521 ELSE orderDateTime#5273 END AS stockDatetime#5523]
(520) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273, productPlant#5284, outboundUnit#5300, roundedQuantitySum#5522, minCalculationDateTime#5521, stockDatetime#5523, CASE WHEN isnotnull(roundedQuantitySum#5522) THEN array(roundedQuantitySum#5522) ELSE array(0.0) END AS stockBatchQuantities#5524]
(521) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273, productPlant#5284, outboundUnit#5300, roundedQuantitySum#5522, minCalculationDateTime#5521, stockDatetime#5523, stockBatchQuantities#5524, array(2199-01-01 00:00:00) AS stockBatchShelfLifeEndDatetimes#5525]
(522) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273, productPlant#5284, outboundUnit#5300, roundedQuantitySum#5522, stockDatetime#5523, stockBatchQuantities#5524, stockBatchShelfLifeEndDatetimes#5525]
(523) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273, productPlant#5284, outboundUnit#5300, stockDatetime#5523, stockBatchQuantities#5524, stockBatchShelfLifeEndDatetimes#5525]
(524) LogicalRelation
Arguments: parquet, [product#5526, plant#5527, orderDateTime#5528, planningStartDateTime#5529], false
(525) RepartitionByExpression
Arguments: [product#5526, plant#5527], 37
(526) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528]
(527) LogicalRelation
Arguments: parquet, [systemId#5530, internalUUID#5531, plant#5532, product#5533, blockedForReplenishmentStartingFrom#5534, productionAspect#5535, salesPlant#5536, listing#5537, sourceOfSupplyCategory#5538], false
(528) Repartition
Arguments: 37, true
(529) Project
Arguments: [systemId#5530, internalUUID#5531, plant#5532, product#5533, blockedForReplenishmentStartingFrom#5534, productionAspect#5535, salesPlant#5536, listing#5537, sourceOfSupplyCategory#5538, struct(systemId, systemId#5530, internalUUID, internalUUID#5531, plant, plant#5532, product, product#5533, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#5534, productionAspect, productionAspect#5535, salesPlant, salesPlant#5536, listing, listing#5537, sourceOfSupplyCategory, sourceOfSupplyCategory#5538) AS productPlant#5539]
(530) Project
Arguments: [productPlant#5539]
(531) Join
Arguments: LeftOuter, ((product#5526 <=> productPlant#5539.product.internalRefUUID) AND (plant#5527 <=> productPlant#5539.plant.internalRefUUID))
(532) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539]
(533) LogicalRelation
Arguments: parquet, [systemId#5540, internalUUID#5541, id#5542, displayId#5543, name#5544, baseUnitOfMeasure#5545, unitOfMeasures#5546, unitOfMeasureConversions#5547, productionAspect#5548, salesAspect#5549, procurementAspect#5550], false
(534) Repartition
Arguments: 37, true
(535) Join
Arguments: LeftOuter, (product#5526 = internalUUID#5541)
(536) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, systemId#5540, internalUUID#5541, id#5542, displayId#5543, name#5544, baseUnitOfMeasure#5545, unitOfMeasures#5546, unitOfMeasureConversions#5547, productionAspect#5548, salesAspect#5549, procurementAspect#5550, filter(unitOfMeasureConversions#5547, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#5539.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#5539.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#5545.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#5545.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#5551]
(537) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5551.quantityNumerator), true, [quantityNumerator#5552]
(538) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, systemId#5540, internalUUID#5541, id#5542, displayId#5543, name#5544, baseUnitOfMeasure#5545, unitOfMeasures#5546, unitOfMeasureConversions#5547, productionAspect#5548, salesAspect#5549, procurementAspect#5550, filteredUnitOfMeasureConversions#5551, quantityNumerator#5552]
(539) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5551.quantityDenominator), true, [quantityDenominator#5553]
(540) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, systemId#5540, internalUUID#5541, id#5542, displayId#5543, name#5544, baseUnitOfMeasure#5545, unitOfMeasures#5546, unitOfMeasureConversions#5547, productionAspect#5548, salesAspect#5549, procurementAspect#5550, filteredUnitOfMeasureConversions#5551, quantityNumerator#5552, quantityDenominator#5553]
(541) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, systemId#5540, internalUUID#5541, id#5542, displayId#5543, name#5544, baseUnitOfMeasure#5545, unitOfMeasures#5546, unitOfMeasureConversions#5547, productionAspect#5548, salesAspect#5549, procurementAspect#5550, filteredUnitOfMeasureConversions#5551, quantityNumerator#5552, quantityDenominator#5553, (cast(quantityNumerator#5552 as double) / cast(quantityDenominator#5553 as double)) AS outboundUnit#5554]
(542) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, systemId#5540, internalUUID#5541, id#5542, displayId#5543, name#5544, baseUnitOfMeasure#5545, unitOfMeasures#5546, unitOfMeasureConversions#5547, productionAspect#5548, salesAspect#5549, procurementAspect#5550, filteredUnitOfMeasureConversions#5551, quantityNumerator#5552, quantityDenominator#5553, CASE WHEN (isnull(outboundUnit#5554) OR (outboundUnit#5554 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#5554 END AS outboundUnit#5555]
(543) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, outboundUnit#5555]
(544) LogicalRelation
Arguments: parquet, [systemId#5556, internalUUID#5557, product#5558, plant#5559, calculationDateTime#5560, stockQuantities#5561], false
(545) Repartition
Arguments: 37, true
(546) LogicalRelation
Arguments: parquet, [marketUnit#5562, description#5563, articleHierarchy#5564, defaultCurrency#5565, responsibilities#5566, replenishmentTypes#5567, distributionCenters#5568, assignedArticleHierarchyNodes#5569, minOrderQtySetting#5570, minOrderQtySettingInternal#5571, listingCheck#5572, odsSelection#5573, demandProfiles#5574, constraintProfiles#5575, optimizationProfiles#5576, orderGroupSplitProfiles#5577, supplierMinimumProfiles#5578, multipleRestrictionProfiles#5579, preferredUomSource#5580, handlingOfUnfulfilledDemands#5581, negligibleQuantitiesThreshold#5582, eventtype#5583], false
(547) Repartition
Arguments: 37, true
(548) Filter
Arguments: (marketUnit#5562 <=> 10000_OP_PERF)
(549) Project
Arguments: [marketUnit#5562, description#5563, articleHierarchy#5564, defaultCurrency#5565, responsibilities#5566, replenishmentTypes#5567, distributionCenters#5568, assignedArticleHierarchyNodes#5569, minOrderQtySetting#5570, minOrderQtySettingInternal#5571, listingCheck#5572, odsSelection#5573, demandProfiles#5574, constraintProfiles#5575, optimizationProfiles#5576, orderGroupSplitProfiles#5577, supplierMinimumProfiles#5578, multipleRestrictionProfiles#5579, preferredUomSource#5580, handlingOfUnfulfilledDemands#5581, negligibleQuantitiesThreshold#5582, eventtype#5583]
(550) Project
Arguments: [distributionCenters#5568]
(551) Generate
Arguments: explode(distributionCenters#5568), false, [distributionCenters#5584]
(552) Project
Arguments: [distributionCenters#5584]
(553) Generate
Arguments: explode(distributionCenters#5584.storageLocations), false, [storageLocations#5585]
(554) Project
Arguments: [distributionCenters#5584.id AS plantId#5586, distributionCenters#5584.internalRefUUID AS plantUuid#5587, storageLocations#5585]
(555) Project
Arguments: [plantId#5586, plantUuid#5587, storageLocations#5585.id AS storageLocId#5588, storageLocations#5585.internalRefUUID AS storageLocUuid#5589]
(556) LogicalRelation
Arguments: parquet, [product#5590, plant#5591, orderDateTime#5592, planningStartDateTime#5593], false
(557) RepartitionByExpression
Arguments: [product#5590, plant#5591], 37
(558) Project
Arguments: [product#5590, plant#5591, orderDateTime#5592]
(559) LogicalRelation
Arguments: parquet, [systemId#5594, internalUUID#5595, plant#5596, product#5597, blockedForReplenishmentStartingFrom#5598, productionAspect#5599, salesPlant#5600, listing#5601, sourceOfSupplyCategory#5602], false
(560) Repartition
Arguments: 37, true
(561) Project
Arguments: [systemId#5594, internalUUID#5595, plant#5596, product#5597, blockedForReplenishmentStartingFrom#5598, productionAspect#5599, salesPlant#5600, listing#5601, sourceOfSupplyCategory#5602, struct(systemId, systemId#5594, internalUUID, internalUUID#5595, plant, plant#5596, product, product#5597, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#5598, productionAspect, productionAspect#5599, salesPlant, salesPlant#5600, listing, listing#5601, sourceOfSupplyCategory, sourceOfSupplyCategory#5602) AS productPlant#5603]
(562) Project
Arguments: [productPlant#5603]
(563) Join
Arguments: LeftOuter, ((product#5590 <=> productPlant#5603.product.internalRefUUID) AND (plant#5591 <=> productPlant#5603.plant.internalRefUUID))
(564) Project
Arguments: [product#5590, plant#5591, orderDateTime#5592, productPlant#5603]
(565) LogicalRelation
Arguments: parquet, [systemId#5604, internalUUID#5605, id#5606, displayId#5607, name#5608, baseUnitOfMeasure#5609, unitOfMeasures#5610, unitOfMeasureConversions#5611, productionAspect#5612, salesAspect#5613, procurementAspect#5614], false
(566) Repartition
Arguments: 37, true
(567) Join
Arguments: LeftOuter, (product#5590 = internalUUID#5605)
(568) Project
Arguments: [product#5590, plant#5591, orderDateTime#5592, productPlant#5603, systemId#5604, internalUUID#5605, id#5606, displayId#5607, name#5608, baseUnitOfMeasure#5609, unitOfMeasures#5610, unitOfMeasureConversions#5611, productionAspect#5612, salesAspect#5613, procurementAspect#5614, filter(unitOfMeasureConversions#5611, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#5603.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#5603.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#5609.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#5609.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#5615]
(569) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5615.quantityNumerator), true, [quantityNumerator#5616]
(570) Project
Arguments: [product#5590, plant#5591, orderDateTime#5592, productPlant#5603, systemId#5604, internalUUID#5605, id#5606, displayId#5607, name#5608, baseUnitOfMeasure#5609, unitOfMeasures#5610, unitOfMeasureConversions#5611, productionAspect#5612, salesAspect#5613, procurementAspect#5614, filteredUnitOfMeasureConversions#5615, quantityNumerator#5616]
(571) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5615.quantityDenominator), true, [quantityDenominator#5617]
(572) Project
Arguments: [product#5590, plant#5591, orderDateTime#5592, productPlant#5603, systemId#5604, internalUUID#5605, id#5606, displayId#5607, name#5608, baseUnitOfMeasure#5609, unitOfMeasures#5610, unitOfMeasureConversions#5611, productionAspect#5612, salesAspect#5613, procurementAspect#5614, filteredUnitOfMeasureConversions#5615, quantityNumerator#5616, quantityDenominator#5617]
(573) Project
Arguments: [product#5590, plant#5591, orderDateTime#5592, productPlant#5603, systemId#5604, internalUUID#5605, id#5606, displayId#5607, name#5608, baseUnitOfMeasure#5609, unitOfMeasures#5610, unitOfMeasureConversions#5611, productionAspect#5612, salesAspect#5613, procurementAspect#5614, filteredUnitOfMeasureConversions#5615, quantityNumerator#5616, quantityDenominator#5617, (cast(quantityNumerator#5616 as double) / cast(quantityDenominator#5617 as double)) AS outboundUnit#5618]
(574) Project
Arguments: [product#5590, plant#5591, orderDateTime#5592, productPlant#5603, systemId#5604, internalUUID#5605, id#5606, displayId#5607, name#5608, baseUnitOfMeasure#5609, unitOfMeasures#5610, unitOfMeasureConversions#5611, productionAspect#5612, salesAspect#5613, procurementAspect#5614, filteredUnitOfMeasureConversions#5615, quantityNumerator#5616, quantityDenominator#5617, CASE WHEN (isnull(outboundUnit#5618) OR (outboundUnit#5618 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#5618 END AS outboundUnit#5619]
(575) Project
Arguments: [product#5590, plant#5591, orderDateTime#5592, productPlant#5603, outboundUnit#5619]
(576) Project
Arguments: [plant#5591]
(577) Deduplicate
Arguments: [plant#5591]
(578) Join
Arguments: Inner, (plantUuid#5587 = plant#5591)
(579) Project
Arguments: [plantId#5586, plantUuid#5587, storageLocId#5588, storageLocUuid#5589]
(580) Join
Arguments: Inner, (plant#5559.internalRefUUID <=> plantUuid#5587)
(581) Generate
Arguments: explode(filter(stockQuantities#5561, lambdafunction(((lambda x#1330.storageLocation.internalRefUuid = storageLocUuid#5589) AND (lambda x#1330.storageLocation.Id = storageLocId#5588)), lambda x#1330, false))), false, [stockQuantity#5620]
(582) Project
Arguments: [systemId#5556, internalUUID#5557, product#5558, plant#5559, calculationDateTime#5560, stockQuantities#5561, plantId#5586, plantUuid#5587, storageLocId#5588, storageLocUuid#5589, stockQuantity#5620]
(583) Aggregate
Arguments: [plantUuid#5587, internalUUID#5557, plant#5559, product#5558, systemId#5556], [plantUuid#5587, internalUUID#5557, plant#5559, product#5558, systemId#5556, first(calculationDateTime#5560, false) AS calculationDateTime#5621, collect_list(stockQuantity#5620, 0, 0) AS stockQuantities#5622]
(584) Project
Arguments: [systemId#5556, internalUUID#5557, product#5558, plant#5559, calculationDateTime#5621, stockQuantities#5622]
(585) Generate
Arguments: explode(stockQuantities#5622), false, [stockQuantity#5623]
(586) Project
Arguments: [systemId#5556, internalUUID#5557, product#5558, plant#5559, calculationDateTime#5621, stockQuantities#5622, stockQuantity#5623]
(587) Project
Arguments: [plant#5559.id AS plant#5624, plant#5559.internalRefUUID AS plantUuid#5625, product#5558.id AS product#5626, product#5558.internalRefUUID AS productUuid#5627, calculationDateTime#5621, stockQuantity#5623.storagelocation.id AS storageLocId#5628, stockQuantity#5623.storagelocation.internalRefUUID AS storageLocUuid#5629, stockQuantity#5623.quantity.measure AS quantity#5630, stockQuantity#5623.specialStockIndicator.code AS specialStockIndicator#5631, stockQuantity#5623.stockType.code AS stockType#5632]
(588) Filter
Arguments: ((specialStockIndicator#5631 = ) AND (stockType#5632 = 01))
(589) LogicalRelation
Arguments: parquet, [product#5633, plant#5634, orderDateTime#5635, planningStartDateTime#5636], false
(590) RepartitionByExpression
Arguments: [product#5633, plant#5634], 37
(591) Project
Arguments: [product#5633, plant#5634, orderDateTime#5635]
(592) LogicalRelation
Arguments: parquet, [systemId#5637, internalUUID#5638, plant#5639, product#5640, blockedForReplenishmentStartingFrom#5641, productionAspect#5642, salesPlant#5643, listing#5644, sourceOfSupplyCategory#5645], false
(593) Repartition
Arguments: 37, true
(594) Project
Arguments: [systemId#5637, internalUUID#5638, plant#5639, product#5640, blockedForReplenishmentStartingFrom#5641, productionAspect#5642, salesPlant#5643, listing#5644, sourceOfSupplyCategory#5645, struct(systemId, systemId#5637, internalUUID, internalUUID#5638, plant, plant#5639, product, product#5640, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#5641, productionAspect, productionAspect#5642, salesPlant, salesPlant#5643, listing, listing#5644, sourceOfSupplyCategory, sourceOfSupplyCategory#5645) AS productPlant#5646]
(595) Project
Arguments: [productPlant#5646]
(596) Join
Arguments: LeftOuter, ((product#5633 <=> productPlant#5646.product.internalRefUUID) AND (plant#5634 <=> productPlant#5646.plant.internalRefUUID))
(597) Project
Arguments: [product#5633, plant#5634, orderDateTime#5635, productPlant#5646]
(598) LogicalRelation
Arguments: parquet, [systemId#5647, internalUUID#5648, id#5649, displayId#5650, name#5651, baseUnitOfMeasure#5652, unitOfMeasures#5653, unitOfMeasureConversions#5654, productionAspect#5655, salesAspect#5656, procurementAspect#5657], false
(599) Repartition
Arguments: 37, true
(600) Join
Arguments: LeftOuter, (product#5633 = internalUUID#5648)
(601) Project
Arguments: [product#5633, plant#5634, orderDateTime#5635, productPlant#5646, systemId#5647, internalUUID#5648, id#5649, displayId#5650, name#5651, baseUnitOfMeasure#5652, unitOfMeasures#5653, unitOfMeasureConversions#5654, productionAspect#5655, salesAspect#5656, procurementAspect#5657, filter(unitOfMeasureConversions#5654, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#5646.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#5646.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#5652.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#5652.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#5658]
(602) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5658.quantityNumerator), true, [quantityNumerator#5659]
(603) Project
Arguments: [product#5633, plant#5634, orderDateTime#5635, productPlant#5646, systemId#5647, internalUUID#5648, id#5649, displayId#5650, name#5651, baseUnitOfMeasure#5652, unitOfMeasures#5653, unitOfMeasureConversions#5654, productionAspect#5655, salesAspect#5656, procurementAspect#5657, filteredUnitOfMeasureConversions#5658, quantityNumerator#5659]
(604) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5658.quantityDenominator), true, [quantityDenominator#5660]
(605) Project
Arguments: [product#5633, plant#5634, orderDateTime#5635, productPlant#5646, systemId#5647, internalUUID#5648, id#5649, displayId#5650, name#5651, baseUnitOfMeasure#5652, unitOfMeasures#5653, unitOfMeasureConversions#5654, productionAspect#5655, salesAspect#5656, procurementAspect#5657, filteredUnitOfMeasureConversions#5658, quantityNumerator#5659, quantityDenominator#5660]
(606) Project
Arguments: [product#5633, plant#5634, orderDateTime#5635, productPlant#5646, systemId#5647, internalUUID#5648, id#5649, displayId#5650, name#5651, baseUnitOfMeasure#5652, unitOfMeasures#5653, unitOfMeasureConversions#5654, productionAspect#5655, salesAspect#5656, procurementAspect#5657, filteredUnitOfMeasureConversions#5658, quantityNumerator#5659, quantityDenominator#5660, (cast(quantityNumerator#5659 as double) / cast(quantityDenominator#5660 as double)) AS outboundUnit#5661]
(607) Project
Arguments: [product#5633, plant#5634, orderDateTime#5635, productPlant#5646, systemId#5647, internalUUID#5648, id#5649, displayId#5650, name#5651, baseUnitOfMeasure#5652, unitOfMeasures#5653, unitOfMeasureConversions#5654, productionAspect#5655, salesAspect#5656, procurementAspect#5657, filteredUnitOfMeasureConversions#5658, quantityNumerator#5659, quantityDenominator#5660, CASE WHEN (isnull(outboundUnit#5661) OR (outboundUnit#5661 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#5661 END AS outboundUnit#5662]
(608) Project
Arguments: [product#5633, plant#5634, orderDateTime#5635, productPlant#5646, outboundUnit#5662]
(609) Join
Arguments: Inner, ((plantUuid#5625 = plant#5634) AND (productUuid#5627 = product#5633))
(610) Filter
Arguments: (calculationDateTime#5621 <= orderDateTime#5635)
(611) Project
Arguments: [plantUuid#5625 AS plant#5663, productUuid#5627 AS product#5664, storageLocId#5628, calculationDateTime#5621, quantity#5630]
(612) LogicalRelation
Arguments: parquet, [systemId#5665, internalUUID#5666, product#5667, plant#5668, calculationDateTime#5669, stockQuantities#5670], false
(613) Repartition
Arguments: 37, true
(614) LogicalRelation
Arguments: parquet, [marketUnit#5671, description#5672, articleHierarchy#5673, defaultCurrency#5674, responsibilities#5675, replenishmentTypes#5676, distributionCenters#5677, assignedArticleHierarchyNodes#5678, minOrderQtySetting#5679, minOrderQtySettingInternal#5680, listingCheck#5681, odsSelection#5682, demandProfiles#5683, constraintProfiles#5684, optimizationProfiles#5685, orderGroupSplitProfiles#5686, supplierMinimumProfiles#5687, multipleRestrictionProfiles#5688, preferredUomSource#5689, handlingOfUnfulfilledDemands#5690, negligibleQuantitiesThreshold#5691, eventtype#5692], false
(615) Repartition
Arguments: 37, true
(616) Filter
Arguments: (marketUnit#5671 <=> 10000_OP_PERF)
(617) Project
Arguments: [marketUnit#5671, description#5672, articleHierarchy#5673, defaultCurrency#5674, responsibilities#5675, replenishmentTypes#5676, distributionCenters#5677, assignedArticleHierarchyNodes#5678, minOrderQtySetting#5679, minOrderQtySettingInternal#5680, listingCheck#5681, odsSelection#5682, demandProfiles#5683, constraintProfiles#5684, optimizationProfiles#5685, orderGroupSplitProfiles#5686, supplierMinimumProfiles#5687, multipleRestrictionProfiles#5688, preferredUomSource#5689, handlingOfUnfulfilledDemands#5690, negligibleQuantitiesThreshold#5691, eventtype#5692]
(618) Project
Arguments: [distributionCenters#5677]
(619) Generate
Arguments: explode(distributionCenters#5677), false, [distributionCenters#5693]
(620) Project
Arguments: [distributionCenters#5693]
(621) Generate
Arguments: explode(distributionCenters#5693.storageLocations), false, [storageLocations#5694]
(622) Project
Arguments: [distributionCenters#5693.id AS plantId#5695, distributionCenters#5693.internalRefUUID AS plantUuid#5696, storageLocations#5694]
(623) Project
Arguments: [plantId#5695, plantUuid#5696, storageLocations#5694.id AS storageLocId#5697, storageLocations#5694.internalRefUUID AS storageLocUuid#5698]
(624) LogicalRelation
Arguments: parquet, [product#5699, plant#5700, orderDateTime#5701, planningStartDateTime#5702], false
(625) RepartitionByExpression
Arguments: [product#5699, plant#5700], 37
(626) Project
Arguments: [product#5699, plant#5700, orderDateTime#5701]
(627) LogicalRelation
Arguments: parquet, [systemId#5703, internalUUID#5704, plant#5705, product#5706, blockedForReplenishmentStartingFrom#5707, productionAspect#5708, salesPlant#5709, listing#5710, sourceOfSupplyCategory#5711], false
(628) Repartition
Arguments: 37, true
(629) Project
Arguments: [systemId#5703, internalUUID#5704, plant#5705, product#5706, blockedForReplenishmentStartingFrom#5707, productionAspect#5708, salesPlant#5709, listing#5710, sourceOfSupplyCategory#5711, struct(systemId, systemId#5703, internalUUID, internalUUID#5704, plant, plant#5705, product, product#5706, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#5707, productionAspect, productionAspect#5708, salesPlant, salesPlant#5709, listing, listing#5710, sourceOfSupplyCategory, sourceOfSupplyCategory#5711) AS productPlant#5712]
(630) Project
Arguments: [productPlant#5712]
(631) Join
Arguments: LeftOuter, ((product#5699 <=> productPlant#5712.product.internalRefUUID) AND (plant#5700 <=> productPlant#5712.plant.internalRefUUID))
(632) Project
Arguments: [product#5699, plant#5700, orderDateTime#5701, productPlant#5712]
(633) LogicalRelation
Arguments: parquet, [systemId#5713, internalUUID#5714, id#5715, displayId#5716, name#5717, baseUnitOfMeasure#5718, unitOfMeasures#5719, unitOfMeasureConversions#5720, productionAspect#5721, salesAspect#5722, procurementAspect#5723], false
(634) Repartition
Arguments: 37, true
(635) Join
Arguments: LeftOuter, (product#5699 = internalUUID#5714)
(636) Project
Arguments: [product#5699, plant#5700, orderDateTime#5701, productPlant#5712, systemId#5713, internalUUID#5714, id#5715, displayId#5716, name#5717, baseUnitOfMeasure#5718, unitOfMeasures#5719, unitOfMeasureConversions#5720, productionAspect#5721, salesAspect#5722, procurementAspect#5723, filter(unitOfMeasureConversions#5720, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#5712.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#5712.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#5718.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#5718.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#5724]
(637) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5724.quantityNumerator), true, [quantityNumerator#5725]
(638) Project
Arguments: [product#5699, plant#5700, orderDateTime#5701, productPlant#5712, systemId#5713, internalUUID#5714, id#5715, displayId#5716, name#5717, baseUnitOfMeasure#5718, unitOfMeasures#5719, unitOfMeasureConversions#5720, productionAspect#5721, salesAspect#5722, procurementAspect#5723, filteredUnitOfMeasureConversions#5724, quantityNumerator#5725]
(639) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5724.quantityDenominator), true, [quantityDenominator#5726]
(640) Project
Arguments: [product#5699, plant#5700, orderDateTime#5701, productPlant#5712, systemId#5713, internalUUID#5714, id#5715, displayId#5716, name#5717, baseUnitOfMeasure#5718, unitOfMeasures#5719, unitOfMeasureConversions#5720, productionAspect#5721, salesAspect#5722, procurementAspect#5723, filteredUnitOfMeasureConversions#5724, quantityNumerator#5725, quantityDenominator#5726]
(641) Project
Arguments: [product#5699, plant#5700, orderDateTime#5701, productPlant#5712, systemId#5713, internalUUID#5714, id#5715, displayId#5716, name#5717, baseUnitOfMeasure#5718, unitOfMeasures#5719, unitOfMeasureConversions#5720, productionAspect#5721, salesAspect#5722, procurementAspect#5723, filteredUnitOfMeasureConversions#5724, quantityNumerator#5725, quantityDenominator#5726, (cast(quantityNumerator#5725 as double) / cast(quantityDenominator#5726 as double)) AS outboundUnit#5727]
(642) Project
Arguments: [product#5699, plant#5700, orderDateTime#5701, productPlant#5712, systemId#5713, internalUUID#5714, id#5715, displayId#5716, name#5717, baseUnitOfMeasure#5718, unitOfMeasures#5719, unitOfMeasureConversions#5720, productionAspect#5721, salesAspect#5722, procurementAspect#5723, filteredUnitOfMeasureConversions#5724, quantityNumerator#5725, quantityDenominator#5726, CASE WHEN (isnull(outboundUnit#5727) OR (outboundUnit#5727 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#5727 END AS outboundUnit#5728]
(643) Project
Arguments: [product#5699, plant#5700, orderDateTime#5701, productPlant#5712, outboundUnit#5728]
(644) Project
Arguments: [plant#5700]
(645) Deduplicate
Arguments: [plant#5700]
(646) Join
Arguments: Inner, (plantUuid#5696 = plant#5700)
(647) Project
Arguments: [plantId#5695, plantUuid#5696, storageLocId#5697, storageLocUuid#5698]
(648) Join
Arguments: Inner, (plant#5668.internalRefUUID <=> plantUuid#5696)
(649) Generate
Arguments: explode(filter(stockQuantities#5670, lambdafunction(((lambda x#1330.storageLocation.internalRefUuid = storageLocUuid#5698) AND (lambda x#1330.storageLocation.Id = storageLocId#5697)), lambda x#1330, false))), false, [stockQuantity#5729]
(650) Project
Arguments: [systemId#5665, internalUUID#5666, product#5667, plant#5668, calculationDateTime#5669, stockQuantities#5670, plantId#5695, plantUuid#5696, storageLocId#5697, storageLocUuid#5698, stockQuantity#5729]
(651) Aggregate
Arguments: [plantUuid#5696, internalUUID#5666, plant#5668, product#5667, systemId#5665], [plantUuid#5696, internalUUID#5666, plant#5668, product#5667, systemId#5665, first(calculationDateTime#5669, false) AS calculationDateTime#5730, collect_list(stockQuantity#5729, 0, 0) AS stockQuantities#5731]
(652) Project
Arguments: [systemId#5665, internalUUID#5666, product#5667, plant#5668, calculationDateTime#5730, stockQuantities#5731]
(653) Generate
Arguments: explode(stockQuantities#5731), false, [stockQuantity#5732]
(654) Project
Arguments: [systemId#5665, internalUUID#5666, product#5667, plant#5668, calculationDateTime#5730, stockQuantities#5731, stockQuantity#5732]
(655) Project
Arguments: [plant#5668.id AS plant#5733, plant#5668.internalRefUUID AS plantUuid#5734, product#5667.id AS product#5735, product#5667.internalRefUUID AS productUuid#5736, calculationDateTime#5730, stockQuantity#5732.storagelocation.id AS storageLocId#5737, stockQuantity#5732.storagelocation.internalRefUUID AS storageLocUuid#5738, stockQuantity#5732.quantity.measure AS quantity#5739, stockQuantity#5732.specialStockIndicator.code AS specialStockIndicator#5740, stockQuantity#5732.stockType.code AS stockType#5741]
(656) Filter
Arguments: ((specialStockIndicator#5740 = ) AND (stockType#5741 = 01))
(657) LogicalRelation
Arguments: parquet, [product#5742, plant#5743, orderDateTime#5744, planningStartDateTime#5745], false
(658) RepartitionByExpression
Arguments: [product#5742, plant#5743], 37
(659) Project
Arguments: [product#5742, plant#5743, orderDateTime#5744]
(660) LogicalRelation
Arguments: parquet, [systemId#5746, internalUUID#5747, plant#5748, product#5749, blockedForReplenishmentStartingFrom#5750, productionAspect#5751, salesPlant#5752, listing#5753, sourceOfSupplyCategory#5754], false
(661) Repartition
Arguments: 37, true
(662) Project
Arguments: [systemId#5746, internalUUID#5747, plant#5748, product#5749, blockedForReplenishmentStartingFrom#5750, productionAspect#5751, salesPlant#5752, listing#5753, sourceOfSupplyCategory#5754, struct(systemId, systemId#5746, internalUUID, internalUUID#5747, plant, plant#5748, product, product#5749, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#5750, productionAspect, productionAspect#5751, salesPlant, salesPlant#5752, listing, listing#5753, sourceOfSupplyCategory, sourceOfSupplyCategory#5754) AS productPlant#5755]
(663) Project
Arguments: [productPlant#5755]
(664) Join
Arguments: LeftOuter, ((product#5742 <=> productPlant#5755.product.internalRefUUID) AND (plant#5743 <=> productPlant#5755.plant.internalRefUUID))
(665) Project
Arguments: [product#5742, plant#5743, orderDateTime#5744, productPlant#5755]
(666) LogicalRelation
Arguments: parquet, [systemId#5756, internalUUID#5757, id#5758, displayId#5759, name#5760, baseUnitOfMeasure#5761, unitOfMeasures#5762, unitOfMeasureConversions#5763, productionAspect#5764, salesAspect#5765, procurementAspect#5766], false
(667) Repartition
Arguments: 37, true
(668) Join
Arguments: LeftOuter, (product#5742 = internalUUID#5757)
(669) Project
Arguments: [product#5742, plant#5743, orderDateTime#5744, productPlant#5755, systemId#5756, internalUUID#5757, id#5758, displayId#5759, name#5760, baseUnitOfMeasure#5761, unitOfMeasures#5762, unitOfMeasureConversions#5763, productionAspect#5764, salesAspect#5765, procurementAspect#5766, filter(unitOfMeasureConversions#5763, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#5755.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#5755.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#5761.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#5761.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#5767]
(670) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5767.quantityNumerator), true, [quantityNumerator#5768]
(671) Project
Arguments: [product#5742, plant#5743, orderDateTime#5744, productPlant#5755, systemId#5756, internalUUID#5757, id#5758, displayId#5759, name#5760, baseUnitOfMeasure#5761, unitOfMeasures#5762, unitOfMeasureConversions#5763, productionAspect#5764, salesAspect#5765, procurementAspect#5766, filteredUnitOfMeasureConversions#5767, quantityNumerator#5768]
(672) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5767.quantityDenominator), true, [quantityDenominator#5769]
(673) Project
Arguments: [product#5742, plant#5743, orderDateTime#5744, productPlant#5755, systemId#5756, internalUUID#5757, id#5758, displayId#5759, name#5760, baseUnitOfMeasure#5761, unitOfMeasures#5762, unitOfMeasureConversions#5763, productionAspect#5764, salesAspect#5765, procurementAspect#5766, filteredUnitOfMeasureConversions#5767, quantityNumerator#5768, quantityDenominator#5769]
(674) Project
Arguments: [product#5742, plant#5743, orderDateTime#5744, productPlant#5755, systemId#5756, internalUUID#5757, id#5758, displayId#5759, name#5760, baseUnitOfMeasure#5761, unitOfMeasures#5762, unitOfMeasureConversions#5763, productionAspect#5764, salesAspect#5765, procurementAspect#5766, filteredUnitOfMeasureConversions#5767, quantityNumerator#5768, quantityDenominator#5769, (cast(quantityNumerator#5768 as double) / cast(quantityDenominator#5769 as double)) AS outboundUnit#5770]
(675) Project
Arguments: [product#5742, plant#5743, orderDateTime#5744, productPlant#5755, systemId#5756, internalUUID#5757, id#5758, displayId#5759, name#5760, baseUnitOfMeasure#5761, unitOfMeasures#5762, unitOfMeasureConversions#5763, productionAspect#5764, salesAspect#5765, procurementAspect#5766, filteredUnitOfMeasureConversions#5767, quantityNumerator#5768, quantityDenominator#5769, CASE WHEN (isnull(outboundUnit#5770) OR (outboundUnit#5770 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#5770 END AS outboundUnit#5771]
(676) Project
Arguments: [product#5742, plant#5743, orderDateTime#5744, productPlant#5755, outboundUnit#5771]
(677) Join
Arguments: Inner, ((plantUuid#5734 = plant#5743) AND (productUuid#5736 = product#5742))
(678) Filter
Arguments: (calculationDateTime#5730 <= orderDateTime#5744)
(679) Project
Arguments: [plantUuid#5734 AS plant#5772, productUuid#5736 AS product#5773, storageLocId#5737, calculationDateTime#5730, quantity#5739]
(680) Aggregate
Arguments: [plant#5772, product#5773, storageLocId#5737], [plant#5772, product#5773, storageLocId#5737, max(calculationDateTime#5730) AS max_calc_datetime#5774]
(681) Join
Arguments: Inner, ((((plant#5663 <=> plant#5772) AND (product#5664 <=> product#5773)) AND (storageLocId#5628 <=> storageLocId#5737)) AND (calculationDateTime#5621 <=> max_calc_datetime#5774))
(682) Project
Arguments: [plant#5663, product#5664, storageLocId#5628, calculationDateTime#5621, quantity#5630]
(683) Aggregate
Arguments: [product#5664, plant#5663], [product#5664, plant#5663, sum(quantity#5630) AS quantitySum#5775, min(calculationDateTime#5621) AS minCalculationDateTime#5776]
(684) Project
Arguments: [product#5664, plant#5663, quantitySum#5775, minCalculationDateTime#5776, round(quantitySum#5775, 0) AS roundedQuantitySum#5777]
(685) Join
Arguments: LeftOuter, ((plant#5527 = plant#5663) AND (product#5526 = product#5664))
(686) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, outboundUnit#5555, roundedQuantitySum#5777, minCalculationDateTime#5776]
(687) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, outboundUnit#5555, roundedQuantitySum#5777, minCalculationDateTime#5776, CASE WHEN isnotnull(minCalculationDateTime#5776) THEN minCalculationDateTime#5776 ELSE orderDateTime#5528 END AS stockDatetime#5778]
(688) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, outboundUnit#5555, roundedQuantitySum#5777, minCalculationDateTime#5776, stockDatetime#5778, CASE WHEN isnotnull(roundedQuantitySum#5777) THEN array(roundedQuantitySum#5777) ELSE array(0.0) END AS stockBatchQuantities#5779]
(689) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, outboundUnit#5555, roundedQuantitySum#5777, minCalculationDateTime#5776, stockDatetime#5778, stockBatchQuantities#5779, array(2199-01-01 00:00:00) AS stockBatchShelfLifeEndDatetimes#5780]
(690) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, outboundUnit#5555, roundedQuantitySum#5777, stockDatetime#5778, stockBatchQuantities#5779, stockBatchShelfLifeEndDatetimes#5780]
(691) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, outboundUnit#5555, stockDatetime#5778, stockBatchQuantities#5779, stockBatchShelfLifeEndDatetimes#5780]
(692) LogicalRelation
Arguments: parquet, [product#5781, plant#5782, demandChannel#5783, demandStream#5784, considerVariance#5785, demandTimeBuckets#5786, demandPointInTimeStart#5787, demandPointInTimeEnd#5788, demandPointInTime#5789], false
(693) Join
Arguments: LeftOuter, ((plant#5782 <=> plant#5527) AND (product#5781 <=> product#5526))
(694) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, outboundUnit#5555, stockDatetime#5778, stockBatchQuantities#5779, stockBatchShelfLifeEndDatetimes#5780, product#5781, plant#5782, demandChannel#5783, demandStream#5784, considerVariance#5785, demandTimeBuckets#5786, demandPointInTimeStart#5787, demandPointInTimeEnd#5788, demandPointInTime#5789, CASE WHEN isnotnull(product#5781) THEN struct(demandChannel, demandChannel#5783, demandStream, demandStream#5784, considerVariance, considerVariance#5785, demandTimeBuckets, demandTimeBuckets#5786, demandPointInTimeStart, demandPointInTimeStart#5787, demandPointInTimeEnd, demandPointInTimeEnd#5788, demandPointInTime, demandPointInTime#5789) ELSE cast(null as struct<demandChannel:string,demandStream:string,considerVariance:boolean,demandTimeBuckets:array<struct<demandStartDateTime:timestamp,demandQuantity:double,demandVariance:double>>,demandPointInTimeStart:timestamp,demandPointInTimeEnd:timestamp,demandPointInTime:array<struct<demandDateTime:timestamp,demandQuantity:double,demandVariance:double>>>) END AS rawDemands#5790]
(695) Aggregate
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, outboundUnit#5555, stockDatetime#5778, stockBatchQuantities#5779, stockBatchShelfLifeEndDatetimes#5780], [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, outboundUnit#5555, stockDatetime#5778, stockBatchQuantities#5779, stockBatchShelfLifeEndDatetimes#5780, collect_list(rawDemands#5790, 0, 0) AS rawDemands#5791]
(696) SubqueryAlias
Arguments: wl
(697) LogicalRelation
Arguments: parquet, [systemId#5792, internalUUID#5793, id#5794, displayId#5795, name#5796, category#5797, companyCode#5798, address#5799, mainDistributionChain#5800, mainPurchasingOrganization#5801, validPurchasingOrganizations#5802, productGroup#5803], false
(698) Repartition
Arguments: 37, true
(699) Project
Arguments: [systemId#5792, internalUUID#5793, id#5794, displayId#5795, name#5796, category#5797, companyCode#5798, address#5799, mainDistributionChain#5800, mainPurchasingOrganization#5801, validPurchasingOrganizations#5802, productGroup#5803, address#5799.timezone.code AS timezonecode#5804]
(700) Join
Arguments: LeftOuter, (plant#5527 <=> internalUUID#5793)
(701) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, outboundUnit#5555, stockDatetime#5778, stockBatchQuantities#5779, stockBatchShelfLifeEndDatetimes#5780, rawDemands#5791, systemId#5792, internalUUID#5793, id#5794, displayId#5795, name#5796, category#5797, companyCode#5798, address#5799, mainDistributionChain#5800, mainPurchasingOrganization#5801, validPurchasingOrganizations#5802, productGroup#5803, CASE WHEN isnotnull(timezonecode#5804) THEN timezonecode#5804 ELSE UTC END AS timezonecode#5805]
(702) Project
Arguments: [product#5526, plant#5527, orderDateTime#5528, productPlant#5539, outboundUnit#5555, stockDatetime#5778, stockBatchQuantities#5779, stockBatchShelfLifeEndDatetimes#5780, rawDemands#5791, timezonecode#5805]
(703) DeserializeToObject
Arguments: createexternalrow(invoke(product#5526.toString()), invoke(plant#5527.toString()), static_invoke(DateTimeUtils.toJavaTimestamp(orderDateTime#5528)), if (isnull(productPlant#5539)) null else createexternalrow(invoke(productPlant#5539.systemId.toString()), invoke(productPlant#5539.internalUUID.toString()), if (isnull(productPlant#5539.plant)) null else createexternalrow(invoke(productPlant#5539.plant.internalRefUUID.toString()), invoke(productPlant#5539.plant.id.toString()), StructField(internalRefUUID,StringType,true), StructField(id,StringType,true)), if (isnull(productPlant#5539.product)) null else createexternalrow(invoke(productPlant#5539.product.internalRefUUID.toString()), invoke(productPlant#5539.product.id.toString()), StructField(internalRefUUID,StringType,true), StructField(id,StringType,true)), static_invoke(DateTimeUtils.toJavaDate(productPlant#5539.blockedForReplenishmentStartingFrom)), if (isnull(productPlant#5539.productionAspect)) null else createexternalrow(if (isnull(productPlant#5539.productionAspect.productMovementPlants)) null else createexternalrow(if (isnull(productPlant#5539.productionAspect.productMovementPlants.unitOfIssue)) null else createexternalrow(invoke(productPlant#5539.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID.toString()), invoke(productPlant#5539.productionAspect.productMovementPlants.unitOfIssue.code.toString()), StructField(internalRefUUID,StringType,true), StructField(code,StringType,true)), StructField(unitOfIssue,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)), if (isnull(productPlant#5539.productionAspect.productPlanningPlants)) null else createexternalrow(if (isnull(productPlant#5539.productionAspect.productPlanningPlants.mrpType)) null else createexternalrow(invoke(productPlant#5539.productionAspect.productPlanningPlants.mrpType.internalRefUUID.toString()), invoke(productPlant#5539.productionAspect.productPlanningPlants.mrpType.code.toString()), StructField(internalRefUUID,StringType,true), StructField(code,StringType,true)), if (isnull(productPlant#5539.productionAspect.productPlanningPlants.abcIndicator)) null else createexternalrow(invoke(productPlant#5539.productionAspect.productPlanningPlants.abcIndicator.internalRefUUID.toString()), invoke(productPlant#5539.productionAspect.productPlanningPlants.abcIndicator.code.toString()), StructField(internalRefUUID,StringType,true), StructField(code,StringType,true)), if (isnull(productPlant#5539.productionAspect.productPlanningPlants.mrpController)) null else createexternalrow(invoke(productPlant#5539.productionAspect.productPlanningPlants.mrpController.internalRefUUID.toString()), invoke(productPlant#5539.productionAspect.productPlanningPlants.mrpController.id.toString()), StructField(internalRefUUID,StringType,true), StructField(id,StringType,true)), static_invoke(java.lang.Double.valueOf(productPlant#5539.productionAspect.productPlanningPlants.minimumLotSize)), if (isnull(productPlant#5539.productionAspect.productPlanningPlants.logisticalRoundingProfile)) null else createexternalrow(invoke(productPlant#5539.productionAspect.productPlanningPlants.logisticalRoundingProfile.internalRefUUID.toString()), invoke(productPlant#5539.productionAspect.productPlanningPlants.logisticalRoundingProfile.logisticalRoundingProfile.toString()), StructField(internalRefUUID,StringType,true), StructField(logisticalRoundingProfile,StringType,true)), StructField(mrpType,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true), StructField(abcIndicator,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true), StructField(mrpController,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true), StructField(minimumLotSize,DoubleType,true), StructField(logisticalRoundingProfile,StructType(StructField(internalRefUUID,StringType,true),StructField(logisticalRoundingProfile,StringType,true)),true)), StructField(productMovementPlants,StructType(StructField(unitOfIssue,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true), StructField(productPlanningPlants,StructType(StructField(mrpType,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(abcIndicator,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(mrpController,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(minimumLotSize,DoubleType,true),StructField(logisticalRoundingProfile,StructType(StructField(internalRefUUID,StringType,true),StructField(logisticalRoundingProfile,StringType,true)),true)),true)), if (isnull(productPlant#5539.salesPlant)) null else createexternalrow(if (isnull(productPlant#5539.salesPlant.loadingGroup)) null else createexternalrow(invoke(productPlant#5539.salesPlant.loadingGroup.internalRefUUID.toString()), invoke(productPlant#5539.salesPlant.loadingGroup.code.toString()), StructField(internalRefUUID,StringType,true), StructField(code,StringType,true)), StructField(loadingGroup,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)), mapobjects(lambdavariable(MapObject, StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true), true, 894), if (isnull(lambdavariable(MapObject, StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true), true, 894))) null else createexternalrow(static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true), true, 894).validFrom)), static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true), true, 894).validTo)), static_invoke(java.lang.Boolean.valueOf(lambdavariable(MapObject, StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true), true, 894).isListed)), StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true)), productPlant#5539.listing, Some(class scala.collection.mutable.ArraySeq)), if (isnull(productPlant#5539.sourceOfSupplyCategory)) null else createexternalrow(invoke(productPlant#5539.sourceOfSupplyCategory.internalRefUUID.toString()), invoke(productPlant#5539.sourceOfSupplyCategory.code.toString()), StructField(internalRefUUID,StringType,true), StructField(code,StringType,true)), StructField(systemId,StringType,true), StructField(internalUUID,StringType,true), StructField(plant,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true), StructField(product,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true), StructField(blockedForReplenishmentStartingFrom,DateType,true), StructField(productionAspect,StructType(StructField(productMovementPlants,StructType(StructField(unitOfIssue,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true),StructField(productPlanningPlants,StructType(StructField(mrpType,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(abcIndicator,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(mrpController,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(minimumLotSize,DoubleType,true),StructField(logisticalRoundingProfile,StructType(StructField(internalRefUUID,StringType,true),StructField(logisticalRoundingProfile,StringType,true)),true)),true)),true), StructField(salesPlant,StructType(StructField(loadingGroup,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true), StructField(listing,ArrayType(StructType(StructField(validFrom,TimestampType,true),StructField(validTo,TimestampType,true),StructField(isListed,BooleanType,true)),true),true), StructField(sourceOfSupplyCategory,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)), static_invoke(java.lang.Double.valueOf(outboundUnit#5555)), static_invoke(DateTimeUtils.toJavaTimestamp(stockDatetime#5778)), mapobjects(lambdavariable(MapObject, DoubleType, true, 895), static_invoke(java.lang.Double.valueOf(cast(lambdavariable(MapObject, DoubleType, true, 895) as double))), stockBatchQuantities#5779, Some(class scala.collection.mutable.ArraySeq)), mapobjects(lambdavariable(MapObject, TimestampType, false, 896), assertnotnull(static_invoke(DateTimeUtils.toJavaTimestamp(cast(lambdavariable(MapObject, TimestampType, false, 896) as timestamp)))), stockBatchShelfLifeEndDatetimes#5780, Some(class scala.collection.mutable.ArraySeq)), mapobjects(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897), assertnotnull(if (isnull(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897))) null else createexternalrow(invoke(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandChannel.toString()), invoke(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandStream.toString()), static_invoke(java.lang.Boolean.valueOf(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).considerVariance)), mapobjects(lambdavariable(MapObject, StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 898), if (isnull(lambdavariable(MapObject, StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 898))) null else createexternalrow(static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 898).demandStartDateTime)), static_invoke(java.lang.Double.valueOf(lambdavariable(MapObject, StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 898).demandQuantity)), static_invoke(java.lang.Double.valueOf(lambdavariable(MapObject, StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 898).demandVariance)), StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true)), lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandTimeBuckets, Some(class scala.collection.mutable.ArraySeq)), static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandPointInTimeStart)), static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandPointInTimeEnd)), mapobjects(lambdavariable(MapObject, StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 899), if (isnull(lambdavariable(MapObject, StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 899))) null else createexternalrow(static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 899).demandDateTime)), static_invoke(java.lang.Double.valueOf(lambdavariable(MapObject, StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 899).demandQuantity)), static_invoke(java.lang.Double.valueOf(lambdavariable(MapObject, StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 899).demandVariance)), StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true)), lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandPointInTime, Some(class scala.collection.mutable.ArraySeq)), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true))), rawDemands#5791, Some(class scala.collection.mutable.ArraySeq)), invoke(timezonecode#5805.toString()), StructField(product,StringType,true), StructField(plant,StringType,true), StructField(orderDateTime,TimestampType,true), StructField(productPlant,StructType(StructField(systemId,StringType,true),StructField(internalUUID,StringType,true),StructField(plant,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(product,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(blockedForReplenishmentStartingFrom,DateType,true),StructField(productionAspect,StructType(StructField(productMovementPlants,StructType(StructField(unitOfIssue,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true),StructField(productPlanningPlants,StructType(StructField(mrpType,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(abcIndicator,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(mrpController,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(minimumLotSize,DoubleType,true),StructField(logisticalRoundingProfile,StructType(StructField(internalRefUUID,StringType,true),StructField(logisticalRoundingProfile,StringType,true)),true)),true)),true),StructField(salesPlant,StructType(StructField(loadingGroup,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true),StructField(listing,ArrayType(StructType(StructField(validFrom,TimestampType,true),StructField(validTo,TimestampType,true),StructField(isListed,BooleanType,true)),true),true),StructField(sourceOfSupplyCategory,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true), StructField(outboundUnit,DoubleType,true), StructField(stockDatetime,TimestampType,true), StructField(stockBatchQuantities,ArrayType(DoubleType,true),false), StructField(stockBatchShelfLifeEndDatetimes,ArrayType(TimestampType,false),false), StructField(rawDemands,ArrayType(StructType(StructField(demandChannel,StringType,true),StructField(demandStream,StringType,true),StructField(considerVariance,BooleanType,true),StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true),StructField(demandPointInTimeStart,TimestampType,true),StructField(demandPointInTimeEnd,TimestampType,true),StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true)),false),false), StructField(timezonecode,StringType,true)), obj#2697: org.apache.spark.sql.Row
(704) MapElements
Arguments: com.sap.s4hana.eureka.business.crporderquantitykpiservice.core.business.datasnapshot.DemandTransformatorImpl$$Lambda/0x0000000802111db0@1fa786b, interface org.apache.spark.sql.Row, [StructField(product,StringType,true), StructField(plant,StringType,true), StructField(orderDateTime,TimestampType,true), StructField(productPlant,StructType(StructField(systemId,StringType,true),StructField(internalUUID,StringType,true),StructField(plant,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(product,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(blockedForReplenishmentStartingFrom,DateType,true),StructField(productionAspect,StructType(StructField(productMovementPlants,StructType(StructField(unitOfIssue,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true),StructField(productPlanningPlants,StructType(StructField(mrpType,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(abcIndicator,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(mrpController,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(minimumLotSize,DoubleType,true),StructField(logisticalRoundingProfile,StructType(StructField(internalRefUUID,StringType,true),StructField(logisticalRoundingProfile,StringType,true)),true)),true)),true),StructField(salesPlant,StructType(StructField(loadingGroup,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true),StructField(listing,ArrayType(StructType(StructField(validFrom,TimestampType,true),StructField(validTo,TimestampType,true),StructField(isListed,BooleanType,true)),true),true),StructField(sourceOfSupplyCategory,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true), StructField(outboundUnit,DoubleType,true), StructField(stockDatetime,TimestampType,true), StructField(stockBatchQuantities,ArrayType(DoubleType,true),false), StructField(stockBatchShelfLifeEndDatetimes,ArrayType(TimestampType,false),false), StructField(rawDemands,ArrayType(StructType(StructField(demandChannel,StringType,true),StructField(demandStream,StringType,true),StructField(considerVariance,BooleanType,true),StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true),StructField(demandPointInTimeStart,TimestampType,true),StructField(demandPointInTimeEnd,TimestampType,true),StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true)),false),false), StructField(timezonecode,StringType,true)], obj#2702: org.apache.spark.sql.Row
(705) SerializeFromObject
Arguments: [if (invoke(assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt(0))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 0, product), StringType, ObjectType(class java.lang.String)))) AS product#5806, if (invoke(assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt(1))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 1, plant), StringType, ObjectType(class java.lang.String)))) AS plant#5807, if (invoke(assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt(2))) null else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), assertnotnull(if (isnull(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)))) null else named_struct(demandChannel, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(0))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 0, demandChannel), StringType, ObjectType(class java.lang.String)))), demandStream, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(1))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 1, demandStream), StringType, ObjectType(class java.lang.String)))), considerVariance, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(2))) null else invoke(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 2, considerVariance), BooleanType, ObjectType(class java.lang.Boolean)).booleanValue()), demandValues, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(3))) null else if (invoke(class [D.isInstance(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 3, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object))))) static_invoke(ArrayData.toArrayData(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 3, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object)))) else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 885), assertnotnull(invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 885), DoubleType, ObjectType(class java.lang.Double)).doubleValue())), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 3, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object)), None), demandVariances, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(4))) null else if (invoke(class [D.isInstance(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object))))) static_invoke(ArrayData.toArrayData(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object)))) else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 886), invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 886), DoubleType, ObjectType(class java.lang.Double)).doubleValue()), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object)), None), anchorDatetimes, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(5))) null else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 887), assertnotnull(static_invoke(DateTimeUtils.fromJavaTimestamp(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 887), TimestampType, ObjectType(class java.sql.Timestamp))))), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 5, anchorDatetimes), ArrayType(TimestampType,false), ObjectType(class java.lang.Object)), None), anchorWeekdays, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(6))) null else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 888), assertnotnull(static_invoke(UTF8String.fromString(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 888), StringType, ObjectType(class java.lang.String))))), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 6, anchorWeekdays), ArrayType(StringType,false), ObjectType(class java.lang.Object)), None), anchorIndices, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(7))) null else if (invoke(class [I.isInstance(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 7, anchorIndices), ArrayType(IntegerType,false), ObjectType(class java.lang.Object))))) static_invoke(ArrayData.toArrayData(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 7, anchorIndices), ArrayType(IntegerType,false), ObjectType(class java.lang.Object)))) else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 889), assertnotnull(invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 889), IntegerType, ObjectType(class java.lang.Integer)).intValue())), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 7, anchorIndices), ArrayType(IntegerType,false), ObjectType(class java.lang.Object)), None))), validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 2, dayBucketDemands), ArrayType(StructType(StructField(demandChannel,StringType,true),StructField(demandStream,StringType,true),StructField(considerVariance,BooleanType,true),StructField(demandValues,ArrayType(DoubleType,false),true),StructField(demandVariances,ArrayType(DoubleType,true),true),StructField(anchorDatetimes,ArrayType(TimestampType,false),true),StructField(anchorWeekdays,ArrayType(StringType,false),true),StructField(anchorIndices,ArrayType(IntegerType,false),true)),false), ObjectType(class java.lang.Object)), None) AS dayBucketDemands#5808, if (invoke(assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt(3))) null else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), assertnotnull(if (isnull(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)))) null else named_struct(demandChannel, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(0))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 0, demandChannel), StringType, ObjectType(class java.lang.String)))), demandStream, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(1))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 1, demandStream), StringType, ObjectType(class java.lang.String)))), considerVariance, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(2))) null else invoke(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 2, considerVariance), BooleanType, ObjectType(class java.lang.Boolean)).booleanValue()), demandDatetimes, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(3))) null else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 891), assertnotnull(static_invoke(DateTimeUtils.fromJavaTimestamp(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 891), TimestampType, ObjectType(class java.sql.Timestamp))))), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 3, demandDatetimes), ArrayType(TimestampType,false), ObjectType(class java.lang.Object)), None), demandValues, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(4))) null else if (invoke(class [D.isInstance(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object))))) static_invoke(ArrayData.toArrayData(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object)))) else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 892), assertnotnull(invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 892), DoubleType, ObjectType(class java.lang.Double)).doubleValue())), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object)), None), demandVariances, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(5))) null else if (invoke(class [D.isInstance(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 5, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object))))) static_invoke(ArrayData.toArrayData(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 5, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object)))) else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 893), invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 893), DoubleType, ObjectType(class java.lang.Double)).doubleValue()), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 5, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object)), None), horizonStartDatetime, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(6))) null else static_invoke(DateTimeUtils.fromJavaTimestamp(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 6, horizonStartDatetime), TimestampType, ObjectType(class java.sql.Timestamp)))), horizonEndDatetime, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(7))) null else static_invoke(DateTimeUtils.fromJavaTimestamp(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 7, horizonEndDatetime), TimestampType, ObjectType(class java.sql.Timestamp)))))), validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 3, pointInTimeDemands), ArrayType(StructType(StructField(demandChannel,StringType,true),StructField(demandStream,StringType,true),StructField(considerVariance,BooleanType,true),StructField(demandDatetimes,ArrayType(TimestampType,false),true),StructField(demandValues,ArrayType(DoubleType,false),true),StructField(demandVariances,ArrayType(DoubleType,true),true),StructField(horizonStartDatetime,TimestampType,true),StructField(horizonEndDatetime,TimestampType,true)),false), ObjectType(class java.lang.Object)), None) AS pointInTimeDemands#5809]
(706) Join
Arguments: LeftOuter, ((plant#5807 <=> plant#5272) AND (product#5806 <=> product#5271))
(707) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273, productPlant#5284, outboundUnit#5300, stockDatetime#5523, stockBatchQuantities#5524, stockBatchShelfLifeEndDatetimes#5525, plant#5807, dayBucketDemands#5808, pointInTimeDemands#5809]
(708) Project
Arguments: [product#5271, plant#5272, orderDateTime#5273, productPlant#5284, outboundUnit#5300, stockDatetime#5523, stockBatchQuantities#5524, stockBatchShelfLifeEndDatetimes#5525, dayBucketDemands#5808, pointInTimeDemands#5809]
(709) LogicalRelation
Arguments: parquet, [marketUnit#3043, description#3044, articleHierarchy#3045, defaultCurrency#3046, responsibilities#3047, replenishmentTypes#3048, distributionCenters#3049, assignedArticleHierarchyNodes#3050, minOrderQtySetting#3051, minOrderQtySettingInternal#3052, listingCheck#3053, odsSelection#3054, demandProfiles#3055, constraintProfiles#3056, optimizationProfiles#3057, orderGroupSplitProfiles#3058, supplierMinimumProfiles#3059, multipleRestrictionProfiles#3060, preferredUomSource#3061, handlingOfUnfulfilledDemands#3062, negligibleQuantitiesThreshold#3063, eventtype#3064], false
(710) Repartition
Arguments: 37, true
(711) Filter
Arguments: (marketUnit#3043 <=> 10000_OP_PERF)
(712) Project
Arguments: [marketUnit#3043, description#3044, articleHierarchy#3045, defaultCurrency#3046, responsibilities#3047, replenishmentTypes#3048, distributionCenters#3049, assignedArticleHierarchyNodes#3050, minOrderQtySetting#3051, minOrderQtySettingInternal#3052, listingCheck#3053, odsSelection#3054, demandProfiles#3055, constraintProfiles#3056, optimizationProfiles#3057, orderGroupSplitProfiles#3058, supplierMinimumProfiles#3059, multipleRestrictionProfiles#3060, preferredUomSource#3061, handlingOfUnfulfilledDemands#3062, negligibleQuantitiesThreshold#3063, eventtype#3064]
(713) Project
Arguments: [distributionCenters#3049]
(714) Generate
Arguments: explode(distributionCenters#3049), false, [distributionCenters#3065]
(715) Project
Arguments: [distributionCenters#3065]
(716) Generate
Arguments: explode(distributionCenters#3065.storageLocations), false, [storageLocations#3066]
(717) Project
Arguments: [distributionCenters#3065.id AS plantId#3067, distributionCenters#3065.internalRefUUID AS plantUuid#3068, storageLocations#3066]
(718) Project
Arguments: [plantId#3067, plantUuid#3068, storageLocations#3066.id AS storageLocId#3069, storageLocations#3066.internalRefUUID AS storageLocUuid#3070]
(719) LogicalRelation
Arguments: parquet, [product#3071, plant#3072, orderDateTime#3073, planningStartDateTime#3074], false
(720) RepartitionByExpression
Arguments: [product#3071, plant#3072], 37
(721) Project
Arguments: [product#3071, plant#3072, orderDateTime#3073]
(722) LogicalRelation
Arguments: parquet, [systemId#3075, internalUUID#3076, plant#3077, product#3078, blockedForReplenishmentStartingFrom#3079, productionAspect#3080, salesPlant#3081, listing#3082, sourceOfSupplyCategory#3083], false
(723) Repartition
Arguments: 37, true
(724) Project
Arguments: [systemId#3075, internalUUID#3076, plant#3077, product#3078, blockedForReplenishmentStartingFrom#3079, productionAspect#3080, salesPlant#3081, listing#3082, sourceOfSupplyCategory#3083, struct(systemId, systemId#3075, internalUUID, internalUUID#3076, plant, plant#3077, product, product#3078, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#3079, productionAspect, productionAspect#3080, salesPlant, salesPlant#3081, listing, listing#3082, sourceOfSupplyCategory, sourceOfSupplyCategory#3083) AS productPlant#3084]
(725) Project
Arguments: [productPlant#3084]
(726) Join
Arguments: LeftOuter, ((product#3071 <=> productPlant#3084.product.internalRefUUID) AND (plant#3072 <=> productPlant#3084.plant.internalRefUUID))
(727) Project
Arguments: [product#3071, plant#3072, orderDateTime#3073, productPlant#3084]
(728) LogicalRelation
Arguments: parquet, [systemId#3085, internalUUID#3086, id#3087, displayId#3088, name#3089, baseUnitOfMeasure#3090, unitOfMeasures#3091, unitOfMeasureConversions#3092, productionAspect#3093, salesAspect#3094, procurementAspect#3095], false
(729) Repartition
Arguments: 37, true
(730) Join
Arguments: LeftOuter, (product#3071 = internalUUID#3086)
(731) Project
Arguments: [product#3071, plant#3072, orderDateTime#3073, productPlant#3084, systemId#3085, internalUUID#3086, id#3087, displayId#3088, name#3089, baseUnitOfMeasure#3090, unitOfMeasures#3091, unitOfMeasureConversions#3092, productionAspect#3093, salesAspect#3094, procurementAspect#3095, filter(unitOfMeasureConversions#3092, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#3084.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#3084.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#3090.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#3090.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#3096]
(732) Generate
Arguments: explode(filteredUnitOfMeasureConversions#3096.quantityNumerator), true, [quantityNumerator#3097]
(733) Project
Arguments: [product#3071, plant#3072, orderDateTime#3073, productPlant#3084, systemId#3085, internalUUID#3086, id#3087, displayId#3088, name#3089, baseUnitOfMeasure#3090, unitOfMeasures#3091, unitOfMeasureConversions#3092, productionAspect#3093, salesAspect#3094, procurementAspect#3095, filteredUnitOfMeasureConversions#3096, quantityNumerator#3097]
(734) Generate
Arguments: explode(filteredUnitOfMeasureConversions#3096.quantityDenominator), true, [quantityDenominator#3098]
(735) Project
Arguments: [product#3071, plant#3072, orderDateTime#3073, productPlant#3084, systemId#3085, internalUUID#3086, id#3087, displayId#3088, name#3089, baseUnitOfMeasure#3090, unitOfMeasures#3091, unitOfMeasureConversions#3092, productionAspect#3093, salesAspect#3094, procurementAspect#3095, filteredUnitOfMeasureConversions#3096, quantityNumerator#3097, quantityDenominator#3098]
(736) Project
Arguments: [product#3071, plant#3072, orderDateTime#3073, productPlant#3084, systemId#3085, internalUUID#3086, id#3087, displayId#3088, name#3089, baseUnitOfMeasure#3090, unitOfMeasures#3091, unitOfMeasureConversions#3092, productionAspect#3093, salesAspect#3094, procurementAspect#3095, filteredUnitOfMeasureConversions#3096, quantityNumerator#3097, quantityDenominator#3098, (cast(quantityNumerator#3097 as double) / cast(quantityDenominator#3098 as double)) AS outboundUnit#3099]
(737) Project
Arguments: [product#3071, plant#3072, orderDateTime#3073, productPlant#3084, systemId#3085, internalUUID#3086, id#3087, displayId#3088, name#3089, baseUnitOfMeasure#3090, unitOfMeasures#3091, unitOfMeasureConversions#3092, productionAspect#3093, salesAspect#3094, procurementAspect#3095, filteredUnitOfMeasureConversions#3096, quantityNumerator#3097, quantityDenominator#3098, CASE WHEN (isnull(outboundUnit#3099) OR (outboundUnit#3099 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#3099 END AS outboundUnit#3100]
(738) Project
Arguments: [product#3071, plant#3072, orderDateTime#3073, productPlant#3084, outboundUnit#3100]
(739) Project
Arguments: [plant#3072]
(740) Deduplicate
Arguments: [plant#3072]
(741) Join
Arguments: Inner, (plantUuid#3068 = plant#3072)
(742) Project
Arguments: [plantId#3067, plantUuid#3068, storageLocId#3069, storageLocUuid#3070]
(743) Project
Arguments: [plantId#3067, plantUuid#3068 AS plant#3042, storageLocId#3069, storageLocUuid#3070]
(744) Join
Arguments: Inner, (plant#5272 = plant#3042)
(745) Project
Arguments: [plant#5272, product#5271, orderDateTime#5273, productPlant#5284, outboundUnit#5300, stockDatetime#5523, stockBatchQuantities#5524, stockBatchShelfLifeEndDatetimes#5525, dayBucketDemands#5808, pointInTimeDemands#5809, plantId#3067, storageLocId#3069, storageLocUuid#3070, plant#3042]
(746) LogicalRelation
Arguments: parquet, [systemId#3007, internalUUID#3008, id#3009, displayId#3010, supplier#3011, type#3012, status#3013, isMarkedForDeletion#3014, items#3015], false
(747) Repartition
Arguments: 37, true
(748) Generate
Arguments: explode(items#3015), false, [item#3019]
(749) Project
Arguments: [id#3009, internalUUID#3008, isMarkedForDeletion#3014, supplier#3011.internalRefUUID AS supplierUuid#3016, item#3019]
(750) Filter
Arguments: (((NOT isMarkedForDeletion#3014 AND NOT item#3019.deletionIndicator) AND NOT item#3019.completeIndicator) AND NOT item#3019.returnIndicator)
(751) Project
Arguments: [id#3009, internalUUID#3008, supplierUuid#3016, item#3019.plant.internalRefUUID AS plant#3024, item#3019.product.internalRefUUID AS product#3025, item#3019.storageLocation.internalRefUUID AS storageLocUuid#3026, item#3019.quantityUnit.code AS quantityUom#3027, item#3019.quantityUnit.internalRefUUID AS quantityUomUuid#3028, item#3019.quantityNumerator AS quantityNumerator#3029, item#3019.quantityDenominator AS quantityDenominator#3030, item#3019.scheduleLines AS scheduleLines#3031, item#3019.confirmations AS confirmations#3032]
(752) Join
Arguments: Inner, (((product#5271 = product#3025) AND (plant#5272 = plant#3024)) AND (storageLocUuid#3070 = storageLocUuid#3026))
(753) Project
Arguments: [product#5271, plant#5272, storageLocUuid#3070, orderDateTime#5273, productPlant#5284, outboundUnit#5300, stockDatetime#5523, stockBatchQuantities#5524, stockBatchShelfLifeEndDatetimes#5525, dayBucketDemands#5808, pointInTimeDemands#5809, plantId#3067, storageLocId#3069, id#3009, internalUUID#3008, supplierUuid#3016, quantityUom#3027, quantityUomUuid#3028, quantityNumerator#3029, quantityDenominator#3030, scheduleLines#3031, confirmations#3032, product#3025, plant#3024, storageLocUuid#3026, ... 1 more fields]
(754) Project
Arguments: [id#3009, internalUUID#3008, supplierUuid#3016, plant#3024, product#3025, storageLocUuid#3026, quantityUom#3027, quantityUomUuid#3028, quantityNumerator#3029, quantityDenominator#3030, scheduleLines#3031, confirmations#3032, stockDatetime#5523]
(755) Project
Arguments: [id#3009, internalUUID#3008, supplierUuid#3016, plant#3024, product#3025, storageLocUuid#3026, quantityUom#3027, quantityUomUuid#3028, quantityNumerator#3029, quantityDenominator#3030, scheduleLines#3031, confirmations#3032, stockDatetime#5523, array_size(filter(confirmations#3032, lambdafunction((((lambda x_2#3116.deletionIndicator = false) AND (lambda x_2#3116.isRelevantForConfirmation = true)) AND isnotnull(lambda x_2#3116.confirmedDeliveryAt)), lambda x_2#3116, false))) AS _w0#3123]
(756) Window
Arguments: [sum(_w0#3123) windowspecdefinition(internalUUID#3008, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#3124L], [internalUUID#3008]
(757) Project
Arguments: [id#3009, internalUUID#3008, supplierUuid#3016, plant#3024, product#3025, storageLocUuid#3026, quantityUom#3027, quantityUomUuid#3028, quantityNumerator#3029, quantityDenominator#3030, scheduleLines#3031, confirmations#3032, stockDatetime#5523, _w0#3123, _we0#3124L, filter(transform(CASE WHEN (_we0#3124L > cast(0 as bigint)) THEN transform(filter(confirmations#3032, lambdafunction((((lambda x_2#3117.deletionIndicator = false) AND (lambda x_2#3117.isRelevantForConfirmation = true)) AND isnotnull(lambda x_2#3117.confirmedDeliveryAt)), lambda x_2#3117, false)), lambdafunction(struct(openQty, greatest((lambda x_3#3120.confirmedQuantity - coalesce(lambda x_3#3120.mrpRelevantQuantity, 0.0)), 0.0), availabilityDatetime, lambda x_3#3120.confirmedDeliveryAt), lambda x_3#3120, false)) ELSE transform(scheduleLines#3031, lambdafunction(struct(openQty, greatest((lambda x_1#3118.quantity - coalesce(lambda x_1#3118.receivedQuantity, 0.0)), 0.0), availabilityDatetime, lambda x_1#3118.deliveryAt), lambda x_1#3118, false)) END, lambdafunction(struct(documentId, id#3009, documentUuid, internalUUID#3008, openQty, lambda x_4#3121.openQty, openQtyInBaseUnit, ((lambda x_4#3121.openQty * quantityNumerator#3029) / quantityDenominator#3030), qtyUom, quantityUom#3027, qtyUomUuid, quantityUomUuid#3028, availabilityDatetime, lambda x_4#3121.availabilityDatetime, shelfLifeEndDatetime, 2199-01-01 00:00:00), lambda x_4#3121, false)), lambdafunction(NOT (lambda x_5#3122.openQty = 0.0), lambda x_5#3122, false)) AS openGoodsMovements#3115]
(758) Project
Arguments: [id#3009, internalUUID#3008, supplierUuid#3016, plant#3024, product#3025, storageLocUuid#3026, quantityUom#3027, quantityUomUuid#3028, quantityNumerator#3029, quantityDenominator#3030, scheduleLines#3031, confirmations#3032, stockDatetime#5523, openGoodsMovements#3115]
(759) Aggregate
Arguments: [product#3025, plant#3024], [product#3025, plant#3024, flatten(collect_list(openGoodsMovements#3115, 0, 0)) AS openGoodsMovements#3125]
(760) Filter
Arguments: (array_size(openGoodsMovements#3125) > 0)
(761) LogicalRelation
Arguments: parquet, [product#4666, plant#4667, orderDateTime#4668, planningStartDateTime#4669], false
(762) RepartitionByExpression
Arguments: [product#4666, plant#4667], 37
(763) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668]
(764) LogicalRelation
Arguments: parquet, [systemId#4670, internalUUID#4671, plant#4672, product#4673, blockedForReplenishmentStartingFrom#4674, productionAspect#4675, salesPlant#4676, listing#4677, sourceOfSupplyCategory#4678], false
(765) Repartition
Arguments: 37, true
(766) Project
Arguments: [systemId#4670, internalUUID#4671, plant#4672, product#4673, blockedForReplenishmentStartingFrom#4674, productionAspect#4675, salesPlant#4676, listing#4677, sourceOfSupplyCategory#4678, struct(systemId, systemId#4670, internalUUID, internalUUID#4671, plant, plant#4672, product, product#4673, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#4674, productionAspect, productionAspect#4675, salesPlant, salesPlant#4676, listing, listing#4677, sourceOfSupplyCategory, sourceOfSupplyCategory#4678) AS productPlant#4679]
(767) Project
Arguments: [productPlant#4679]
(768) Join
Arguments: LeftOuter, ((product#4666 <=> productPlant#4679.product.internalRefUUID) AND (plant#4667 <=> productPlant#4679.plant.internalRefUUID))
(769) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668, productPlant#4679]
(770) LogicalRelation
Arguments: parquet, [systemId#4680, internalUUID#4681, id#4682, displayId#4683, name#4684, baseUnitOfMeasure#4685, unitOfMeasures#4686, unitOfMeasureConversions#4687, productionAspect#4688, salesAspect#4689, procurementAspect#4690], false
(771) Repartition
Arguments: 37, true
(772) Join
Arguments: LeftOuter, (product#4666 = internalUUID#4681)
(773) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668, productPlant#4679, systemId#4680, internalUUID#4681, id#4682, displayId#4683, name#4684, baseUnitOfMeasure#4685, unitOfMeasures#4686, unitOfMeasureConversions#4687, productionAspect#4688, salesAspect#4689, procurementAspect#4690, filter(unitOfMeasureConversions#4687, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#4679.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#4679.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#4685.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#4685.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#4691]
(774) Generate
Arguments: explode(filteredUnitOfMeasureConversions#4691.quantityNumerator), true, [quantityNumerator#4692]
(775) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668, productPlant#4679, systemId#4680, internalUUID#4681, id#4682, displayId#4683, name#4684, baseUnitOfMeasure#4685, unitOfMeasures#4686, unitOfMeasureConversions#4687, productionAspect#4688, salesAspect#4689, procurementAspect#4690, filteredUnitOfMeasureConversions#4691, quantityNumerator#4692]
(776) Generate
Arguments: explode(filteredUnitOfMeasureConversions#4691.quantityDenominator), true, [quantityDenominator#4693]
(777) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668, productPlant#4679, systemId#4680, internalUUID#4681, id#4682, displayId#4683, name#4684, baseUnitOfMeasure#4685, unitOfMeasures#4686, unitOfMeasureConversions#4687, productionAspect#4688, salesAspect#4689, procurementAspect#4690, filteredUnitOfMeasureConversions#4691, quantityNumerator#4692, quantityDenominator#4693]
(778) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668, productPlant#4679, systemId#4680, internalUUID#4681, id#4682, displayId#4683, name#4684, baseUnitOfMeasure#4685, unitOfMeasures#4686, unitOfMeasureConversions#4687, productionAspect#4688, salesAspect#4689, procurementAspect#4690, filteredUnitOfMeasureConversions#4691, quantityNumerator#4692, quantityDenominator#4693, (cast(quantityNumerator#4692 as double) / cast(quantityDenominator#4693 as double)) AS outboundUnit#4694]
(779) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668, productPlant#4679, systemId#4680, internalUUID#4681, id#4682, displayId#4683, name#4684, baseUnitOfMeasure#4685, unitOfMeasures#4686, unitOfMeasureConversions#4687, productionAspect#4688, salesAspect#4689, procurementAspect#4690, filteredUnitOfMeasureConversions#4691, quantityNumerator#4692, quantityDenominator#4693, CASE WHEN (isnull(outboundUnit#4694) OR (outboundUnit#4694 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#4694 END AS outboundUnit#4695]
(780) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668, productPlant#4679, outboundUnit#4695]
(781) LogicalRelation
Arguments: parquet, [systemId#4696, internalUUID#4697, product#4698, plant#4699, calculationDateTime#4700, stockQuantities#4701], false
(782) Repartition
Arguments: 37, true
(783) LogicalRelation
Arguments: parquet, [marketUnit#4702, description#4703, articleHierarchy#4704, defaultCurrency#4705, responsibilities#4706, replenishmentTypes#4707, distributionCenters#4708, assignedArticleHierarchyNodes#4709, minOrderQtySetting#4710, minOrderQtySettingInternal#4711, listingCheck#4712, odsSelection#4713, demandProfiles#4714, constraintProfiles#4715, optimizationProfiles#4716, orderGroupSplitProfiles#4717, supplierMinimumProfiles#4718, multipleRestrictionProfiles#4719, preferredUomSource#4720, handlingOfUnfulfilledDemands#4721, negligibleQuantitiesThreshold#4722, eventtype#4723], false
(784) Repartition
Arguments: 37, true
(785) Filter
Arguments: (marketUnit#4702 <=> 10000_OP_PERF)
(786) Project
Arguments: [marketUnit#4702, description#4703, articleHierarchy#4704, defaultCurrency#4705, responsibilities#4706, replenishmentTypes#4707, distributionCenters#4708, assignedArticleHierarchyNodes#4709, minOrderQtySetting#4710, minOrderQtySettingInternal#4711, listingCheck#4712, odsSelection#4713, demandProfiles#4714, constraintProfiles#4715, optimizationProfiles#4716, orderGroupSplitProfiles#4717, supplierMinimumProfiles#4718, multipleRestrictionProfiles#4719, preferredUomSource#4720, handlingOfUnfulfilledDemands#4721, negligibleQuantitiesThreshold#4722, eventtype#4723]
(787) Project
Arguments: [distributionCenters#4708]
(788) Generate
Arguments: explode(distributionCenters#4708), false, [distributionCenters#4724]
(789) Project
Arguments: [distributionCenters#4724]
(790) Generate
Arguments: explode(distributionCenters#4724.storageLocations), false, [storageLocations#4725]
(791) Project
Arguments: [distributionCenters#4724.id AS plantId#4726, distributionCenters#4724.internalRefUUID AS plantUuid#4727, storageLocations#4725]
(792) Project
Arguments: [plantId#4726, plantUuid#4727, storageLocations#4725.id AS storageLocId#4728, storageLocations#4725.internalRefUUID AS storageLocUuid#4729]
(793) LogicalRelation
Arguments: parquet, [product#4730, plant#4731, orderDateTime#4732, planningStartDateTime#4733], false
(794) RepartitionByExpression
Arguments: [product#4730, plant#4731], 37
(795) Project
Arguments: [product#4730, plant#4731, orderDateTime#4732]
(796) LogicalRelation
Arguments: parquet, [systemId#4734, internalUUID#4735, plant#4736, product#4737, blockedForReplenishmentStartingFrom#4738, productionAspect#4739, salesPlant#4740, listing#4741, sourceOfSupplyCategory#4742], false
(797) Repartition
Arguments: 37, true
(798) Project
Arguments: [systemId#4734, internalUUID#4735, plant#4736, product#4737, blockedForReplenishmentStartingFrom#4738, productionAspect#4739, salesPlant#4740, listing#4741, sourceOfSupplyCategory#4742, struct(systemId, systemId#4734, internalUUID, internalUUID#4735, plant, plant#4736, product, product#4737, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#4738, productionAspect, productionAspect#4739, salesPlant, salesPlant#4740, listing, listing#4741, sourceOfSupplyCategory, sourceOfSupplyCategory#4742) AS productPlant#4743]
(799) Project
Arguments: [productPlant#4743]
(800) Join
Arguments: LeftOuter, ((product#4730 <=> productPlant#4743.product.internalRefUUID) AND (plant#4731 <=> productPlant#4743.plant.internalRefUUID))
(801) Project
Arguments: [product#4730, plant#4731, orderDateTime#4732, productPlant#4743]
(802) LogicalRelation
Arguments: parquet, [systemId#4744, internalUUID#4745, id#4746, displayId#4747, name#4748, baseUnitOfMeasure#4749, unitOfMeasures#4750, unitOfMeasureConversions#4751, productionAspect#4752, salesAspect#4753, procurementAspect#4754], false
(803) Repartition
Arguments: 37, true
(804) Join
Arguments: LeftOuter, (product#4730 = internalUUID#4745)
(805) Project
Arguments: [product#4730, plant#4731, orderDateTime#4732, productPlant#4743, systemId#4744, internalUUID#4745, id#4746, displayId#4747, name#4748, baseUnitOfMeasure#4749, unitOfMeasures#4750, unitOfMeasureConversions#4751, productionAspect#4752, salesAspect#4753, procurementAspect#4754, filter(unitOfMeasureConversions#4751, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#4743.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#4743.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#4749.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#4749.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#4755]
(806) Generate
Arguments: explode(filteredUnitOfMeasureConversions#4755.quantityNumerator), true, [quantityNumerator#4756]
(807) Project
Arguments: [product#4730, plant#4731, orderDateTime#4732, productPlant#4743, systemId#4744, internalUUID#4745, id#4746, displayId#4747, name#4748, baseUnitOfMeasure#4749, unitOfMeasures#4750, unitOfMeasureConversions#4751, productionAspect#4752, salesAspect#4753, procurementAspect#4754, filteredUnitOfMeasureConversions#4755, quantityNumerator#4756]
(808) Generate
Arguments: explode(filteredUnitOfMeasureConversions#4755.quantityDenominator), true, [quantityDenominator#4757]
(809) Project
Arguments: [product#4730, plant#4731, orderDateTime#4732, productPlant#4743, systemId#4744, internalUUID#4745, id#4746, displayId#4747, name#4748, baseUnitOfMeasure#4749, unitOfMeasures#4750, unitOfMeasureConversions#4751, productionAspect#4752, salesAspect#4753, procurementAspect#4754, filteredUnitOfMeasureConversions#4755, quantityNumerator#4756, quantityDenominator#4757]
(810) Project
Arguments: [product#4730, plant#4731, orderDateTime#4732, productPlant#4743, systemId#4744, internalUUID#4745, id#4746, displayId#4747, name#4748, baseUnitOfMeasure#4749, unitOfMeasures#4750, unitOfMeasureConversions#4751, productionAspect#4752, salesAspect#4753, procurementAspect#4754, filteredUnitOfMeasureConversions#4755, quantityNumerator#4756, quantityDenominator#4757, (cast(quantityNumerator#4756 as double) / cast(quantityDenominator#4757 as double)) AS outboundUnit#4758]
(811) Project
Arguments: [product#4730, plant#4731, orderDateTime#4732, productPlant#4743, systemId#4744, internalUUID#4745, id#4746, displayId#4747, name#4748, baseUnitOfMeasure#4749, unitOfMeasures#4750, unitOfMeasureConversions#4751, productionAspect#4752, salesAspect#4753, procurementAspect#4754, filteredUnitOfMeasureConversions#4755, quantityNumerator#4756, quantityDenominator#4757, CASE WHEN (isnull(outboundUnit#4758) OR (outboundUnit#4758 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#4758 END AS outboundUnit#4759]
(812) Project
Arguments: [product#4730, plant#4731, orderDateTime#4732, productPlant#4743, outboundUnit#4759]
(813) Project
Arguments: [plant#4731]
(814) Deduplicate
Arguments: [plant#4731]
(815) Join
Arguments: Inner, (plantUuid#4727 = plant#4731)
(816) Project
Arguments: [plantId#4726, plantUuid#4727, storageLocId#4728, storageLocUuid#4729]
(817) Join
Arguments: Inner, (plant#4699.internalRefUUID <=> plantUuid#4727)
(818) Generate
Arguments: explode(filter(stockQuantities#4701, lambdafunction(((lambda x#1330.storageLocation.internalRefUuid = storageLocUuid#4729) AND (lambda x#1330.storageLocation.Id = storageLocId#4728)), lambda x#1330, false))), false, [stockQuantity#4760]
(819) Project
Arguments: [systemId#4696, internalUUID#4697, product#4698, plant#4699, calculationDateTime#4700, stockQuantities#4701, plantId#4726, plantUuid#4727, storageLocId#4728, storageLocUuid#4729, stockQuantity#4760]
(820) Aggregate
Arguments: [plantUuid#4727, internalUUID#4697, plant#4699, product#4698, systemId#4696], [plantUuid#4727, internalUUID#4697, plant#4699, product#4698, systemId#4696, first(calculationDateTime#4700, false) AS calculationDateTime#4761, collect_list(stockQuantity#4760, 0, 0) AS stockQuantities#4762]
(821) Project
Arguments: [systemId#4696, internalUUID#4697, product#4698, plant#4699, calculationDateTime#4761, stockQuantities#4762]
(822) Generate
Arguments: explode(stockQuantities#4762), false, [stockQuantity#4763]
(823) Project
Arguments: [systemId#4696, internalUUID#4697, product#4698, plant#4699, calculationDateTime#4761, stockQuantities#4762, stockQuantity#4763]
(824) Project
Arguments: [plant#4699.id AS plant#4764, plant#4699.internalRefUUID AS plantUuid#4765, product#4698.id AS product#4766, product#4698.internalRefUUID AS productUuid#4767, calculationDateTime#4761, stockQuantity#4763.storagelocation.id AS storageLocId#4768, stockQuantity#4763.storagelocation.internalRefUUID AS storageLocUuid#4769, stockQuantity#4763.quantity.measure AS quantity#4770, stockQuantity#4763.specialStockIndicator.code AS specialStockIndicator#4771, stockQuantity#4763.stockType.code AS stockType#4772]
(825) Filter
Arguments: ((specialStockIndicator#4771 = ) AND (stockType#4772 = 01))
(826) LogicalRelation
Arguments: parquet, [product#4773, plant#4774, orderDateTime#4775, planningStartDateTime#4776], false
(827) RepartitionByExpression
Arguments: [product#4773, plant#4774], 37
(828) Project
Arguments: [product#4773, plant#4774, orderDateTime#4775]
(829) LogicalRelation
Arguments: parquet, [systemId#4777, internalUUID#4778, plant#4779, product#4780, blockedForReplenishmentStartingFrom#4781, productionAspect#4782, salesPlant#4783, listing#4784, sourceOfSupplyCategory#4785], false
(830) Repartition
Arguments: 37, true
(831) Project
Arguments: [systemId#4777, internalUUID#4778, plant#4779, product#4780, blockedForReplenishmentStartingFrom#4781, productionAspect#4782, salesPlant#4783, listing#4784, sourceOfSupplyCategory#4785, struct(systemId, systemId#4777, internalUUID, internalUUID#4778, plant, plant#4779, product, product#4780, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#4781, productionAspect, productionAspect#4782, salesPlant, salesPlant#4783, listing, listing#4784, sourceOfSupplyCategory, sourceOfSupplyCategory#4785) AS productPlant#4786]
(832) Project
Arguments: [productPlant#4786]
(833) Join
Arguments: LeftOuter, ((product#4773 <=> productPlant#4786.product.internalRefUUID) AND (plant#4774 <=> productPlant#4786.plant.internalRefUUID))
(834) Project
Arguments: [product#4773, plant#4774, orderDateTime#4775, productPlant#4786]
(835) LogicalRelation
Arguments: parquet, [systemId#4787, internalUUID#4788, id#4789, displayId#4790, name#4791, baseUnitOfMeasure#4792, unitOfMeasures#4793, unitOfMeasureConversions#4794, productionAspect#4795, salesAspect#4796, procurementAspect#4797], false
(836) Repartition
Arguments: 37, true
(837) Join
Arguments: LeftOuter, (product#4773 = internalUUID#4788)
(838) Project
Arguments: [product#4773, plant#4774, orderDateTime#4775, productPlant#4786, systemId#4787, internalUUID#4788, id#4789, displayId#4790, name#4791, baseUnitOfMeasure#4792, unitOfMeasures#4793, unitOfMeasureConversions#4794, productionAspect#4795, salesAspect#4796, procurementAspect#4797, filter(unitOfMeasureConversions#4794, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#4786.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#4786.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#4792.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#4792.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#4798]
(839) Generate
Arguments: explode(filteredUnitOfMeasureConversions#4798.quantityNumerator), true, [quantityNumerator#4799]
(840) Project
Arguments: [product#4773, plant#4774, orderDateTime#4775, productPlant#4786, systemId#4787, internalUUID#4788, id#4789, displayId#4790, name#4791, baseUnitOfMeasure#4792, unitOfMeasures#4793, unitOfMeasureConversions#4794, productionAspect#4795, salesAspect#4796, procurementAspect#4797, filteredUnitOfMeasureConversions#4798, quantityNumerator#4799]
(841) Generate
Arguments: explode(filteredUnitOfMeasureConversions#4798.quantityDenominator), true, [quantityDenominator#4800]
(842) Project
Arguments: [product#4773, plant#4774, orderDateTime#4775, productPlant#4786, systemId#4787, internalUUID#4788, id#4789, displayId#4790, name#4791, baseUnitOfMeasure#4792, unitOfMeasures#4793, unitOfMeasureConversions#4794, productionAspect#4795, salesAspect#4796, procurementAspect#4797, filteredUnitOfMeasureConversions#4798, quantityNumerator#4799, quantityDenominator#4800]
(843) Project
Arguments: [product#4773, plant#4774, orderDateTime#4775, productPlant#4786, systemId#4787, internalUUID#4788, id#4789, displayId#4790, name#4791, baseUnitOfMeasure#4792, unitOfMeasures#4793, unitOfMeasureConversions#4794, productionAspect#4795, salesAspect#4796, procurementAspect#4797, filteredUnitOfMeasureConversions#4798, quantityNumerator#4799, quantityDenominator#4800, (cast(quantityNumerator#4799 as double) / cast(quantityDenominator#4800 as double)) AS outboundUnit#4801]
(844) Project
Arguments: [product#4773, plant#4774, orderDateTime#4775, productPlant#4786, systemId#4787, internalUUID#4788, id#4789, displayId#4790, name#4791, baseUnitOfMeasure#4792, unitOfMeasures#4793, unitOfMeasureConversions#4794, productionAspect#4795, salesAspect#4796, procurementAspect#4797, filteredUnitOfMeasureConversions#4798, quantityNumerator#4799, quantityDenominator#4800, CASE WHEN (isnull(outboundUnit#4801) OR (outboundUnit#4801 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#4801 END AS outboundUnit#4802]
(845) Project
Arguments: [product#4773, plant#4774, orderDateTime#4775, productPlant#4786, outboundUnit#4802]
(846) Join
Arguments: Inner, ((plantUuid#4765 = plant#4774) AND (productUuid#4767 = product#4773))
(847) Filter
Arguments: (calculationDateTime#4761 <= orderDateTime#4775)
(848) Project
Arguments: [plantUuid#4765 AS plant#4803, productUuid#4767 AS product#4804, storageLocId#4768, calculationDateTime#4761, quantity#4770]
(849) LogicalRelation
Arguments: parquet, [systemId#4805, internalUUID#4806, product#4807, plant#4808, calculationDateTime#4809, stockQuantities#4810], false
(850) Repartition
Arguments: 37, true
(851) LogicalRelation
Arguments: parquet, [marketUnit#4811, description#4812, articleHierarchy#4813, defaultCurrency#4814, responsibilities#4815, replenishmentTypes#4816, distributionCenters#4817, assignedArticleHierarchyNodes#4818, minOrderQtySetting#4819, minOrderQtySettingInternal#4820, listingCheck#4821, odsSelection#4822, demandProfiles#4823, constraintProfiles#4824, optimizationProfiles#4825, orderGroupSplitProfiles#4826, supplierMinimumProfiles#4827, multipleRestrictionProfiles#4828, preferredUomSource#4829, handlingOfUnfulfilledDemands#4830, negligibleQuantitiesThreshold#4831, eventtype#4832], false
(852) Repartition
Arguments: 37, true
(853) Filter
Arguments: (marketUnit#4811 <=> 10000_OP_PERF)
(854) Project
Arguments: [marketUnit#4811, description#4812, articleHierarchy#4813, defaultCurrency#4814, responsibilities#4815, replenishmentTypes#4816, distributionCenters#4817, assignedArticleHierarchyNodes#4818, minOrderQtySetting#4819, minOrderQtySettingInternal#4820, listingCheck#4821, odsSelection#4822, demandProfiles#4823, constraintProfiles#4824, optimizationProfiles#4825, orderGroupSplitProfiles#4826, supplierMinimumProfiles#4827, multipleRestrictionProfiles#4828, preferredUomSource#4829, handlingOfUnfulfilledDemands#4830, negligibleQuantitiesThreshold#4831, eventtype#4832]
(855) Project
Arguments: [distributionCenters#4817]
(856) Generate
Arguments: explode(distributionCenters#4817), false, [distributionCenters#4833]
(857) Project
Arguments: [distributionCenters#4833]
(858) Generate
Arguments: explode(distributionCenters#4833.storageLocations), false, [storageLocations#4834]
(859) Project
Arguments: [distributionCenters#4833.id AS plantId#4835, distributionCenters#4833.internalRefUUID AS plantUuid#4836, storageLocations#4834]
(860) Project
Arguments: [plantId#4835, plantUuid#4836, storageLocations#4834.id AS storageLocId#4837, storageLocations#4834.internalRefUUID AS storageLocUuid#4838]
(861) LogicalRelation
Arguments: parquet, [product#4839, plant#4840, orderDateTime#4841, planningStartDateTime#4842], false
(862) RepartitionByExpression
Arguments: [product#4839, plant#4840], 37
(863) Project
Arguments: [product#4839, plant#4840, orderDateTime#4841]
(864) LogicalRelation
Arguments: parquet, [systemId#4843, internalUUID#4844, plant#4845, product#4846, blockedForReplenishmentStartingFrom#4847, productionAspect#4848, salesPlant#4849, listing#4850, sourceOfSupplyCategory#4851], false
(865) Repartition
Arguments: 37, true
(866) Project
Arguments: [systemId#4843, internalUUID#4844, plant#4845, product#4846, blockedForReplenishmentStartingFrom#4847, productionAspect#4848, salesPlant#4849, listing#4850, sourceOfSupplyCategory#4851, struct(systemId, systemId#4843, internalUUID, internalUUID#4844, plant, plant#4845, product, product#4846, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#4847, productionAspect, productionAspect#4848, salesPlant, salesPlant#4849, listing, listing#4850, sourceOfSupplyCategory, sourceOfSupplyCategory#4851) AS productPlant#4852]
(867) Project
Arguments: [productPlant#4852]
(868) Join
Arguments: LeftOuter, ((product#4839 <=> productPlant#4852.product.internalRefUUID) AND (plant#4840 <=> productPlant#4852.plant.internalRefUUID))
(869) Project
Arguments: [product#4839, plant#4840, orderDateTime#4841, productPlant#4852]
(870) LogicalRelation
Arguments: parquet, [systemId#4853, internalUUID#4854, id#4855, displayId#4856, name#4857, baseUnitOfMeasure#4858, unitOfMeasures#4859, unitOfMeasureConversions#4860, productionAspect#4861, salesAspect#4862, procurementAspect#4863], false
(871) Repartition
Arguments: 37, true
(872) Join
Arguments: LeftOuter, (product#4839 = internalUUID#4854)
(873) Project
Arguments: [product#4839, plant#4840, orderDateTime#4841, productPlant#4852, systemId#4853, internalUUID#4854, id#4855, displayId#4856, name#4857, baseUnitOfMeasure#4858, unitOfMeasures#4859, unitOfMeasureConversions#4860, productionAspect#4861, salesAspect#4862, procurementAspect#4863, filter(unitOfMeasureConversions#4860, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#4852.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#4852.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#4858.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#4858.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#4864]
(874) Generate
Arguments: explode(filteredUnitOfMeasureConversions#4864.quantityNumerator), true, [quantityNumerator#4865]
(875) Project
Arguments: [product#4839, plant#4840, orderDateTime#4841, productPlant#4852, systemId#4853, internalUUID#4854, id#4855, displayId#4856, name#4857, baseUnitOfMeasure#4858, unitOfMeasures#4859, unitOfMeasureConversions#4860, productionAspect#4861, salesAspect#4862, procurementAspect#4863, filteredUnitOfMeasureConversions#4864, quantityNumerator#4865]
(876) Generate
Arguments: explode(filteredUnitOfMeasureConversions#4864.quantityDenominator), true, [quantityDenominator#4866]
(877) Project
Arguments: [product#4839, plant#4840, orderDateTime#4841, productPlant#4852, systemId#4853, internalUUID#4854, id#4855, displayId#4856, name#4857, baseUnitOfMeasure#4858, unitOfMeasures#4859, unitOfMeasureConversions#4860, productionAspect#4861, salesAspect#4862, procurementAspect#4863, filteredUnitOfMeasureConversions#4864, quantityNumerator#4865, quantityDenominator#4866]
(878) Project
Arguments: [product#4839, plant#4840, orderDateTime#4841, productPlant#4852, systemId#4853, internalUUID#4854, id#4855, displayId#4856, name#4857, baseUnitOfMeasure#4858, unitOfMeasures#4859, unitOfMeasureConversions#4860, productionAspect#4861, salesAspect#4862, procurementAspect#4863, filteredUnitOfMeasureConversions#4864, quantityNumerator#4865, quantityDenominator#4866, (cast(quantityNumerator#4865 as double) / cast(quantityDenominator#4866 as double)) AS outboundUnit#4867]
(879) Project
Arguments: [product#4839, plant#4840, orderDateTime#4841, productPlant#4852, systemId#4853, internalUUID#4854, id#4855, displayId#4856, name#4857, baseUnitOfMeasure#4858, unitOfMeasures#4859, unitOfMeasureConversions#4860, productionAspect#4861, salesAspect#4862, procurementAspect#4863, filteredUnitOfMeasureConversions#4864, quantityNumerator#4865, quantityDenominator#4866, CASE WHEN (isnull(outboundUnit#4867) OR (outboundUnit#4867 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#4867 END AS outboundUnit#4868]
(880) Project
Arguments: [product#4839, plant#4840, orderDateTime#4841, productPlant#4852, outboundUnit#4868]
(881) Project
Arguments: [plant#4840]
(882) Deduplicate
Arguments: [plant#4840]
(883) Join
Arguments: Inner, (plantUuid#4836 = plant#4840)
(884) Project
Arguments: [plantId#4835, plantUuid#4836, storageLocId#4837, storageLocUuid#4838]
(885) Join
Arguments: Inner, (plant#4808.internalRefUUID <=> plantUuid#4836)
(886) Generate
Arguments: explode(filter(stockQuantities#4810, lambdafunction(((lambda x#1330.storageLocation.internalRefUuid = storageLocUuid#4838) AND (lambda x#1330.storageLocation.Id = storageLocId#4837)), lambda x#1330, false))), false, [stockQuantity#4869]
(887) Project
Arguments: [systemId#4805, internalUUID#4806, product#4807, plant#4808, calculationDateTime#4809, stockQuantities#4810, plantId#4835, plantUuid#4836, storageLocId#4837, storageLocUuid#4838, stockQuantity#4869]
(888) Aggregate
Arguments: [plantUuid#4836, internalUUID#4806, plant#4808, product#4807, systemId#4805], [plantUuid#4836, internalUUID#4806, plant#4808, product#4807, systemId#4805, first(calculationDateTime#4809, false) AS calculationDateTime#4870, collect_list(stockQuantity#4869, 0, 0) AS stockQuantities#4871]
(889) Project
Arguments: [systemId#4805, internalUUID#4806, product#4807, plant#4808, calculationDateTime#4870, stockQuantities#4871]
(890) Generate
Arguments: explode(stockQuantities#4871), false, [stockQuantity#4872]
(891) Project
Arguments: [systemId#4805, internalUUID#4806, product#4807, plant#4808, calculationDateTime#4870, stockQuantities#4871, stockQuantity#4872]
(892) Project
Arguments: [plant#4808.id AS plant#4873, plant#4808.internalRefUUID AS plantUuid#4874, product#4807.id AS product#4875, product#4807.internalRefUUID AS productUuid#4876, calculationDateTime#4870, stockQuantity#4872.storagelocation.id AS storageLocId#4877, stockQuantity#4872.storagelocation.internalRefUUID AS storageLocUuid#4878, stockQuantity#4872.quantity.measure AS quantity#4879, stockQuantity#4872.specialStockIndicator.code AS specialStockIndicator#4880, stockQuantity#4872.stockType.code AS stockType#4881]
(893) Filter
Arguments: ((specialStockIndicator#4880 = ) AND (stockType#4881 = 01))
(894) LogicalRelation
Arguments: parquet, [product#4882, plant#4883, orderDateTime#4884, planningStartDateTime#4885], false
(895) RepartitionByExpression
Arguments: [product#4882, plant#4883], 37
(896) Project
Arguments: [product#4882, plant#4883, orderDateTime#4884]
(897) LogicalRelation
Arguments: parquet, [systemId#4886, internalUUID#4887, plant#4888, product#4889, blockedForReplenishmentStartingFrom#4890, productionAspect#4891, salesPlant#4892, listing#4893, sourceOfSupplyCategory#4894], false
(898) Repartition
Arguments: 37, true
(899) Project
Arguments: [systemId#4886, internalUUID#4887, plant#4888, product#4889, blockedForReplenishmentStartingFrom#4890, productionAspect#4891, salesPlant#4892, listing#4893, sourceOfSupplyCategory#4894, struct(systemId, systemId#4886, internalUUID, internalUUID#4887, plant, plant#4888, product, product#4889, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#4890, productionAspect, productionAspect#4891, salesPlant, salesPlant#4892, listing, listing#4893, sourceOfSupplyCategory, sourceOfSupplyCategory#4894) AS productPlant#4895]
(900) Project
Arguments: [productPlant#4895]
(901) Join
Arguments: LeftOuter, ((product#4882 <=> productPlant#4895.product.internalRefUUID) AND (plant#4883 <=> productPlant#4895.plant.internalRefUUID))
(902) Project
Arguments: [product#4882, plant#4883, orderDateTime#4884, productPlant#4895]
(903) LogicalRelation
Arguments: parquet, [systemId#4896, internalUUID#4897, id#4898, displayId#4899, name#4900, baseUnitOfMeasure#4901, unitOfMeasures#4902, unitOfMeasureConversions#4903, productionAspect#4904, salesAspect#4905, procurementAspect#4906], false
(904) Repartition
Arguments: 37, true
(905) Join
Arguments: LeftOuter, (product#4882 = internalUUID#4897)
(906) Project
Arguments: [product#4882, plant#4883, orderDateTime#4884, productPlant#4895, systemId#4896, internalUUID#4897, id#4898, displayId#4899, name#4900, baseUnitOfMeasure#4901, unitOfMeasures#4902, unitOfMeasureConversions#4903, productionAspect#4904, salesAspect#4905, procurementAspect#4906, filter(unitOfMeasureConversions#4903, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#4895.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#4895.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#4901.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#4901.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#4907]
(907) Generate
Arguments: explode(filteredUnitOfMeasureConversions#4907.quantityNumerator), true, [quantityNumerator#4908]
(908) Project
Arguments: [product#4882, plant#4883, orderDateTime#4884, productPlant#4895, systemId#4896, internalUUID#4897, id#4898, displayId#4899, name#4900, baseUnitOfMeasure#4901, unitOfMeasures#4902, unitOfMeasureConversions#4903, productionAspect#4904, salesAspect#4905, procurementAspect#4906, filteredUnitOfMeasureConversions#4907, quantityNumerator#4908]
(909) Generate
Arguments: explode(filteredUnitOfMeasureConversions#4907.quantityDenominator), true, [quantityDenominator#4909]
(910) Project
Arguments: [product#4882, plant#4883, orderDateTime#4884, productPlant#4895, systemId#4896, internalUUID#4897, id#4898, displayId#4899, name#4900, baseUnitOfMeasure#4901, unitOfMeasures#4902, unitOfMeasureConversions#4903, productionAspect#4904, salesAspect#4905, procurementAspect#4906, filteredUnitOfMeasureConversions#4907, quantityNumerator#4908, quantityDenominator#4909]
(911) Project
Arguments: [product#4882, plant#4883, orderDateTime#4884, productPlant#4895, systemId#4896, internalUUID#4897, id#4898, displayId#4899, name#4900, baseUnitOfMeasure#4901, unitOfMeasures#4902, unitOfMeasureConversions#4903, productionAspect#4904, salesAspect#4905, procurementAspect#4906, filteredUnitOfMeasureConversions#4907, quantityNumerator#4908, quantityDenominator#4909, (cast(quantityNumerator#4908 as double) / cast(quantityDenominator#4909 as double)) AS outboundUnit#4910]
(912) Project
Arguments: [product#4882, plant#4883, orderDateTime#4884, productPlant#4895, systemId#4896, internalUUID#4897, id#4898, displayId#4899, name#4900, baseUnitOfMeasure#4901, unitOfMeasures#4902, unitOfMeasureConversions#4903, productionAspect#4904, salesAspect#4905, procurementAspect#4906, filteredUnitOfMeasureConversions#4907, quantityNumerator#4908, quantityDenominator#4909, CASE WHEN (isnull(outboundUnit#4910) OR (outboundUnit#4910 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#4910 END AS outboundUnit#4911]
(913) Project
Arguments: [product#4882, plant#4883, orderDateTime#4884, productPlant#4895, outboundUnit#4911]
(914) Join
Arguments: Inner, ((plantUuid#4874 = plant#4883) AND (productUuid#4876 = product#4882))
(915) Filter
Arguments: (calculationDateTime#4870 <= orderDateTime#4884)
(916) Project
Arguments: [plantUuid#4874 AS plant#4912, productUuid#4876 AS product#4913, storageLocId#4877, calculationDateTime#4870, quantity#4879]
(917) Aggregate
Arguments: [plant#4912, product#4913, storageLocId#4877], [plant#4912, product#4913, storageLocId#4877, max(calculationDateTime#4870) AS max_calc_datetime#4914]
(918) Join
Arguments: Inner, ((((plant#4803 <=> plant#4912) AND (product#4804 <=> product#4913)) AND (storageLocId#4768 <=> storageLocId#4877)) AND (calculationDateTime#4761 <=> max_calc_datetime#4914))
(919) Project
Arguments: [plant#4803, product#4804, storageLocId#4768, calculationDateTime#4761, quantity#4770]
(920) Aggregate
Arguments: [product#4804, plant#4803], [product#4804, plant#4803, sum(quantity#4770) AS quantitySum#4915, min(calculationDateTime#4761) AS minCalculationDateTime#4916]
(921) Project
Arguments: [product#4804, plant#4803, quantitySum#4915, minCalculationDateTime#4916, round(quantitySum#4915, 0) AS roundedQuantitySum#4917]
(922) Join
Arguments: LeftOuter, ((plant#4667 = plant#4803) AND (product#4666 = product#4804))
(923) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668, productPlant#4679, outboundUnit#4695, roundedQuantitySum#4917, minCalculationDateTime#4916]
(924) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668, productPlant#4679, outboundUnit#4695, roundedQuantitySum#4917, minCalculationDateTime#4916, CASE WHEN isnotnull(minCalculationDateTime#4916) THEN minCalculationDateTime#4916 ELSE orderDateTime#4668 END AS stockDatetime#4918]
(925) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668, productPlant#4679, outboundUnit#4695, roundedQuantitySum#4917, minCalculationDateTime#4916, stockDatetime#4918, CASE WHEN isnotnull(roundedQuantitySum#4917) THEN array(roundedQuantitySum#4917) ELSE array(0.0) END AS stockBatchQuantities#4919]
(926) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668, productPlant#4679, outboundUnit#4695, roundedQuantitySum#4917, minCalculationDateTime#4916, stockDatetime#4918, stockBatchQuantities#4919, array(2199-01-01 00:00:00) AS stockBatchShelfLifeEndDatetimes#4920]
(927) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668, productPlant#4679, outboundUnit#4695, roundedQuantitySum#4917, stockDatetime#4918, stockBatchQuantities#4919, stockBatchShelfLifeEndDatetimes#4920]
(928) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668, productPlant#4679, outboundUnit#4695, stockDatetime#4918, stockBatchQuantities#4919, stockBatchShelfLifeEndDatetimes#4920]
(929) LogicalRelation
Arguments: parquet, [product#4921, plant#4922, orderDateTime#4923, planningStartDateTime#4924], false
(930) RepartitionByExpression
Arguments: [product#4921, plant#4922], 37
(931) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923]
(932) LogicalRelation
Arguments: parquet, [systemId#4925, internalUUID#4926, plant#4927, product#4928, blockedForReplenishmentStartingFrom#4929, productionAspect#4930, salesPlant#4931, listing#4932, sourceOfSupplyCategory#4933], false
(933) Repartition
Arguments: 37, true
(934) Project
Arguments: [systemId#4925, internalUUID#4926, plant#4927, product#4928, blockedForReplenishmentStartingFrom#4929, productionAspect#4930, salesPlant#4931, listing#4932, sourceOfSupplyCategory#4933, struct(systemId, systemId#4925, internalUUID, internalUUID#4926, plant, plant#4927, product, product#4928, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#4929, productionAspect, productionAspect#4930, salesPlant, salesPlant#4931, listing, listing#4932, sourceOfSupplyCategory, sourceOfSupplyCategory#4933) AS productPlant#4934]
(935) Project
Arguments: [productPlant#4934]
(936) Join
Arguments: LeftOuter, ((product#4921 <=> productPlant#4934.product.internalRefUUID) AND (plant#4922 <=> productPlant#4934.plant.internalRefUUID))
(937) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934]
(938) LogicalRelation
Arguments: parquet, [systemId#4935, internalUUID#4936, id#4937, displayId#4938, name#4939, baseUnitOfMeasure#4940, unitOfMeasures#4941, unitOfMeasureConversions#4942, productionAspect#4943, salesAspect#4944, procurementAspect#4945], false
(939) Repartition
Arguments: 37, true
(940) Join
Arguments: LeftOuter, (product#4921 = internalUUID#4936)
(941) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, systemId#4935, internalUUID#4936, id#4937, displayId#4938, name#4939, baseUnitOfMeasure#4940, unitOfMeasures#4941, unitOfMeasureConversions#4942, productionAspect#4943, salesAspect#4944, procurementAspect#4945, filter(unitOfMeasureConversions#4942, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#4934.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#4934.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#4940.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#4940.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#4946]
(942) Generate
Arguments: explode(filteredUnitOfMeasureConversions#4946.quantityNumerator), true, [quantityNumerator#4947]
(943) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, systemId#4935, internalUUID#4936, id#4937, displayId#4938, name#4939, baseUnitOfMeasure#4940, unitOfMeasures#4941, unitOfMeasureConversions#4942, productionAspect#4943, salesAspect#4944, procurementAspect#4945, filteredUnitOfMeasureConversions#4946, quantityNumerator#4947]
(944) Generate
Arguments: explode(filteredUnitOfMeasureConversions#4946.quantityDenominator), true, [quantityDenominator#4948]
(945) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, systemId#4935, internalUUID#4936, id#4937, displayId#4938, name#4939, baseUnitOfMeasure#4940, unitOfMeasures#4941, unitOfMeasureConversions#4942, productionAspect#4943, salesAspect#4944, procurementAspect#4945, filteredUnitOfMeasureConversions#4946, quantityNumerator#4947, quantityDenominator#4948]
(946) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, systemId#4935, internalUUID#4936, id#4937, displayId#4938, name#4939, baseUnitOfMeasure#4940, unitOfMeasures#4941, unitOfMeasureConversions#4942, productionAspect#4943, salesAspect#4944, procurementAspect#4945, filteredUnitOfMeasureConversions#4946, quantityNumerator#4947, quantityDenominator#4948, (cast(quantityNumerator#4947 as double) / cast(quantityDenominator#4948 as double)) AS outboundUnit#4949]
(947) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, systemId#4935, internalUUID#4936, id#4937, displayId#4938, name#4939, baseUnitOfMeasure#4940, unitOfMeasures#4941, unitOfMeasureConversions#4942, productionAspect#4943, salesAspect#4944, procurementAspect#4945, filteredUnitOfMeasureConversions#4946, quantityNumerator#4947, quantityDenominator#4948, CASE WHEN (isnull(outboundUnit#4949) OR (outboundUnit#4949 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#4949 END AS outboundUnit#4950]
(948) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, outboundUnit#4950]
(949) LogicalRelation
Arguments: parquet, [systemId#4951, internalUUID#4952, product#4953, plant#4954, calculationDateTime#4955, stockQuantities#4956], false
(950) Repartition
Arguments: 37, true
(951) LogicalRelation
Arguments: parquet, [marketUnit#4957, description#4958, articleHierarchy#4959, defaultCurrency#4960, responsibilities#4961, replenishmentTypes#4962, distributionCenters#4963, assignedArticleHierarchyNodes#4964, minOrderQtySetting#4965, minOrderQtySettingInternal#4966, listingCheck#4967, odsSelection#4968, demandProfiles#4969, constraintProfiles#4970, optimizationProfiles#4971, orderGroupSplitProfiles#4972, supplierMinimumProfiles#4973, multipleRestrictionProfiles#4974, preferredUomSource#4975, handlingOfUnfulfilledDemands#4976, negligibleQuantitiesThreshold#4977, eventtype#4978], false
(952) Repartition
Arguments: 37, true
(953) Filter
Arguments: (marketUnit#4957 <=> 10000_OP_PERF)
(954) Project
Arguments: [marketUnit#4957, description#4958, articleHierarchy#4959, defaultCurrency#4960, responsibilities#4961, replenishmentTypes#4962, distributionCenters#4963, assignedArticleHierarchyNodes#4964, minOrderQtySetting#4965, minOrderQtySettingInternal#4966, listingCheck#4967, odsSelection#4968, demandProfiles#4969, constraintProfiles#4970, optimizationProfiles#4971, orderGroupSplitProfiles#4972, supplierMinimumProfiles#4973, multipleRestrictionProfiles#4974, preferredUomSource#4975, handlingOfUnfulfilledDemands#4976, negligibleQuantitiesThreshold#4977, eventtype#4978]
(955) Project
Arguments: [distributionCenters#4963]
(956) Generate
Arguments: explode(distributionCenters#4963), false, [distributionCenters#4979]
(957) Project
Arguments: [distributionCenters#4979]
(958) Generate
Arguments: explode(distributionCenters#4979.storageLocations), false, [storageLocations#4980]
(959) Project
Arguments: [distributionCenters#4979.id AS plantId#4981, distributionCenters#4979.internalRefUUID AS plantUuid#4982, storageLocations#4980]
(960) Project
Arguments: [plantId#4981, plantUuid#4982, storageLocations#4980.id AS storageLocId#4983, storageLocations#4980.internalRefUUID AS storageLocUuid#4984]
(961) LogicalRelation
Arguments: parquet, [product#4985, plant#4986, orderDateTime#4987, planningStartDateTime#4988], false
(962) RepartitionByExpression
Arguments: [product#4985, plant#4986], 37
(963) Project
Arguments: [product#4985, plant#4986, orderDateTime#4987]
(964) LogicalRelation
Arguments: parquet, [systemId#4989, internalUUID#4990, plant#4991, product#4992, blockedForReplenishmentStartingFrom#4993, productionAspect#4994, salesPlant#4995, listing#4996, sourceOfSupplyCategory#4997], false
(965) Repartition
Arguments: 37, true
(966) Project
Arguments: [systemId#4989, internalUUID#4990, plant#4991, product#4992, blockedForReplenishmentStartingFrom#4993, productionAspect#4994, salesPlant#4995, listing#4996, sourceOfSupplyCategory#4997, struct(systemId, systemId#4989, internalUUID, internalUUID#4990, plant, plant#4991, product, product#4992, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#4993, productionAspect, productionAspect#4994, salesPlant, salesPlant#4995, listing, listing#4996, sourceOfSupplyCategory, sourceOfSupplyCategory#4997) AS productPlant#4998]
(967) Project
Arguments: [productPlant#4998]
(968) Join
Arguments: LeftOuter, ((product#4985 <=> productPlant#4998.product.internalRefUUID) AND (plant#4986 <=> productPlant#4998.plant.internalRefUUID))
(969) Project
Arguments: [product#4985, plant#4986, orderDateTime#4987, productPlant#4998]
(970) LogicalRelation
Arguments: parquet, [systemId#4999, internalUUID#5000, id#5001, displayId#5002, name#5003, baseUnitOfMeasure#5004, unitOfMeasures#5005, unitOfMeasureConversions#5006, productionAspect#5007, salesAspect#5008, procurementAspect#5009], false
(971) Repartition
Arguments: 37, true
(972) Join
Arguments: LeftOuter, (product#4985 = internalUUID#5000)
(973) Project
Arguments: [product#4985, plant#4986, orderDateTime#4987, productPlant#4998, systemId#4999, internalUUID#5000, id#5001, displayId#5002, name#5003, baseUnitOfMeasure#5004, unitOfMeasures#5005, unitOfMeasureConversions#5006, productionAspect#5007, salesAspect#5008, procurementAspect#5009, filter(unitOfMeasureConversions#5006, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#4998.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#4998.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#5004.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#5004.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#5010]
(974) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5010.quantityNumerator), true, [quantityNumerator#5011]
(975) Project
Arguments: [product#4985, plant#4986, orderDateTime#4987, productPlant#4998, systemId#4999, internalUUID#5000, id#5001, displayId#5002, name#5003, baseUnitOfMeasure#5004, unitOfMeasures#5005, unitOfMeasureConversions#5006, productionAspect#5007, salesAspect#5008, procurementAspect#5009, filteredUnitOfMeasureConversions#5010, quantityNumerator#5011]
(976) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5010.quantityDenominator), true, [quantityDenominator#5012]
(977) Project
Arguments: [product#4985, plant#4986, orderDateTime#4987, productPlant#4998, systemId#4999, internalUUID#5000, id#5001, displayId#5002, name#5003, baseUnitOfMeasure#5004, unitOfMeasures#5005, unitOfMeasureConversions#5006, productionAspect#5007, salesAspect#5008, procurementAspect#5009, filteredUnitOfMeasureConversions#5010, quantityNumerator#5011, quantityDenominator#5012]
(978) Project
Arguments: [product#4985, plant#4986, orderDateTime#4987, productPlant#4998, systemId#4999, internalUUID#5000, id#5001, displayId#5002, name#5003, baseUnitOfMeasure#5004, unitOfMeasures#5005, unitOfMeasureConversions#5006, productionAspect#5007, salesAspect#5008, procurementAspect#5009, filteredUnitOfMeasureConversions#5010, quantityNumerator#5011, quantityDenominator#5012, (cast(quantityNumerator#5011 as double) / cast(quantityDenominator#5012 as double)) AS outboundUnit#5013]
(979) Project
Arguments: [product#4985, plant#4986, orderDateTime#4987, productPlant#4998, systemId#4999, internalUUID#5000, id#5001, displayId#5002, name#5003, baseUnitOfMeasure#5004, unitOfMeasures#5005, unitOfMeasureConversions#5006, productionAspect#5007, salesAspect#5008, procurementAspect#5009, filteredUnitOfMeasureConversions#5010, quantityNumerator#5011, quantityDenominator#5012, CASE WHEN (isnull(outboundUnit#5013) OR (outboundUnit#5013 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#5013 END AS outboundUnit#5014]
(980) Project
Arguments: [product#4985, plant#4986, orderDateTime#4987, productPlant#4998, outboundUnit#5014]
(981) Project
Arguments: [plant#4986]
(982) Deduplicate
Arguments: [plant#4986]
(983) Join
Arguments: Inner, (plantUuid#4982 = plant#4986)
(984) Project
Arguments: [plantId#4981, plantUuid#4982, storageLocId#4983, storageLocUuid#4984]
(985) Join
Arguments: Inner, (plant#4954.internalRefUUID <=> plantUuid#4982)
(986) Generate
Arguments: explode(filter(stockQuantities#4956, lambdafunction(((lambda x#1330.storageLocation.internalRefUuid = storageLocUuid#4984) AND (lambda x#1330.storageLocation.Id = storageLocId#4983)), lambda x#1330, false))), false, [stockQuantity#5015]
(987) Project
Arguments: [systemId#4951, internalUUID#4952, product#4953, plant#4954, calculationDateTime#4955, stockQuantities#4956, plantId#4981, plantUuid#4982, storageLocId#4983, storageLocUuid#4984, stockQuantity#5015]
(988) Aggregate
Arguments: [plantUuid#4982, internalUUID#4952, plant#4954, product#4953, systemId#4951], [plantUuid#4982, internalUUID#4952, plant#4954, product#4953, systemId#4951, first(calculationDateTime#4955, false) AS calculationDateTime#5016, collect_list(stockQuantity#5015, 0, 0) AS stockQuantities#5017]
(989) Project
Arguments: [systemId#4951, internalUUID#4952, product#4953, plant#4954, calculationDateTime#5016, stockQuantities#5017]
(990) Generate
Arguments: explode(stockQuantities#5017), false, [stockQuantity#5018]
(991) Project
Arguments: [systemId#4951, internalUUID#4952, product#4953, plant#4954, calculationDateTime#5016, stockQuantities#5017, stockQuantity#5018]
(992) Project
Arguments: [plant#4954.id AS plant#5019, plant#4954.internalRefUUID AS plantUuid#5020, product#4953.id AS product#5021, product#4953.internalRefUUID AS productUuid#5022, calculationDateTime#5016, stockQuantity#5018.storagelocation.id AS storageLocId#5023, stockQuantity#5018.storagelocation.internalRefUUID AS storageLocUuid#5024, stockQuantity#5018.quantity.measure AS quantity#5025, stockQuantity#5018.specialStockIndicator.code AS specialStockIndicator#5026, stockQuantity#5018.stockType.code AS stockType#5027]
(993) Filter
Arguments: ((specialStockIndicator#5026 = ) AND (stockType#5027 = 01))
(994) LogicalRelation
Arguments: parquet, [product#5028, plant#5029, orderDateTime#5030, planningStartDateTime#5031], false
(995) RepartitionByExpression
Arguments: [product#5028, plant#5029], 37
(996) Project
Arguments: [product#5028, plant#5029, orderDateTime#5030]
(997) LogicalRelation
Arguments: parquet, [systemId#5032, internalUUID#5033, plant#5034, product#5035, blockedForReplenishmentStartingFrom#5036, productionAspect#5037, salesPlant#5038, listing#5039, sourceOfSupplyCategory#5040], false
(998) Repartition
Arguments: 37, true
(999) Project
Arguments: [systemId#5032, internalUUID#5033, plant#5034, product#5035, blockedForReplenishmentStartingFrom#5036, productionAspect#5037, salesPlant#5038, listing#5039, sourceOfSupplyCategory#5040, struct(systemId, systemId#5032, internalUUID, internalUUID#5033, plant, plant#5034, product, product#5035, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#5036, productionAspect, productionAspect#5037, salesPlant, salesPlant#5038, listing, listing#5039, sourceOfSupplyCategory, sourceOfSupplyCategory#5040) AS productPlant#5041]
(1000) Project
Arguments: [productPlant#5041]
(1001) Join
Arguments: LeftOuter, ((product#5028 <=> productPlant#5041.product.internalRefUUID) AND (plant#5029 <=> productPlant#5041.plant.internalRefUUID))
(1002) Project
Arguments: [product#5028, plant#5029, orderDateTime#5030, productPlant#5041]
(1003) LogicalRelation
Arguments: parquet, [systemId#5042, internalUUID#5043, id#5044, displayId#5045, name#5046, baseUnitOfMeasure#5047, unitOfMeasures#5048, unitOfMeasureConversions#5049, productionAspect#5050, salesAspect#5051, procurementAspect#5052], false
(1004) Repartition
Arguments: 37, true
(1005) Join
Arguments: LeftOuter, (product#5028 = internalUUID#5043)
(1006) Project
Arguments: [product#5028, plant#5029, orderDateTime#5030, productPlant#5041, systemId#5042, internalUUID#5043, id#5044, displayId#5045, name#5046, baseUnitOfMeasure#5047, unitOfMeasures#5048, unitOfMeasureConversions#5049, productionAspect#5050, salesAspect#5051, procurementAspect#5052, filter(unitOfMeasureConversions#5049, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#5041.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#5041.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#5047.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#5047.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#5053]
(1007) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5053.quantityNumerator), true, [quantityNumerator#5054]
(1008) Project
Arguments: [product#5028, plant#5029, orderDateTime#5030, productPlant#5041, systemId#5042, internalUUID#5043, id#5044, displayId#5045, name#5046, baseUnitOfMeasure#5047, unitOfMeasures#5048, unitOfMeasureConversions#5049, productionAspect#5050, salesAspect#5051, procurementAspect#5052, filteredUnitOfMeasureConversions#5053, quantityNumerator#5054]
(1009) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5053.quantityDenominator), true, [quantityDenominator#5055]
(1010) Project
Arguments: [product#5028, plant#5029, orderDateTime#5030, productPlant#5041, systemId#5042, internalUUID#5043, id#5044, displayId#5045, name#5046, baseUnitOfMeasure#5047, unitOfMeasures#5048, unitOfMeasureConversions#5049, productionAspect#5050, salesAspect#5051, procurementAspect#5052, filteredUnitOfMeasureConversions#5053, quantityNumerator#5054, quantityDenominator#5055]
(1011) Project
Arguments: [product#5028, plant#5029, orderDateTime#5030, productPlant#5041, systemId#5042, internalUUID#5043, id#5044, displayId#5045, name#5046, baseUnitOfMeasure#5047, unitOfMeasures#5048, unitOfMeasureConversions#5049, productionAspect#5050, salesAspect#5051, procurementAspect#5052, filteredUnitOfMeasureConversions#5053, quantityNumerator#5054, quantityDenominator#5055, (cast(quantityNumerator#5054 as double) / cast(quantityDenominator#5055 as double)) AS outboundUnit#5056]
(1012) Project
Arguments: [product#5028, plant#5029, orderDateTime#5030, productPlant#5041, systemId#5042, internalUUID#5043, id#5044, displayId#5045, name#5046, baseUnitOfMeasure#5047, unitOfMeasures#5048, unitOfMeasureConversions#5049, productionAspect#5050, salesAspect#5051, procurementAspect#5052, filteredUnitOfMeasureConversions#5053, quantityNumerator#5054, quantityDenominator#5055, CASE WHEN (isnull(outboundUnit#5056) OR (outboundUnit#5056 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#5056 END AS outboundUnit#5057]
(1013) Project
Arguments: [product#5028, plant#5029, orderDateTime#5030, productPlant#5041, outboundUnit#5057]
(1014) Join
Arguments: Inner, ((plantUuid#5020 = plant#5029) AND (productUuid#5022 = product#5028))
(1015) Filter
Arguments: (calculationDateTime#5016 <= orderDateTime#5030)
(1016) Project
Arguments: [plantUuid#5020 AS plant#5058, productUuid#5022 AS product#5059, storageLocId#5023, calculationDateTime#5016, quantity#5025]
(1017) LogicalRelation
Arguments: parquet, [systemId#5060, internalUUID#5061, product#5062, plant#5063, calculationDateTime#5064, stockQuantities#5065], false
(1018) Repartition
Arguments: 37, true
(1019) LogicalRelation
Arguments: parquet, [marketUnit#5066, description#5067, articleHierarchy#5068, defaultCurrency#5069, responsibilities#5070, replenishmentTypes#5071, distributionCenters#5072, assignedArticleHierarchyNodes#5073, minOrderQtySetting#5074, minOrderQtySettingInternal#5075, listingCheck#5076, odsSelection#5077, demandProfiles#5078, constraintProfiles#5079, optimizationProfiles#5080, orderGroupSplitProfiles#5081, supplierMinimumProfiles#5082, multipleRestrictionProfiles#5083, preferredUomSource#5084, handlingOfUnfulfilledDemands#5085, negligibleQuantitiesThreshold#5086, eventtype#5087], false
(1020) Repartition
Arguments: 37, true
(1021) Filter
Arguments: (marketUnit#5066 <=> 10000_OP_PERF)
(1022) Project
Arguments: [marketUnit#5066, description#5067, articleHierarchy#5068, defaultCurrency#5069, responsibilities#5070, replenishmentTypes#5071, distributionCenters#5072, assignedArticleHierarchyNodes#5073, minOrderQtySetting#5074, minOrderQtySettingInternal#5075, listingCheck#5076, odsSelection#5077, demandProfiles#5078, constraintProfiles#5079, optimizationProfiles#5080, orderGroupSplitProfiles#5081, supplierMinimumProfiles#5082, multipleRestrictionProfiles#5083, preferredUomSource#5084, handlingOfUnfulfilledDemands#5085, negligibleQuantitiesThreshold#5086, eventtype#5087]
(1023) Project
Arguments: [distributionCenters#5072]
(1024) Generate
Arguments: explode(distributionCenters#5072), false, [distributionCenters#5088]
(1025) Project
Arguments: [distributionCenters#5088]
(1026) Generate
Arguments: explode(distributionCenters#5088.storageLocations), false, [storageLocations#5089]
(1027) Project
Arguments: [distributionCenters#5088.id AS plantId#5090, distributionCenters#5088.internalRefUUID AS plantUuid#5091, storageLocations#5089]
(1028) Project
Arguments: [plantId#5090, plantUuid#5091, storageLocations#5089.id AS storageLocId#5092, storageLocations#5089.internalRefUUID AS storageLocUuid#5093]
(1029) LogicalRelation
Arguments: parquet, [product#5094, plant#5095, orderDateTime#5096, planningStartDateTime#5097], false
(1030) RepartitionByExpression
Arguments: [product#5094, plant#5095], 37
(1031) Project
Arguments: [product#5094, plant#5095, orderDateTime#5096]
(1032) LogicalRelation
Arguments: parquet, [systemId#5098, internalUUID#5099, plant#5100, product#5101, blockedForReplenishmentStartingFrom#5102, productionAspect#5103, salesPlant#5104, listing#5105, sourceOfSupplyCategory#5106], false
(1033) Repartition
Arguments: 37, true
(1034) Project
Arguments: [systemId#5098, internalUUID#5099, plant#5100, product#5101, blockedForReplenishmentStartingFrom#5102, productionAspect#5103, salesPlant#5104, listing#5105, sourceOfSupplyCategory#5106, struct(systemId, systemId#5098, internalUUID, internalUUID#5099, plant, plant#5100, product, product#5101, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#5102, productionAspect, productionAspect#5103, salesPlant, salesPlant#5104, listing, listing#5105, sourceOfSupplyCategory, sourceOfSupplyCategory#5106) AS productPlant#5107]
(1035) Project
Arguments: [productPlant#5107]
(1036) Join
Arguments: LeftOuter, ((product#5094 <=> productPlant#5107.product.internalRefUUID) AND (plant#5095 <=> productPlant#5107.plant.internalRefUUID))
(1037) Project
Arguments: [product#5094, plant#5095, orderDateTime#5096, productPlant#5107]
(1038) LogicalRelation
Arguments: parquet, [systemId#5108, internalUUID#5109, id#5110, displayId#5111, name#5112, baseUnitOfMeasure#5113, unitOfMeasures#5114, unitOfMeasureConversions#5115, productionAspect#5116, salesAspect#5117, procurementAspect#5118], false
(1039) Repartition
Arguments: 37, true
(1040) Join
Arguments: LeftOuter, (product#5094 = internalUUID#5109)
(1041) Project
Arguments: [product#5094, plant#5095, orderDateTime#5096, productPlant#5107, systemId#5108, internalUUID#5109, id#5110, displayId#5111, name#5112, baseUnitOfMeasure#5113, unitOfMeasures#5114, unitOfMeasureConversions#5115, productionAspect#5116, salesAspect#5117, procurementAspect#5118, filter(unitOfMeasureConversions#5115, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#5107.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#5107.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#5113.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#5113.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#5119]
(1042) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5119.quantityNumerator), true, [quantityNumerator#5120]
(1043) Project
Arguments: [product#5094, plant#5095, orderDateTime#5096, productPlant#5107, systemId#5108, internalUUID#5109, id#5110, displayId#5111, name#5112, baseUnitOfMeasure#5113, unitOfMeasures#5114, unitOfMeasureConversions#5115, productionAspect#5116, salesAspect#5117, procurementAspect#5118, filteredUnitOfMeasureConversions#5119, quantityNumerator#5120]
(1044) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5119.quantityDenominator), true, [quantityDenominator#5121]
(1045) Project
Arguments: [product#5094, plant#5095, orderDateTime#5096, productPlant#5107, systemId#5108, internalUUID#5109, id#5110, displayId#5111, name#5112, baseUnitOfMeasure#5113, unitOfMeasures#5114, unitOfMeasureConversions#5115, productionAspect#5116, salesAspect#5117, procurementAspect#5118, filteredUnitOfMeasureConversions#5119, quantityNumerator#5120, quantityDenominator#5121]
(1046) Project
Arguments: [product#5094, plant#5095, orderDateTime#5096, productPlant#5107, systemId#5108, internalUUID#5109, id#5110, displayId#5111, name#5112, baseUnitOfMeasure#5113, unitOfMeasures#5114, unitOfMeasureConversions#5115, productionAspect#5116, salesAspect#5117, procurementAspect#5118, filteredUnitOfMeasureConversions#5119, quantityNumerator#5120, quantityDenominator#5121, (cast(quantityNumerator#5120 as double) / cast(quantityDenominator#5121 as double)) AS outboundUnit#5122]
(1047) Project
Arguments: [product#5094, plant#5095, orderDateTime#5096, productPlant#5107, systemId#5108, internalUUID#5109, id#5110, displayId#5111, name#5112, baseUnitOfMeasure#5113, unitOfMeasures#5114, unitOfMeasureConversions#5115, productionAspect#5116, salesAspect#5117, procurementAspect#5118, filteredUnitOfMeasureConversions#5119, quantityNumerator#5120, quantityDenominator#5121, CASE WHEN (isnull(outboundUnit#5122) OR (outboundUnit#5122 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#5122 END AS outboundUnit#5123]
(1048) Project
Arguments: [product#5094, plant#5095, orderDateTime#5096, productPlant#5107, outboundUnit#5123]
(1049) Project
Arguments: [plant#5095]
(1050) Deduplicate
Arguments: [plant#5095]
(1051) Join
Arguments: Inner, (plantUuid#5091 = plant#5095)
(1052) Project
Arguments: [plantId#5090, plantUuid#5091, storageLocId#5092, storageLocUuid#5093]
(1053) Join
Arguments: Inner, (plant#5063.internalRefUUID <=> plantUuid#5091)
(1054) Generate
Arguments: explode(filter(stockQuantities#5065, lambdafunction(((lambda x#1330.storageLocation.internalRefUuid = storageLocUuid#5093) AND (lambda x#1330.storageLocation.Id = storageLocId#5092)), lambda x#1330, false))), false, [stockQuantity#5124]
(1055) Project
Arguments: [systemId#5060, internalUUID#5061, product#5062, plant#5063, calculationDateTime#5064, stockQuantities#5065, plantId#5090, plantUuid#5091, storageLocId#5092, storageLocUuid#5093, stockQuantity#5124]
(1056) Aggregate
Arguments: [plantUuid#5091, internalUUID#5061, plant#5063, product#5062, systemId#5060], [plantUuid#5091, internalUUID#5061, plant#5063, product#5062, systemId#5060, first(calculationDateTime#5064, false) AS calculationDateTime#5125, collect_list(stockQuantity#5124, 0, 0) AS stockQuantities#5126]
(1057) Project
Arguments: [systemId#5060, internalUUID#5061, product#5062, plant#5063, calculationDateTime#5125, stockQuantities#5126]
(1058) Generate
Arguments: explode(stockQuantities#5126), false, [stockQuantity#5127]
(1059) Project
Arguments: [systemId#5060, internalUUID#5061, product#5062, plant#5063, calculationDateTime#5125, stockQuantities#5126, stockQuantity#5127]
(1060) Project
Arguments: [plant#5063.id AS plant#5128, plant#5063.internalRefUUID AS plantUuid#5129, product#5062.id AS product#5130, product#5062.internalRefUUID AS productUuid#5131, calculationDateTime#5125, stockQuantity#5127.storagelocation.id AS storageLocId#5132, stockQuantity#5127.storagelocation.internalRefUUID AS storageLocUuid#5133, stockQuantity#5127.quantity.measure AS quantity#5134, stockQuantity#5127.specialStockIndicator.code AS specialStockIndicator#5135, stockQuantity#5127.stockType.code AS stockType#5136]
(1061) Filter
Arguments: ((specialStockIndicator#5135 = ) AND (stockType#5136 = 01))
(1062) LogicalRelation
Arguments: parquet, [product#5137, plant#5138, orderDateTime#5139, planningStartDateTime#5140], false
(1063) RepartitionByExpression
Arguments: [product#5137, plant#5138], 37
(1064) Project
Arguments: [product#5137, plant#5138, orderDateTime#5139]
(1065) LogicalRelation
Arguments: parquet, [systemId#5141, internalUUID#5142, plant#5143, product#5144, blockedForReplenishmentStartingFrom#5145, productionAspect#5146, salesPlant#5147, listing#5148, sourceOfSupplyCategory#5149], false
(1066) Repartition
Arguments: 37, true
(1067) Project
Arguments: [systemId#5141, internalUUID#5142, plant#5143, product#5144, blockedForReplenishmentStartingFrom#5145, productionAspect#5146, salesPlant#5147, listing#5148, sourceOfSupplyCategory#5149, struct(systemId, systemId#5141, internalUUID, internalUUID#5142, plant, plant#5143, product, product#5144, blockedForReplenishmentStartingFrom, blockedForReplenishmentStartingFrom#5145, productionAspect, productionAspect#5146, salesPlant, salesPlant#5147, listing, listing#5148, sourceOfSupplyCategory, sourceOfSupplyCategory#5149) AS productPlant#5150]
(1068) Project
Arguments: [productPlant#5150]
(1069) Join
Arguments: LeftOuter, ((product#5137 <=> productPlant#5150.product.internalRefUUID) AND (plant#5138 <=> productPlant#5150.plant.internalRefUUID))
(1070) Project
Arguments: [product#5137, plant#5138, orderDateTime#5139, productPlant#5150]
(1071) LogicalRelation
Arguments: parquet, [systemId#5151, internalUUID#5152, id#5153, displayId#5154, name#5155, baseUnitOfMeasure#5156, unitOfMeasures#5157, unitOfMeasureConversions#5158, productionAspect#5159, salesAspect#5160, procurementAspect#5161], false
(1072) Repartition
Arguments: 37, true
(1073) Join
Arguments: LeftOuter, (product#5137 = internalUUID#5152)
(1074) Project
Arguments: [product#5137, plant#5138, orderDateTime#5139, productPlant#5150, systemId#5151, internalUUID#5152, id#5153, displayId#5154, name#5155, baseUnitOfMeasure#5156, unitOfMeasures#5157, unitOfMeasureConversions#5158, productionAspect#5159, salesAspect#5160, procurementAspect#5161, filter(unitOfMeasureConversions#5158, lambdafunction((((lambda u#1206.measurementUnit1.code = productPlant#5150.productionAspect.productMovementPlants.unitOfIssue.code) AND (lambda u#1206.measurementUnit1.internalRefUUID = productPlant#5150.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID)) AND ((lambda u#1206.measurementUnit2.code = baseUnitOfMeasure#5156.code) AND (lambda u#1206.measurementUnit2.internalRefUUID = baseUnitOfMeasure#5156.internalRefUUID))), lambda u#1206, false)) AS filteredUnitOfMeasureConversions#5162]
(1075) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5162.quantityNumerator), true, [quantityNumerator#5163]
(1076) Project
Arguments: [product#5137, plant#5138, orderDateTime#5139, productPlant#5150, systemId#5151, internalUUID#5152, id#5153, displayId#5154, name#5155, baseUnitOfMeasure#5156, unitOfMeasures#5157, unitOfMeasureConversions#5158, productionAspect#5159, salesAspect#5160, procurementAspect#5161, filteredUnitOfMeasureConversions#5162, quantityNumerator#5163]
(1077) Generate
Arguments: explode(filteredUnitOfMeasureConversions#5162.quantityDenominator), true, [quantityDenominator#5164]
(1078) Project
Arguments: [product#5137, plant#5138, orderDateTime#5139, productPlant#5150, systemId#5151, internalUUID#5152, id#5153, displayId#5154, name#5155, baseUnitOfMeasure#5156, unitOfMeasures#5157, unitOfMeasureConversions#5158, productionAspect#5159, salesAspect#5160, procurementAspect#5161, filteredUnitOfMeasureConversions#5162, quantityNumerator#5163, quantityDenominator#5164]
(1079) Project
Arguments: [product#5137, plant#5138, orderDateTime#5139, productPlant#5150, systemId#5151, internalUUID#5152, id#5153, displayId#5154, name#5155, baseUnitOfMeasure#5156, unitOfMeasures#5157, unitOfMeasureConversions#5158, productionAspect#5159, salesAspect#5160, procurementAspect#5161, filteredUnitOfMeasureConversions#5162, quantityNumerator#5163, quantityDenominator#5164, (cast(quantityNumerator#5163 as double) / cast(quantityDenominator#5164 as double)) AS outboundUnit#5165]
(1080) Project
Arguments: [product#5137, plant#5138, orderDateTime#5139, productPlant#5150, systemId#5151, internalUUID#5152, id#5153, displayId#5154, name#5155, baseUnitOfMeasure#5156, unitOfMeasures#5157, unitOfMeasureConversions#5158, productionAspect#5159, salesAspect#5160, procurementAspect#5161, filteredUnitOfMeasureConversions#5162, quantityNumerator#5163, quantityDenominator#5164, CASE WHEN (isnull(outboundUnit#5165) OR (outboundUnit#5165 <= cast(0 as double))) THEN 1.0 ELSE outboundUnit#5165 END AS outboundUnit#5166]
(1081) Project
Arguments: [product#5137, plant#5138, orderDateTime#5139, productPlant#5150, outboundUnit#5166]
(1082) Join
Arguments: Inner, ((plantUuid#5129 = plant#5138) AND (productUuid#5131 = product#5137))
(1083) Filter
Arguments: (calculationDateTime#5125 <= orderDateTime#5139)
(1084) Project
Arguments: [plantUuid#5129 AS plant#5167, productUuid#5131 AS product#5168, storageLocId#5132, calculationDateTime#5125, quantity#5134]
(1085) Aggregate
Arguments: [plant#5167, product#5168, storageLocId#5132], [plant#5167, product#5168, storageLocId#5132, max(calculationDateTime#5125) AS max_calc_datetime#5169]
(1086) Join
Arguments: Inner, ((((plant#5058 <=> plant#5167) AND (product#5059 <=> product#5168)) AND (storageLocId#5023 <=> storageLocId#5132)) AND (calculationDateTime#5016 <=> max_calc_datetime#5169))
(1087) Project
Arguments: [plant#5058, product#5059, storageLocId#5023, calculationDateTime#5016, quantity#5025]
(1088) Aggregate
Arguments: [product#5059, plant#5058], [product#5059, plant#5058, sum(quantity#5025) AS quantitySum#5170, min(calculationDateTime#5016) AS minCalculationDateTime#5171]
(1089) Project
Arguments: [product#5059, plant#5058, quantitySum#5170, minCalculationDateTime#5171, round(quantitySum#5170, 0) AS roundedQuantitySum#5172]
(1090) Join
Arguments: LeftOuter, ((plant#4922 = plant#5058) AND (product#4921 = product#5059))
(1091) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, outboundUnit#4950, roundedQuantitySum#5172, minCalculationDateTime#5171]
(1092) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, outboundUnit#4950, roundedQuantitySum#5172, minCalculationDateTime#5171, CASE WHEN isnotnull(minCalculationDateTime#5171) THEN minCalculationDateTime#5171 ELSE orderDateTime#4923 END AS stockDatetime#5173]
(1093) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, outboundUnit#4950, roundedQuantitySum#5172, minCalculationDateTime#5171, stockDatetime#5173, CASE WHEN isnotnull(roundedQuantitySum#5172) THEN array(roundedQuantitySum#5172) ELSE array(0.0) END AS stockBatchQuantities#5174]
(1094) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, outboundUnit#4950, roundedQuantitySum#5172, minCalculationDateTime#5171, stockDatetime#5173, stockBatchQuantities#5174, array(2199-01-01 00:00:00) AS stockBatchShelfLifeEndDatetimes#5175]
(1095) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, outboundUnit#4950, roundedQuantitySum#5172, stockDatetime#5173, stockBatchQuantities#5174, stockBatchShelfLifeEndDatetimes#5175]
(1096) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, outboundUnit#4950, stockDatetime#5173, stockBatchQuantities#5174, stockBatchShelfLifeEndDatetimes#5175]
(1097) LogicalRelation
Arguments: parquet, [product#5176, plant#5177, demandChannel#5178, demandStream#5179, considerVariance#5180, demandTimeBuckets#5181, demandPointInTimeStart#5182, demandPointInTimeEnd#5183, demandPointInTime#5184], false
(1098) Join
Arguments: LeftOuter, ((plant#5177 <=> plant#4922) AND (product#5176 <=> product#4921))
(1099) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, outboundUnit#4950, stockDatetime#5173, stockBatchQuantities#5174, stockBatchShelfLifeEndDatetimes#5175, product#5176, plant#5177, demandChannel#5178, demandStream#5179, considerVariance#5180, demandTimeBuckets#5181, demandPointInTimeStart#5182, demandPointInTimeEnd#5183, demandPointInTime#5184, CASE WHEN isnotnull(product#5176) THEN struct(demandChannel, demandChannel#5178, demandStream, demandStream#5179, considerVariance, considerVariance#5180, demandTimeBuckets, demandTimeBuckets#5181, demandPointInTimeStart, demandPointInTimeStart#5182, demandPointInTimeEnd, demandPointInTimeEnd#5183, demandPointInTime, demandPointInTime#5184) ELSE cast(null as struct<demandChannel:string,demandStream:string,considerVariance:boolean,demandTimeBuckets:array<struct<demandStartDateTime:timestamp,demandQuantity:double,demandVariance:double>>,demandPointInTimeStart:timestamp,demandPointInTimeEnd:timestamp,demandPointInTime:array<struct<demandDateTime:timestamp,demandQuantity:double,demandVariance:double>>>) END AS rawDemands#5185]
(1100) Aggregate
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, outboundUnit#4950, stockDatetime#5173, stockBatchQuantities#5174, stockBatchShelfLifeEndDatetimes#5175], [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, outboundUnit#4950, stockDatetime#5173, stockBatchQuantities#5174, stockBatchShelfLifeEndDatetimes#5175, collect_list(rawDemands#5185, 0, 0) AS rawDemands#5186]
(1101) SubqueryAlias
Arguments: wl
(1102) LogicalRelation
Arguments: parquet, [systemId#5187, internalUUID#5188, id#5189, displayId#5190, name#5191, category#5192, companyCode#5193, address#5194, mainDistributionChain#5195, mainPurchasingOrganization#5196, validPurchasingOrganizations#5197, productGroup#5198], false
(1103) Repartition
Arguments: 37, true
(1104) Project
Arguments: [systemId#5187, internalUUID#5188, id#5189, displayId#5190, name#5191, category#5192, companyCode#5193, address#5194, mainDistributionChain#5195, mainPurchasingOrganization#5196, validPurchasingOrganizations#5197, productGroup#5198, address#5194.timezone.code AS timezonecode#5199]
(1105) Join
Arguments: LeftOuter, (plant#4922 <=> internalUUID#5188)
(1106) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, outboundUnit#4950, stockDatetime#5173, stockBatchQuantities#5174, stockBatchShelfLifeEndDatetimes#5175, rawDemands#5186, systemId#5187, internalUUID#5188, id#5189, displayId#5190, name#5191, category#5192, companyCode#5193, address#5194, mainDistributionChain#5195, mainPurchasingOrganization#5196, validPurchasingOrganizations#5197, productGroup#5198, CASE WHEN isnotnull(timezonecode#5199) THEN timezonecode#5199 ELSE UTC END AS timezonecode#5200]
(1107) Project
Arguments: [product#4921, plant#4922, orderDateTime#4923, productPlant#4934, outboundUnit#4950, stockDatetime#5173, stockBatchQuantities#5174, stockBatchShelfLifeEndDatetimes#5175, rawDemands#5186, timezonecode#5200]
(1108) DeserializeToObject
Arguments: createexternalrow(invoke(product#4921.toString()), invoke(plant#4922.toString()), static_invoke(DateTimeUtils.toJavaTimestamp(orderDateTime#4923)), if (isnull(productPlant#4934)) null else createexternalrow(invoke(productPlant#4934.systemId.toString()), invoke(productPlant#4934.internalUUID.toString()), if (isnull(productPlant#4934.plant)) null else createexternalrow(invoke(productPlant#4934.plant.internalRefUUID.toString()), invoke(productPlant#4934.plant.id.toString()), StructField(internalRefUUID,StringType,true), StructField(id,StringType,true)), if (isnull(productPlant#4934.product)) null else createexternalrow(invoke(productPlant#4934.product.internalRefUUID.toString()), invoke(productPlant#4934.product.id.toString()), StructField(internalRefUUID,StringType,true), StructField(id,StringType,true)), static_invoke(DateTimeUtils.toJavaDate(productPlant#4934.blockedForReplenishmentStartingFrom)), if (isnull(productPlant#4934.productionAspect)) null else createexternalrow(if (isnull(productPlant#4934.productionAspect.productMovementPlants)) null else createexternalrow(if (isnull(productPlant#4934.productionAspect.productMovementPlants.unitOfIssue)) null else createexternalrow(invoke(productPlant#4934.productionAspect.productMovementPlants.unitOfIssue.internalRefUUID.toString()), invoke(productPlant#4934.productionAspect.productMovementPlants.unitOfIssue.code.toString()), StructField(internalRefUUID,StringType,true), StructField(code,StringType,true)), StructField(unitOfIssue,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)), if (isnull(productPlant#4934.productionAspect.productPlanningPlants)) null else createexternalrow(if (isnull(productPlant#4934.productionAspect.productPlanningPlants.mrpType)) null else createexternalrow(invoke(productPlant#4934.productionAspect.productPlanningPlants.mrpType.internalRefUUID.toString()), invoke(productPlant#4934.productionAspect.productPlanningPlants.mrpType.code.toString()), StructField(internalRefUUID,StringType,true), StructField(code,StringType,true)), if (isnull(productPlant#4934.productionAspect.productPlanningPlants.abcIndicator)) null else createexternalrow(invoke(productPlant#4934.productionAspect.productPlanningPlants.abcIndicator.internalRefUUID.toString()), invoke(productPlant#4934.productionAspect.productPlanningPlants.abcIndicator.code.toString()), StructField(internalRefUUID,StringType,true), StructField(code,StringType,true)), if (isnull(productPlant#4934.productionAspect.productPlanningPlants.mrpController)) null else createexternalrow(invoke(productPlant#4934.productionAspect.productPlanningPlants.mrpController.internalRefUUID.toString()), invoke(productPlant#4934.productionAspect.productPlanningPlants.mrpController.id.toString()), StructField(internalRefUUID,StringType,true), StructField(id,StringType,true)), static_invoke(java.lang.Double.valueOf(productPlant#4934.productionAspect.productPlanningPlants.minimumLotSize)), if (isnull(productPlant#4934.productionAspect.productPlanningPlants.logisticalRoundingProfile)) null else createexternalrow(invoke(productPlant#4934.productionAspect.productPlanningPlants.logisticalRoundingProfile.internalRefUUID.toString()), invoke(productPlant#4934.productionAspect.productPlanningPlants.logisticalRoundingProfile.logisticalRoundingProfile.toString()), StructField(internalRefUUID,StringType,true), StructField(logisticalRoundingProfile,StringType,true)), StructField(mrpType,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true), StructField(abcIndicator,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true), StructField(mrpController,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true), StructField(minimumLotSize,DoubleType,true), StructField(logisticalRoundingProfile,StructType(StructField(internalRefUUID,StringType,true),StructField(logisticalRoundingProfile,StringType,true)),true)), StructField(productMovementPlants,StructType(StructField(unitOfIssue,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true), StructField(productPlanningPlants,StructType(StructField(mrpType,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(abcIndicator,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(mrpController,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(minimumLotSize,DoubleType,true),StructField(logisticalRoundingProfile,StructType(StructField(internalRefUUID,StringType,true),StructField(logisticalRoundingProfile,StringType,true)),true)),true)), if (isnull(productPlant#4934.salesPlant)) null else createexternalrow(if (isnull(productPlant#4934.salesPlant.loadingGroup)) null else createexternalrow(invoke(productPlant#4934.salesPlant.loadingGroup.internalRefUUID.toString()), invoke(productPlant#4934.salesPlant.loadingGroup.code.toString()), StructField(internalRefUUID,StringType,true), StructField(code,StringType,true)), StructField(loadingGroup,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)), mapobjects(lambdavariable(MapObject, StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true), true, 894), if (isnull(lambdavariable(MapObject, StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true), true, 894))) null else createexternalrow(static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true), true, 894).validFrom)), static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true), true, 894).validTo)), static_invoke(java.lang.Boolean.valueOf(lambdavariable(MapObject, StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true), true, 894).isListed)), StructField(validFrom,TimestampType,true), StructField(validTo,TimestampType,true), StructField(isListed,BooleanType,true)), productPlant#4934.listing, Some(class scala.collection.mutable.ArraySeq)), if (isnull(productPlant#4934.sourceOfSupplyCategory)) null else createexternalrow(invoke(productPlant#4934.sourceOfSupplyCategory.internalRefUUID.toString()), invoke(productPlant#4934.sourceOfSupplyCategory.code.toString()), StructField(internalRefUUID,StringType,true), StructField(code,StringType,true)), StructField(systemId,StringType,true), StructField(internalUUID,StringType,true), StructField(plant,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true), StructField(product,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true), StructField(blockedForReplenishmentStartingFrom,DateType,true), StructField(productionAspect,StructType(StructField(productMovementPlants,StructType(StructField(unitOfIssue,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true),StructField(productPlanningPlants,StructType(StructField(mrpType,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(abcIndicator,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(mrpController,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(minimumLotSize,DoubleType,true),StructField(logisticalRoundingProfile,StructType(StructField(internalRefUUID,StringType,true),StructField(logisticalRoundingProfile,StringType,true)),true)),true)),true), StructField(salesPlant,StructType(StructField(loadingGroup,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true), StructField(listing,ArrayType(StructType(StructField(validFrom,TimestampType,true),StructField(validTo,TimestampType,true),StructField(isListed,BooleanType,true)),true),true), StructField(sourceOfSupplyCategory,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)), static_invoke(java.lang.Double.valueOf(outboundUnit#4950)), static_invoke(DateTimeUtils.toJavaTimestamp(stockDatetime#5173)), mapobjects(lambdavariable(MapObject, DoubleType, true, 895), static_invoke(java.lang.Double.valueOf(cast(lambdavariable(MapObject, DoubleType, true, 895) as double))), stockBatchQuantities#5174, Some(class scala.collection.mutable.ArraySeq)), mapobjects(lambdavariable(MapObject, TimestampType, false, 896), assertnotnull(static_invoke(DateTimeUtils.toJavaTimestamp(cast(lambdavariable(MapObject, TimestampType, false, 896) as timestamp)))), stockBatchShelfLifeEndDatetimes#5175, Some(class scala.collection.mutable.ArraySeq)), mapobjects(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897), assertnotnull(if (isnull(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897))) null else createexternalrow(invoke(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandChannel.toString()), invoke(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandStream.toString()), static_invoke(java.lang.Boolean.valueOf(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).considerVariance)), mapobjects(lambdavariable(MapObject, StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 898), if (isnull(lambdavariable(MapObject, StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 898))) null else createexternalrow(static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 898).demandStartDateTime)), static_invoke(java.lang.Double.valueOf(lambdavariable(MapObject, StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 898).demandQuantity)), static_invoke(java.lang.Double.valueOf(lambdavariable(MapObject, StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 898).demandVariance)), StructField(demandStartDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true)), lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandTimeBuckets, Some(class scala.collection.mutable.ArraySeq)), static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandPointInTimeStart)), static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandPointInTimeEnd)), mapobjects(lambdavariable(MapObject, StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 899), if (isnull(lambdavariable(MapObject, StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 899))) null else createexternalrow(static_invoke(DateTimeUtils.toJavaTimestamp(lambdavariable(MapObject, StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 899).demandDateTime)), static_invoke(java.lang.Double.valueOf(lambdavariable(MapObject, StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 899).demandQuantity)), static_invoke(java.lang.Double.valueOf(lambdavariable(MapObject, StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true), true, 899).demandVariance)), StructField(demandDateTime,TimestampType,true), StructField(demandQuantity,DoubleType,true), StructField(demandVariance,DoubleType,true)), lambdavariable(MapObject, StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), false, 897).demandPointInTime, Some(class scala.collection.mutable.ArraySeq)), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true), StructField(demandPointInTimeStart,TimestampType,true), StructField(demandPointInTimeEnd,TimestampType,true), StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true))), rawDemands#5186, Some(class scala.collection.mutable.ArraySeq)), invoke(timezonecode#5200.toString()), StructField(product,StringType,true), StructField(plant,StringType,true), StructField(orderDateTime,TimestampType,true), StructField(productPlant,StructType(StructField(systemId,StringType,true),StructField(internalUUID,StringType,true),StructField(plant,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(product,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(blockedForReplenishmentStartingFrom,DateType,true),StructField(productionAspect,StructType(StructField(productMovementPlants,StructType(StructField(unitOfIssue,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true),StructField(productPlanningPlants,StructType(StructField(mrpType,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(abcIndicator,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(mrpController,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(minimumLotSize,DoubleType,true),StructField(logisticalRoundingProfile,StructType(StructField(internalRefUUID,StringType,true),StructField(logisticalRoundingProfile,StringType,true)),true)),true)),true),StructField(salesPlant,StructType(StructField(loadingGroup,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true),StructField(listing,ArrayType(StructType(StructField(validFrom,TimestampType,true),StructField(validTo,TimestampType,true),StructField(isListed,BooleanType,true)),true),true),StructField(sourceOfSupplyCategory,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true), StructField(outboundUnit,DoubleType,true), StructField(stockDatetime,TimestampType,true), StructField(stockBatchQuantities,ArrayType(DoubleType,true),false), StructField(stockBatchShelfLifeEndDatetimes,ArrayType(TimestampType,false),false), StructField(rawDemands,ArrayType(StructType(StructField(demandChannel,StringType,true),StructField(demandStream,StringType,true),StructField(considerVariance,BooleanType,true),StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true),StructField(demandPointInTimeStart,TimestampType,true),StructField(demandPointInTimeEnd,TimestampType,true),StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true)),false),false), StructField(timezonecode,StringType,true)), obj#2697: org.apache.spark.sql.Row
(1109) MapElements
Arguments: com.sap.s4hana.eureka.business.crporderquantitykpiservice.core.business.datasnapshot.DemandTransformatorImpl$$Lambda/0x0000000802111db0@1fa786b, interface org.apache.spark.sql.Row, [StructField(product,StringType,true), StructField(plant,StringType,true), StructField(orderDateTime,TimestampType,true), StructField(productPlant,StructType(StructField(systemId,StringType,true),StructField(internalUUID,StringType,true),StructField(plant,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(product,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(blockedForReplenishmentStartingFrom,DateType,true),StructField(productionAspect,StructType(StructField(productMovementPlants,StructType(StructField(unitOfIssue,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true),StructField(productPlanningPlants,StructType(StructField(mrpType,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(abcIndicator,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true),StructField(mrpController,StructType(StructField(internalRefUUID,StringType,true),StructField(id,StringType,true)),true),StructField(minimumLotSize,DoubleType,true),StructField(logisticalRoundingProfile,StructType(StructField(internalRefUUID,StringType,true),StructField(logisticalRoundingProfile,StringType,true)),true)),true)),true),StructField(salesPlant,StructType(StructField(loadingGroup,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true),StructField(listing,ArrayType(StructType(StructField(validFrom,TimestampType,true),StructField(validTo,TimestampType,true),StructField(isListed,BooleanType,true)),true),true),StructField(sourceOfSupplyCategory,StructType(StructField(internalRefUUID,StringType,true),StructField(code,StringType,true)),true)),true), StructField(outboundUnit,DoubleType,true), StructField(stockDatetime,TimestampType,true), StructField(stockBatchQuantities,ArrayType(DoubleType,true),false), StructField(stockBatchShelfLifeEndDatetimes,ArrayType(TimestampType,false),false), StructField(rawDemands,ArrayType(StructType(StructField(demandChannel,StringType,true),StructField(demandStream,StringType,true),StructField(considerVariance,BooleanType,true),StructField(demandTimeBuckets,ArrayType(StructType(StructField(demandStartDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true),StructField(demandPointInTimeStart,TimestampType,true),StructField(demandPointInTimeEnd,TimestampType,true),StructField(demandPointInTime,ArrayType(StructType(StructField(demandDateTime,TimestampType,true),StructField(demandQuantity,DoubleType,true),StructField(demandVariance,DoubleType,true)),true),true)),false),false), StructField(timezonecode,StringType,true)], obj#2702: org.apache.spark.sql.Row
(1110) SerializeFromObject
Arguments: [if (invoke(assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt(0))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 0, product), StringType, ObjectType(class java.lang.String)))) AS product#5201, if (invoke(assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt(1))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 1, plant), StringType, ObjectType(class java.lang.String)))) AS plant#5202, if (invoke(assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt(2))) null else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), assertnotnull(if (isnull(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)))) null else named_struct(demandChannel, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(0))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 0, demandChannel), StringType, ObjectType(class java.lang.String)))), demandStream, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(1))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 1, demandStream), StringType, ObjectType(class java.lang.String)))), considerVariance, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(2))) null else invoke(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 2, considerVariance), BooleanType, ObjectType(class java.lang.Boolean)).booleanValue()), demandValues, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(3))) null else if (invoke(class [D.isInstance(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 3, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object))))) static_invoke(ArrayData.toArrayData(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 3, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object)))) else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 885), assertnotnull(invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 885), DoubleType, ObjectType(class java.lang.Double)).doubleValue())), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 3, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object)), None), demandVariances, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(4))) null else if (invoke(class [D.isInstance(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object))))) static_invoke(ArrayData.toArrayData(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object)))) else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 886), invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 886), DoubleType, ObjectType(class java.lang.Double)).doubleValue()), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object)), None), anchorDatetimes, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(5))) null else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 887), assertnotnull(static_invoke(DateTimeUtils.fromJavaTimestamp(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 887), TimestampType, ObjectType(class java.sql.Timestamp))))), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 5, anchorDatetimes), ArrayType(TimestampType,false), ObjectType(class java.lang.Object)), None), anchorWeekdays, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(6))) null else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 888), assertnotnull(static_invoke(UTF8String.fromString(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 888), StringType, ObjectType(class java.lang.String))))), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 6, anchorWeekdays), ArrayType(StringType,false), ObjectType(class java.lang.Object)), None), anchorIndices, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(7))) null else if (invoke(class [I.isInstance(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 7, anchorIndices), ArrayType(IntegerType,false), ObjectType(class java.lang.Object))))) static_invoke(ArrayData.toArrayData(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 7, anchorIndices), ArrayType(IntegerType,false), ObjectType(class java.lang.Object)))) else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 889), assertnotnull(invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 889), IntegerType, ObjectType(class java.lang.Integer)).intValue())), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 884), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(anchorDatetimes,ArrayType(TimestampType,false),true), StructField(anchorWeekdays,ArrayType(StringType,false),true), StructField(anchorIndices,ArrayType(IntegerType,false),true), ObjectType(interface org.apache.spark.sql.Row)), 7, anchorIndices), ArrayType(IntegerType,false), ObjectType(class java.lang.Object)), None))), validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 2, dayBucketDemands), ArrayType(StructType(StructField(demandChannel,StringType,true),StructField(demandStream,StringType,true),StructField(considerVariance,BooleanType,true),StructField(demandValues,ArrayType(DoubleType,false),true),StructField(demandVariances,ArrayType(DoubleType,true),true),StructField(anchorDatetimes,ArrayType(TimestampType,false),true),StructField(anchorWeekdays,ArrayType(StringType,false),true),StructField(anchorIndices,ArrayType(IntegerType,false),true)),false), ObjectType(class java.lang.Object)), None) AS dayBucketDemands#5203, if (invoke(assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt(3))) null else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), assertnotnull(if (isnull(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)))) null else named_struct(demandChannel, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(0))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 0, demandChannel), StringType, ObjectType(class java.lang.String)))), demandStream, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(1))) null else static_invoke(UTF8String.fromString(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 1, demandStream), StringType, ObjectType(class java.lang.String)))), considerVariance, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(2))) null else invoke(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 2, considerVariance), BooleanType, ObjectType(class java.lang.Boolean)).booleanValue()), demandDatetimes, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(3))) null else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 891), assertnotnull(static_invoke(DateTimeUtils.fromJavaTimestamp(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 891), TimestampType, ObjectType(class java.sql.Timestamp))))), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 3, demandDatetimes), ArrayType(TimestampType,false), ObjectType(class java.lang.Object)), None), demandValues, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(4))) null else if (invoke(class [D.isInstance(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object))))) static_invoke(ArrayData.toArrayData(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object)))) else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 892), assertnotnull(invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 892), DoubleType, ObjectType(class java.lang.Double)).doubleValue())), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 4, demandValues), ArrayType(DoubleType,false), ObjectType(class java.lang.Object)), None), demandVariances, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(5))) null else if (invoke(class [D.isInstance(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 5, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object))))) static_invoke(ArrayData.toArrayData(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 5, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object)))) else mapobjects(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 893), invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 893), DoubleType, ObjectType(class java.lang.Double)).doubleValue()), validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 5, demandVariances), ArrayType(DoubleType,true), ObjectType(class java.lang.Object)), None), horizonStartDatetime, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(6))) null else static_invoke(DateTimeUtils.fromJavaTimestamp(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 6, horizonStartDatetime), TimestampType, ObjectType(class java.sql.Timestamp)))), horizonEndDatetime, if (invoke(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)).isNullAt(7))) null else static_invoke(DateTimeUtils.fromJavaTimestamp(validateexternaltype(getexternalrowfield(validateexternaltype(lambdavariable(MapObject, ObjectType(class java.lang.Object), true, 890), StructField(demandChannel,StringType,true), StructField(demandStream,StringType,true), StructField(considerVariance,BooleanType,true), StructField(demandDatetimes,ArrayType(TimestampType,false),true), StructField(demandValues,ArrayType(DoubleType,false),true), StructField(demandVariances,ArrayType(DoubleType,true),true), StructField(horizonStartDatetime,TimestampType,true), StructField(horizonEndDatetime,TimestampType,true), ObjectType(interface org.apache.spark.sql.Row)), 7, horizonEndDatetime), TimestampType, ObjectType(class java.sql.Timestamp)))))), validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 3, pointInTimeDemands), ArrayType(StructType(StructField(demandChannel,StringType,true),StructField(demandStream,StringType,true),StructField(considerVariance,BooleanType,true),StructField(demandDatetimes,ArrayType(TimestampType,false),true),StructField(demandValues,ArrayType(DoubleType,false),true),StructField(demandVariances,ArrayType(DoubleType,true),true),StructField(horizonStartDatetime,TimestampType,true),StructField(horizonEndDatetime,TimestampType,true)),false), ObjectType(class java.lang.Object)), None) AS pointInTimeDemands#5204]
(1111) Join
Arguments: LeftOuter, ((plant#5202 <=> plant#4667) AND (product#5201 <=> product#4666))
(1112) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668, productPlant#4679, outboundUnit#4695, stockDatetime#4918, stockBatchQuantities#4919, stockBatchShelfLifeEndDatetimes#4920, plant#5202, dayBucketDemands#5203, pointInTimeDemands#5204]
(1113) Project
Arguments: [product#4666, plant#4667, orderDateTime#4668, productPlant#4679, outboundUnit#4695, stockDatetime#4918, stockBatchQuantities#4919, stockBatchShelfLifeEndDatetimes#4920, dayBucketDemands#5203, pointInTimeDemands#5204]
(1114) LogicalRelation
Arguments: parquet, [systemId#5205, internalUUID#5206, id#5207, displayId#5208, supplier#5209, type#5210, status#5211, isMarkedForDeletion#5212, items#5213], false
(1115) Repartition
Arguments: 37, true
(1116) Generate
Arguments: explode(items#5213), false, [item#5214]
(1117) Project
Arguments: [id#5207, internalUUID#5206, isMarkedForDeletion#5212, supplier#5209.internalRefUUID AS supplierUuid#5215, item#5214]
(1118) Filter
Arguments: (((NOT isMarkedForDeletion#5212 AND NOT item#5214.deletionIndicator) AND NOT item#5214.completeIndicator) AND NOT item#5214.returnIndicator)
(1119) Project
Arguments: [id#5207, internalUUID#5206, supplierUuid#5215, item#5214.plant.internalRefUUID AS plant#5216, item#5214.product.internalRefUUID AS product#5217, item#5214.storageLocation.internalRefUUID AS storageLocUuid#5218, item#5214.quantityUnit.code AS quantityUom#5219, item#5214.quantityUnit.internalRefUUID AS quantityUomUuid#5220, item#5214.quantityNumerator AS quantityNumerator#5221, item#5214.quantityDenominator AS quantityDenominator#5222, item#5214.scheduleLines AS scheduleLines#5223, item#5214.confirmations AS confirmations#5224]
(1120) Join
Arguments: Inner, ((product#4666 <=> product#5217) AND (plant#4667 <=> supplierUuid#5215))
(1121) Project
Arguments: [id#5207, internalUUID#5206, supplierUuid#5215, plant#5216, product#5217, storageLocUuid#5218, quantityUom#5219, quantityUomUuid#5220, quantityNumerator#5221, quantityDenominator#5222, scheduleLines#5223, confirmations#5224, stockDatetime#4918, plant#4667]
(1122) Project
Arguments: [id#5207, internalUUID#5206, supplierUuid#5215, product#5217, storageLocUuid#5218, quantityUom#5219, quantityUomUuid#5220, quantityNumerator#5221, quantityDenominator#5222, scheduleLines#5223, confirmations#5224, stockDatetime#4918, plant#4667]
(1123) Project
Arguments: [id#5207, internalUUID#5206, supplierUuid#5215, product#5217, storageLocUuid#5218, quantityUom#5219, quantityUomUuid#5220, quantityNumerator#5221, quantityDenominator#5222, scheduleLines#5223, confirmations#5224, stockDatetime#4918, plant#4667, filter(transform(filter(transform(scheduleLines#5223, lambdafunction(struct(openQty, (greatest((lambda x_6#4646.quantity - coalesce(lambda x_6#4646.deliveredQuantity, 0.0)), 0.0) * -1.0), availabilityDatetime, coalesce(lambda x_6#4646.productAvailabilityDateTime, lambda x_6#4646.deliveryAt)), lambda x_6#4646, false)), lambdafunction((lambda x_7#4647.availabilityDatetime < stockDatetime#4918), lambda x_7#4647, false)), lambdafunction(struct(documentId, id#5207, documentUuid, internalUUID#5206, openQty, lambda x_8#4648.openQty, openQtyInBaseUnit, ((lambda x_8#4648.openQty * quantityNumerator#5221) / quantityDenominator#5222), qtyUom, quantityUom#5219, qtyUomUuid, quantityUomUuid#5220, availabilityDatetime, lambda x_8#4648.availabilityDatetime, shelfLifeEndDatetime, 2199-01-01 00:00:00), lambda x_8#4648, false)), lambdafunction(NOT (lambda x_9#4649.openQty = 0.0), lambda x_9#4649, false)) AS openGoodsMovements#4645]
(1124) Aggregate
Arguments: [product#5217, plant#4667], [product#5217, plant#4667, flatten(collect_list(openGoodsMovements#4645, 0, 0)) AS openGoodsMovements#4650]
(1125) Filter
Arguments: (array_size(openGoodsMovements#4650) > 0)
(1126) Union
Arguments: false, false
(1127) Aggregate
Arguments: [product#3025, plant#3024], [product#3025, plant#3024, flatten(collect_list(openGoodsMovements#3125, 0, 0)) AS openGoodsMovements#5266]
(1128) Join
Arguments: LeftOuter, ((product#1127 = product#3025) AND (plant#1128 = plant#3024))
(1129) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218, stockDatetime#1569, stockBatchQuantities#1570, stockBatchShelfLifeEndDatetimes#1571, dayBucketDemands#2709, pointInTimeDemands#2710, openGoodsMovements#5266]
(1130) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218, stockDatetime#1569, stockBatchQuantities#1570, stockBatchShelfLifeEndDatetimes#1571, dayBucketDemands#2709, pointInTimeDemands#2710, coalesce(openGoodsMovements#5266.openQtyInBaseUnit, cast(array() as array<double>)) AS openGoodsMovementQuantities#5850, coalesce(openGoodsMovements#5266.availabilityDatetime, cast(array() as array<timestamp>)) AS openGoodsMovementAvailabilityDatetimes#5851, coalesce(openGoodsMovements#5266.shelfLifeEndDatetime, cast(array() as array<timestamp>)) AS openGoodsMovementShelfLifeEndDatetimes#5852]
(1131) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218, stockDatetime#1569, stockBatchQuantities#1570, stockBatchShelfLifeEndDatetimes#1571, dayBucketDemands#2709, pointInTimeDemands#2710, openGoodsMovementQuantities#5850, openGoodsMovementAvailabilityDatetimes#5851, openGoodsMovementShelfLifeEndDatetimes#5852, array(struct(configurationValidityDatetime, 1970-01-01 00:00:00, configurationName, ShelfLife.LIFOPreference, configurationValue, 0.42), struct(configurationValidityDatetime, 1970-01-01 00:00:00, configurationName, StockExtrapolation.ConsiderUnfulfilledDemands, configurationValue, 1)) AS configuration#5953]
(1132) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218, stockDatetime#1569, stockBatchQuantities#1570, stockBatchShelfLifeEndDatetimes#1571, dayBucketDemands#2709, pointInTimeDemands#2710, openGoodsMovementQuantities#5850, openGoodsMovementAvailabilityDatetimes#5851, openGoodsMovementShelfLifeEndDatetimes#5852, configuration#5953, array(ListingPeriod) AS timeDependentSettingsName#6092]
(1133) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218, stockDatetime#1569, stockBatchQuantities#1570, stockBatchShelfLifeEndDatetimes#1571, dayBucketDemands#2709, pointInTimeDemands#2710, openGoodsMovementQuantities#5850, openGoodsMovementAvailabilityDatetimes#5851, openGoodsMovementShelfLifeEndDatetimes#5852, configuration#5953, timeDependentSettingsName#6092, array(1900-01-01 00:00:00) AS timeDependentSettingsStartDatetime#6093]
(1134) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218, stockDatetime#1569, stockBatchQuantities#1570, stockBatchShelfLifeEndDatetimes#1571, dayBucketDemands#2709, pointInTimeDemands#2710, openGoodsMovementQuantities#5850, openGoodsMovementAvailabilityDatetimes#5851, openGoodsMovementShelfLifeEndDatetimes#5852, configuration#5953, timeDependentSettingsName#6092, timeDependentSettingsStartDatetime#6093, array(2199-01-01 00:00:00) AS timeDependentSettingsEndDatetime#6094]
(1135) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, productPlant#1168, outboundUnit#1218, stockDatetime#1569, stockBatchQuantities#1570, stockBatchShelfLifeEndDatetimes#1571, dayBucketDemands#2709, pointInTimeDemands#2710, openGoodsMovementQuantities#5850, openGoodsMovementAvailabilityDatetimes#5851, openGoodsMovementShelfLifeEndDatetimes#5852, configuration#5953, timeDependentSettingsName#6092, timeDependentSettingsStartDatetime#6093, timeDependentSettingsEndDatetime#6094, array(1.0) AS timeDependentSettingsValue#6095]
(1136) Project
Arguments: [product#1127, plant#1128, orderDateTime#1129, outboundUnit#1218, stockDatetime#1569, stockBatchQuantities#1570, stockBatchShelfLifeEndDatetimes#1571, dayBucketDemands#2709, pointInTimeDemands#2710, openGoodsMovementQuantities#5850, openGoodsMovementAvailabilityDatetimes#5851, openGoodsMovementShelfLifeEndDatetimes#5852, configuration#5953, timeDependentSettingsName#6092, timeDependentSettingsStartDatetime#6093, timeDependentSettingsEndDatetime#6094, timeDependentSettingsValue#6095]
(1137) Project
Arguments: [product#1127, plant#1128, outboundUnit#1218, stockDatetime#1569, stockBatchQuantities#1570, stockBatchShelfLifeEndDatetimes#1571, dayBucketDemands#2709, pointInTimeDemands#2710, openGoodsMovementQuantities#5850, openGoodsMovementAvailabilityDatetimes#5851, openGoodsMovementShelfLifeEndDatetimes#5852, configuration#5953, timeDependentSettingsName#6092, timeDependentSettingsStartDatetime#6093, timeDependentSettingsEndDatetime#6094, timeDependentSettingsValue#6095]