Online ARIMA is a method for estimating the parameters of ARIMA models using online learning. It does not rely on noise terms and can access large-scale datasets without needing them in advance. The implementation is based on Online Newton Step optimization. The model arguments include the number of extended AR terms, coefficients of extended AR terms, degree of first differencing, tailing values of zero and high order differencing values, convergence criteria, learning rate, and whether fittings should be included in the output.
------

SET SCHEMA DM_PAL;

DROP TABLE PAL_ARIMA_DATA_TBL;
CREATE COLUMN TABLE PAL_ARIMA_DATA_TBL ("TIMESTAMP" INTEGER, "Y" DOUBLE);

----------------------- first batch ------------------------------------
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (1, 450);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (2, 806);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (3, 647);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (4, -3300);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (5, 5308);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (6, -5201);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (7, 539);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (8, 10515);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (9, -3244);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (10, -4780);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (11, 2997);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (12, -6572);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (13, 4535);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (14, 5307);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (15, -612);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (16, -1399);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (17, 1385);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (18, -8420);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (19, 287);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (20, 9437);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (21, -584);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (22, -274);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (23, -2824);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (24, -5981);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (25, 2446);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (26, 63);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (27, 4233);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (28, 1999);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (29, -8218);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (30, -9725);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (31, 2443);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (32, 8493);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (33, -3494);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (34, -1763);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (35, -2697);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (36, -1798);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (37, 874);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (38, 4768);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (39, 1259);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (40, -3342);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (41, 2012);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (42, -5225);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (43, 1506);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (44, 4843);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (45, 314);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (46, -822);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (47, -2776);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (48, -1093);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (49, 1132);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (50, 4228);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (51, -1507);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (52, 3567);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (53, -2692);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (54, -3972);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (55, -1461);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (56, 3579);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (57, 2397);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (58, -1007);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (59, -4925);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (60, 1886);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (61, -643);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (62, 3683);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (63, 387);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (64, -8401);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (65, 4998);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (66, -267);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (67, -2714);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (68, 3988);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (69, -599);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (70, -2339);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (71, 1107);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (72, -3051);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (73, 4560);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (74, 259);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (75, 677);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (76, -2779);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (77, 765);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (78, -4065);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (79, 250);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (80, 4092);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (81, 2048);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (82, -496);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (83, -1038);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (84, -3193);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (85, 3348);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (86, 4077);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (87, -684);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (88, -2980);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (89, 2712);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (90, -7051);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (91, -233);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (92, 4778);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (93, 6285);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (94, -2549);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (95, -106);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (96, -5638);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (97, -1150);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (98, 6995);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (99, -2835);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (100, -225);



DROP TABLE PAL_ARIMA_MODEL_TBL;  -- model table
CREATE COLUMN TABLE PAL_ARIMA_MODEL_TBL ("KEY" NVARCHAR(100), "VALUE" NVARCHAR(5000));


DROP PROCEDURE fb_olarima;
CREATE PROCEDURE fb_olarima() as
begin
	DECLARE lt_modelIn TABLE("KEY" NVARCHAR(100), "VALUE" NVARCHAR(5000));
	lt_control =
	SELECT  TO_NVARCHAR('P')  			AS name, TO_INTEGER(4) AS intargs, TO_DOUBLE(NULL) AS doubleargs, TO_NVARCHAR(NULL) AS stringargs FROM dummy UNION ALL
	SELECT  TO_NVARCHAR('M')  			AS name, TO_INTEGER(8) AS intargs, TO_DOUBLE(NULL) AS doubleargs, TO_NVARCHAR(NULL) AS stringargs FROM dummy UNION ALL
	SELECT  TO_NVARCHAR('LEARNING_RATE')  AS name, TO_INTEGER(NULL) AS intargs, TO_DOUBLE(0.00001) AS doubleargs, TO_NVARCHAR(NULL) AS stringargs FROM dummy UNION ALL
	SELECT  TO_NVARCHAR('OUTPUT_FITTED')  AS name, TO_INTEGER(1) AS intargs, TO_DOUBLE(NULL) AS doubleargs, TO_NVARCHAR(NULL) AS stringargs FROM dummy;

	  
	lt_data = select * from PAL_ARIMA_DATA_TBL;
	
	CALL _SYS_AFL.PAL_ONLINE_ARIMA (:lt_data, :lt_control, :lt_modelIn, lt_modelout, lt_fitted);
	
	INSERT INTO PAL_ARIMA_MODEL_TBL SELECT * FROM :lt_modelout;
end;
call fb_olarima();

----------------------- second batch ------------------------------------
TRUNCATE TABLE PAL_ARIMA_DATA_TBL;
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (101, 386);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (102, -7807);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (103, 3374);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (104, 6074);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (105, 241);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (106, 2137);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (107, -111);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (108, -3984);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (109, -751);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (110, 4307);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (111, -2218);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (112, 2908);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (113, -3830);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (114, -7253);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (115, 1678);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (116, 7304);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (117, 3580);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (118, -879);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (119, -5217);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (120, 2246);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (121, 902);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (122, 3327);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (123, 4760);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (124, -8948);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (125, 11347);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (126, -14919);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (127, -3903);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (128, 6915);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (129, 5823);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (130, -3662);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (131, -4320);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (132, 1355);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (133, 2199);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (134, -5);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (135, 4977);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (136, -3395);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (137, 2206);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (138, -6743);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (139, -4286);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (140, 10419);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (141, 4858);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (142, -4507);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (143, -561);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (144, -5693);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (145, 4240);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (146, 4536);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (147, 4519);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (148, -2665);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (149, 6963);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (150, -14162);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (151, -7328);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (152, 9783);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (153, 6730);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (154, -1137);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (155, 588);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (156, -8073);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (157, 4205);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (158, 8168);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (159, -2627);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (160, 250);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (161, -397);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (162, -10121);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (163, 1063);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (164, 5150);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (165, 1638);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (166, 1728);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (167, -1385);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (168, -6889);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (169, 334);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (170, 6279);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (171, 1535);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (172, -2877);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (173, 2291);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (174, -12725);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (175, 1368);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (176, 3667);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (177, 6124);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (178, -1152);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (179, -3744);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (180, -1978);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (181, -1548);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (182, 4627);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (183, -3400);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (184, 1845);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (185, -246);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (186, -10621);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (187, 1162);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (188, 1714);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (189, 4010);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (190, -3570);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (191, -3126);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (192, -508);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (193, 436);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (194, 4198);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (195, 3197);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (196, -1359);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (197, -1743);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (198, -6029);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (199, -138);
INSERT INTO PAL_ARIMA_DATA_TBL VALUES (200, 3065);


DROP PROCEDURE sb_olarima;
CREATE PROCEDURE sb_olarima() as
begin
	DECLARE lt_control TABLE( "NAME" VARCHAR (50),"INT_VALUE" INTEGER,"DOUBLE_VALUE" DOUBLE,"STRING_VALUE" VARCHAR (100));
	  
	lt_data = select * from PAL_ARIMA_DATA_TBL;
	lt_modelIn = select * from PAL_ARIMA_MODEL_TBL;
	
	CALL _SYS_AFL.PAL_ONLINE_ARIMA (:lt_data, :lt_control, :lt_modelIn, lt_modelout, lt_fitted);
	
	TRUNCATE TABLE PAL_ARIMA_MODEL_TBL;
	INSERT INTO PAL_ARIMA_MODEL_TBL SELECT * FROM :lt_modelout;
end;
call sb_olarima();


----------------------- more batches until all data has been loaded ----------------

