Оптимизированная схема работает в связке «Hyperion Planning» -> «CSV» -> «таблица Oracle DB». Ниже описана реализация и приведены основные компоненты решения. Данная схема работает через запись 1 строки в таблицу, к которой привязан триггер. Триггер обращается к External table (внешняя таблица, которая смотрит на csv-file) и инсертит данные в целевую таблицу.
Contents
- 1 Создание инфраструктуры в Oracle DB
- 2 Создание скриптов выгрузки в Essbase
Создание инфраструктуры в Oracle DB
Создаем целевую таблицу в Oracle APPS_2016.PL_DATA
В эту таблицу необходимо выгрузить срез данных из Hyperion Planning/Essbase.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
CREATE TABLE APPS_2016.PL_DATA ( PERDOG VARCHAR2(50 BYTE), YEAR VARCHAR2(50 BYTE), SCENARIO VARCHAR2(50 BYTE), VERSION VARCHAR2(50 BYTE), CFO VARCHAR2(50 BYTE), PRODUCT VARCHAR2(50 BYTE), CHANNEL VARCHAR2(50 BYTE), ALLOC VARCHAR2(50 BYTE), ACCOUNT VARCHAR2(50 BYTE), Q1 NUMBER, Q2 NUMBER, Q3 NUMBER, Q4 NUMBER ) TABLESPACE USERS PCTUSED 0 PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 55M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ) LOGGING NOCOMPRESS NOCACHE NOPARALLEL MONITORING; |
Таблица с триггером на событие — APPS_2016.PL_DATA_CLEAR
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
CREATE TABLE APPS_2016.PL_DATA_CLEAR ( PERDOG VARCHAR2(50 BYTE), YEAR VARCHAR2(50 BYTE), SCENARIO VARCHAR2(50 BYTE), VERSION VARCHAR2(50 BYTE), CFO VARCHAR2(50 BYTE), PRODUCT VARCHAR2(50 BYTE), CHANNEL VARCHAR2(50 BYTE), ALLOC VARCHAR2(50 BYTE), ACCOUNT VARCHAR2(50 BYTE), BB NUMBER, Q1 NUMBER, Q2 NUMBER, Q3 NUMBER, Q4 NUMBER ) TABLESPACE USERS PCTUSED 0 PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ) LOGGING NOCOMPRESS NOCACHE NOPARALLEL MONITORING; CREATE OR REPLACE TRIGGER APPS_2016.PL_CLEAR_DATA BEFORE INSERT ON APPS_2016.PL_DATA_CLEAR REFERENCING NEW AS New OLD AS Old FOR EACH ROW DECLARE BEGIN DELETE FROM APPS_2016.PL_DATA_CLEAR; DELETE FROM APPS_2016.PL_DATA; INSERT INTO APPS_2016.PL_DATA SELECT replace(PERDOG, '"', ''), replace(YEAR, '"', ''), replace(SCENARIO, '"', ''), replace(VERSION, '"', ''), replace(CFO, '"', ''), replace(PRODUCT, '"', ''), replace(CHANNEL, '"', ''), replace(ALLOC, '"', ''), replace(ACCOUNT, '"', ''), Q1, Q2, Q3, Q4 FROM APPS_2016.PL_DATA_EXTERNAL; DELETE FROM APPS_2016.PL_DATA WHERE PERDOG ='Q1'; UPDATE APPS_2016.PL_DATA SET Q1 = -2E-15 WHERE Q1 IS NULL; UPDATE APPS_2016.PL_DATA SET Q2 = -2E-15 WHERE Q2 IS NULL; UPDATE APPS_2016.PL_DATA SET Q3 = -2E-15 WHERE Q3 IS NULL; UPDATE APPS_2016.PL_DATA SET Q4 = -2E-15 WHERE Q4 IS NULL; END; |
APPS_2016.PL_DATA_EXTERNAL — внешняя таблица, которая смотрит на csv-файл
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
APPS_2016.PL_DATA_EXTERNAL CREATE TABLE APPS_2016.PL_DATA_EXTERNAL ( PERDOG VARCHAR2(50 BYTE), YEAR VARCHAR2(50 BYTE), SCENARIO VARCHAR2(50 BYTE), VERSION VARCHAR2(50 BYTE), CFO VARCHAR2(50 BYTE), PRODUCT VARCHAR2(50 BYTE), CHANNEL VARCHAR2(50 BYTE), ALLOC VARCHAR2(50 BYTE), ACCOUNT VARCHAR2(50 BYTE), Q1 NUMBER, Q2 NUMBER, Q3 NUMBER, Q4 NUMBER ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY DIR_LOAD ACCESS PARAMETERS ( records delimited by newline CHARACTERSET 'CL8MSWIN1251' LOGFILE LOAD_ORACLE_LOGS:'PL_2015_DATA_EXTERNAL_LOG.LOG' fields terminated by ';' missing field values are NULL ) LOCATION (DIR_LOAD:'PL_2015_DATA.csv') ) REJECT LIMIT 0 NOPARALLEL NOMONITORING; |
Создание директории и прав доступа к ней в Oracle DB
Директория с файлами выгрузок
1 2 3 4 5 6 |
CREATE OR REPLACE DIRECTORY DIR_LOAD AS '/hyp/hyperion11/products/Essbase/EssbaseServer/app/DataExport'; GRANT READ, WRITE ON DIRECTORY DIR_LOAD TO H11_PL_2014 WITH GRANT OPTION; GRANT READ, WRITE ON DIRECTORY DIR_LOAD TO H11_PL_2015 WITH GRANT OPTION; GRANT READ, WRITE ON DIRECTORY DIR_LOAD TO H11_PL_2016 WITH GRANT OPTION; |
Директория с логами выгрузок
1 2 3 4 5 6 |
CREATE OR REPLACE DIRECTORY LOAD_ORACLE_LOGS AS '/home/oracle/Load_oracle_logs/'; GRANT READ, WRITE ON DIRECTORY LOAD_ORACLE_LOGS TO H11_PL_2014 WITH GRANT OPTION; GRANT READ, WRITE ON DIRECTORY LOAD_ORACLE_LOGS TO H11_PL_2015 WITH GRANT OPTION; GRANT READ, WRITE ON DIRECTORY LOAD_ORACLE_LOGS TO H11_PL_2016 WITH GRANT OPTION; |
Создание скриптов выгрузки в Essbase
%STD_HEADER();
1 2 3 4 5 |
SET LOCKBLOCK HIGH; /*в esscfg CALCLOCKBLOCKHIGH 50000*/ SET CACHE HIGH;/*в esscfg CALCCACHEHIGH 20000000 */ SET AGGMISSG ON ; /*подымаем пустые блоки*/ SET CLEARUPDATESTATUS OFF; /*Выключаем разметку блоков на чистые-грязные*/ SET UPDATECALC OFF; /* выключаем расчет по грязным блокам*/ |
Выгрузка в файл — Бизнес-правило в Essbase/Calc Manager
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/******************** Настройки ********************/ %STD_HEADER(); SET MSG NONE; SET CREATENONMISSINGBLK OFF; SET DATAEXPORTOPTIONS { DATAEXPORTCOLFORMAT ON; DataExportDynamicCalc OFF; DataExportLevel LEVEL0; DATAEXPORTOVERWRITEFILE ON; }; FIX(срез данных) FIX("BegBalance","Q1", "Q2", "Q3", "Q4") DATAEXPORT "File" ";" "/hyp/hyperion11/products/Essbase/EssbaseServer/app/DataExport/PL_2015_DATA.csv" "NULL"; ENDFIX ENDFIX |
Выгрузка 1 точки в Oracle
Запуск данного правила запустит триггер на событие инсерта в таблицу. Триггер обратиться через внешнюю таблицу к файлу PL_2015_DATA.csv.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/******************** Настройки ********************/ %STD_HEADER(); SET MSG NONE; SET CREATENONMISSINGBLK OFF; SET DATAEXPORTOPTIONS { DATAEXPORTCOLFORMAT ON; DataExportDynamicCalc OFF; DataExportLevel LEVEL0; }; FIX(срез данных) FIX("BegBalance","Q1","Q2", "Q3", "Q4") DATAEXPORT "DSN" "HPL11" "PL_DATA_CLEAR" "h11_pl_2016" "h11_pl_2016"; ENDFIX ENDFIX |
Leave a Reply