# parseIndicator **Repository Path**: kungraph/parseIndicator ## Basic Information - **Project Name**: parseIndicator - **Description**: 根据指标配置表,进行指标加工语句的解析。 - **Primary Language**: Java - **License**: MIT - **Default Branch**: object - **Homepage**: https://fan-xin.cn - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2024-08-06 - **Last Updated**: 2024-08-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # parseIndicator ## 介绍 通过JDBC连接ADB集群,使用Maxcompute的odps客户端连接MC,按照指标加工的配置信息,生成基础指标的当期值加工语句,并加工至ADB的中间表 ,然后基于中间表进行衍生值、汇总值的计算,并能根据制定的计算指标计算公式,生成计算指标的多种计算类型加工语句。 ## 特性 ### 定制化报错提醒 ### 衍生值语句生成 ### 多种计算类型支持 ### 多维指标加工语句生成 ### 指标池纳管支持 若原本的来源表本身就具有指标池公共指标结果表的所有维度字段,支持通过指定指标类型为"MSS"对指标搬迁,编码统一由公共指标池管理,实现指标的统一出口。 ### 1. 进行指标配置检测,并返回定制化错误提示; 2. 自动识别指标类型,并生成不同类型的指标加工语句; 3. 自动判断指标的时间类型,并生成日、月两种不同指标的加工语句; 4. 根据ETL配置的映射关系,自动生成多维指标的加工语句。 5. 生成加工基础指标的语句同时,自动生成所有依赖该基础指标的计算指标加工语句,连带调度。 ## 使用方式 ```shell script java -jar parseIndicator.jar 配置文件路径 指标编码 账期 解析模式 ``` ### 解析模式: 1. 解析配置文件生成当前账期SQL查询语句 (MC加工当期值,以文件形式导入adb的中间表) 2. 解析配置文件生成当前账期SQL查询语句(adb加工当期值,直接插入adb的中间表) 3. 依赖指标中间表本身具备的当期值,生成带有衍生值的SQL查询语句(带有 INSERT INTO) ## 附录 ### 本地MySQL测试表 ## 单维指标日表中间表 ### 建表语句 ```sql create table `dm_d_kpi_al_comp_s_mid` ( `date_id` varchar(8) default null comment '账期', `month_id` varchar(6) default null comment '月份', `day_id` varchar(2) default null comment '日期', `prov_id` varchar(3) default null comment '省份编码', `area_id` varchar(100) default null comment '地市', `kpi_code` varchar(100) not null comment '指标编码', `kpi_value` decimal(54,18) default null comment '指标值', primary key (`kpi_code`), key `dm_d_kpi_al_comp_mid_month_id_idx` (`month_id`,`day_id`,`prov_id`,`area_id`,`kpi_code`) using btree ) engine=innodb default charset=utf8mb4 comment='单维指标日表中间表'; ``` ## 单维指标日表结果表 ### 建表语句 ```sql CREATE TABLE DM_D_KPI_AL_COMP_S ( DATE_ID VARCHAR(8) COMMENT '账期' , MONTH_ID VARCHAR(6) COMMENT '月份', DAY_ID VARCHAR(2) COMMENT '日期', PROV_ID VARCHAR(10) COMMENT '省份' , AREA_ID VARCHAR(100) COMMENT '地市' , KPI_CODE VARCHAR(100) COMMENT '指标编码' , KPI_VALUE decimal(54,18) COMMENT '当日值' , D_LD_VALUE decimal(54,18) COMMENT '昨日值' , M_TM_VALUE decimal(54,18) COMMENT '本月累计值' , D_LM_VALUE decimal(54,18) COMMENT '上月同期值' , M_LM_VALUE decimal(54,18) COMMENT '上月同期累计值' , D_LY_VALUE decimal(54,18) COMMENT '去年同期值' , M_LY_VALUE decimal(54,18) COMMENT '去年同期累计值' , M_DA_VALUE decimal(54,18) COMMENT '本月日均' , M_LDA_VALUE decimal(54,18) COMMENT '上月日均' , PRIMARY KEY (`KPI_CODE`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='单维指标日表结果表' ; ``` ### 插入语句 ## 月指标中间表、结果表 ### 建表语句 ```sql CREATE TABLE DM_M_KPI_AL_COMP_S_MID( MONTH_ID VARCHAR(6) COMMENT '月份' , PROV_ID VARCHAR(10) COMMENT '省份' , AREA_ID VARCHAR(10) COMMENT '地市' , KPI_CODE VARCHAR(100) COMMENT '指标编码' , KPI_VALUE decimal(54,18) COMMENT '当月值' , KEY INDEX_MONTH_ID(MONTH_ID), KEY INDEX_PROV_ID(PROV_ID), KEY INDEX_AREA_ID(AREA_ID), KEY INDEX_KPI_CODE(KPI_CODE), PRIMARY KEY (`MONTH_ID`,`PROV_ID`,`AREA_ID`,`KPI_CODE`) ) COMMENT='单维指标月表中间表' ; CREATE TABLE DM_M_KPI_AL_COMP_S( MONTH_ID VARCHAR(6) COMMENT '月份' , PROV_ID VARCHAR(10) COMMENT '省份' , AREA_ID VARCHAR(10) COMMENT '地市' , KPI_CODE VARCHAR(100) COMMENT '指标编码' , KPI_VALUE decimal(54,18) COMMENT '当月值' , M_LM_VALUE decimal(54,18) COMMENT '上月值' , Y_TY_VALUE decimal(54,18) COMMENT '本年累计值' , M_LY_VALUE decimal(54,18) COMMENT '上年同期值' , Y_LY_VALUE decimal(54,18) COMMENT '上年同期年累计值' , M_LY12_VALUE decimal(54,18) COMMENT '上年12月值' , KEY INDEX_MONTH_ID(MONTH_ID), KEY INDEX_PROV_ID(PROV_ID), KEY INDEX_AREA_ID(AREA_ID), KEY INDEX_KPI_CODE(KPI_CODE), PRIMARY KEY (`MONTH_ID`,`PROV_ID`,`AREA_ID`,`KPI_CODE`) ) COMMENT='单维指标月表结果表' ; ``` ## 指标结果表字段映射表 ### 建表语句 ```sql CREATE TABLE DIM_ENTITY_ETL ( DST_ENTITY_NAME VARCHAR(100) COMMENT '目标表名称' , DST_COLUMN VARCHAR(100) COMMENT '目标表字段' , SRC_ENTITY_NAME VARCHAR(100) COMMENT '来源表名称' , SRC_COLUMN VARCHAR(100) COMMENT '来源表字段' , ORD1 VARCHAR(100) COMMENT '排序' , DIM1 VARCHAR(100) COMMENT '预留字段1' , DIM2 VARCHAR(100) COMMENT '预留字段2' , constraint main_key primary key(`DST_ENTITY_NAME`,`DST_COLUMN`,`SRC_ENTITY_NAME`,`SRC_COLUMN`,`ORD1`,`DIM1`,`DIM2`) ) COMMENT='指标结果表字段映射表' ; ``` ### 插入语句 ```sql INSERT INTO `jf_log`.`dim_entity_etl` (`DST_ENTITY_NAME`, `DST_COLUMN`, `SRC_ENTITY_NAME`, `SRC_COLUMN`, `ORD1`, `DIM1`, `DIM2`) VALUES ('DM_KPI_COMP_SINGLE_M', 'DIM6', 'DM_C_M_DEV_NM_BASE', '', '9', '', ''); INSERT INTO `jf_log`.`dim_entity_etl` (`DST_ENTITY_NAME`, `DST_COLUMN`, `SRC_ENTITY_NAME`, `SRC_COLUMN`, `ORD1`, `DIM1`, `DIM2`) VALUES ('DM_KPI_COMP_SINGLE_M', 'DIM5', 'DM_C_M_DEV_NM_BASE', '', '8', '', ''); INSERT INTO `jf_log`.`dim_entity_etl` (`DST_ENTITY_NAME`, `DST_COLUMN`, `SRC_ENTITY_NAME`, `SRC_COLUMN`, `ORD1`, `DIM1`, `DIM2`) VALUES ('DM_KPI_COMP_SINGLE_M', 'DIM2', 'DM_C_M_DEV_NM_BASE', '', '5', '', ''); INSERT INTO `jf_log`.`dim_entity_etl` (`DST_ENTITY_NAME`, `DST_COLUMN`, `SRC_ENTITY_NAME`, `SRC_COLUMN`, `ORD1`, `DIM1`, `DIM2`) VALUES ('DM_KPI_COMP_SINGLE_M', 'DIM1', 'DM_C_M_DEV_NM_BASE', '', '4', '', ''); INSERT INTO `jf_log`.`dim_entity_etl` (`DST_ENTITY_NAME`, `DST_COLUMN`, `SRC_ENTITY_NAME`, `SRC_COLUMN`, `ORD1`, `DIM1`, `DIM2`) VALUES ('DM_KPI_COMP_SINGLE_M', 'AREA_NO', 'DM_C_M_DEV_NM_BASE', 'AREA_ID', '3', '', ''); INSERT INTO `jf_log`.`dim_entity_etl` (`DST_ENTITY_NAME`, `DST_COLUMN`, `SRC_ENTITY_NAME`, `SRC_COLUMN`, `ORD1`, `DIM1`, `DIM2`) VALUES ('DM_KPI_COMP_SINGLE_M', 'MONTH_ID', 'DM_C_M_DEV_NM_BASE', 'MONTH_ID', '1', 'MONTH_ID,1', ''); INSERT INTO `jf_log`.`dim_entity_etl` (`DST_ENTITY_NAME`, `DST_COLUMN`, `SRC_ENTITY_NAME`, `SRC_COLUMN`, `ORD1`, `DIM1`, `DIM2`) VALUES ('DM_KPI_COMP_SINGLE_M', 'DIM4', 'DM_C_M_DEV_NM_BASE', '', '7', '', ''); INSERT INTO `jf_log`.`dim_entity_etl` (`DST_ENTITY_NAME`, `DST_COLUMN`, `SRC_ENTITY_NAME`, `SRC_COLUMN`, `ORD1`, `DIM1`, `DIM2`) VALUES ('DM_KPI_COMP_SINGLE_M', 'DIM3', 'DM_C_M_DEV_NM_BASE', '', '6', '', ''); INSERT INTO `jf_log`.`dim_entity_etl` (`DST_ENTITY_NAME`, `DST_COLUMN`, `SRC_ENTITY_NAME`, `SRC_COLUMN`, `ORD1`, `DIM1`, `DIM2`) VALUES ('DM_KPI_COMP_SINGLE_M', 'PROV_ID', 'DM_C_M_DEV_NM_BASE', 'PROV_ID', '2', '', ''); ``` ## 指标配置表 ### 建表语句 ```sql CREATE TABLE DIM_COMP_KPI ( KPI_CODE VARCHAR(200) COMMENT '指标编码' , KPI_NAME VARCHAR(1000) COMMENT '指标名称' , COMP_KPI_DATA_TYPE VARCHAR(100) COMMENT '指标时间粒度' , SRC_DATE_CYCLE_COL VARCHAR(100) COMMENT '来源表账期字段' , SRC_PROV_COL VARCHAR(100) COMMENT '来源表省份字段' , SRC_AREA_COL VARCHAR(100) COMMENT '来源表地域字段' , DST_ENTITY_OWNER VARCHAR(100) COMMENT '目标表属主' , DST_ENTITY_NAME VARCHAR(100) COMMENT '目标表名称' , SRC_ENTITY_OWNER VARCHAR(100) COMMENT '来源表属主' , SRC_ENTITY_NAME VARCHAR(100) COMMENT '来源表名称' , COMP_KPI_TYPE VARCHAR(100) COMMENT '指标类型' , KPI_BATCH VARCHAR(100) COMMENT '指标批次' , IS_VALID VARCHAR(100) COMMENT '是否有效' , IS_SUM VARCHAR(100) COMMENT '是否时间维度汇总(1-是 0-否)' , SRC_VALUE_COL VARCHAR(1000) COMMENT '指标来源字段' , IS_AREA_SUM VARCHAR(100) COMMENT '是否地域维度汇总(1-是 0-否)' , UNIT_DESC VARCHAR(300) COMMENT '单位' , EDITOR VARCHAR(40) NOT NULL COMMENT '指标添加者' , CHANGE_TIME VARCHAR(40) COMMENT '指标配置或更改时间' , KPI_EXPLAIN text COMMENT '指标口径解释' , COMP_KPI_CLASS VARCHAR(20) COMMENT '指标分类' , KPI_OWNER VARCHAR(100) NOT NULL COMMENT '指标归属:AI 亚信,HH 和鸿,NJ 南京院,GX 国信' , COL_OPER1 text COMMENT '条件1' , COL_OPER2 text COMMENT '条件2' , COL_OPER3 text COMMENT '条件3' , COL_OPER4 text COMMENT '条件4' , COL_OPER5 text COMMENT '条件5' , COL_OPER6 text COMMENT '条件6' , COL_OPER7 text COMMENT '条件7' , COL_OPER8 text COMMENT '条件8' , COL_OPER9 text COMMENT '条件9' , IS_SUPPORT_SUPER VARCHAR(500) COMMENT '是否支撑超级维度' , PRIMARY KEY (`KPI_CODE`) ) COMMENT='指标配置表' ; ```