全面风险管理数据集市(信用+市场+流动性)笔记
一、当前技术现状与核心技术问题分析
1.1 现有架构技术痛点
- 多风险域数据孤岛:信贷、资金同业、债券、头寸、压力测试数据分散在信贷核心、ALM、资金交易、风控引擎多套源系统,无统一标准主键、编码字典,跨风险指标关联需要大量临时清洗脚本
- 计量模型底层无标准化DWD层支撑:KMV违约概率、DCF减值测算逻辑散落在调度脚本中,无统一明细存储,模型迭代、重算、溯源困难,监管审计缺少底层明细依据
- 监管指标重复计算,性能损耗严重:LCR、NSFR、单一对手集中度、压力测试损失等指标直接关联ODS原始表计算,每日全量扫描海量明细,调度时长超4小时,高峰期集群资源抢占严重
- 分层边界模糊,缺少强制必选表约束:早期集市未定义DIM/ODS/DWD/DWS/ADS分层规范,业务人员随意建中间临时表,数据血缘断裂,指标口径不统一
- 缺少统一调度执行链路规范:计量、汇总、监管报表无固定执行顺序,经常出现DWD明细未跑完直接执行ADS报表,导致指标空值、口径失真
- 压力测试场景数据无独立存储分层:压力测算中间结果混在日常业务明细中,基准情景、轻度/中度/重度压力数据无法隔离对比分析
1.2 数据质量类技术问题
- 维度编码未统一翻译,报表直接输出编码无中文名称,监管报送、BI大屏展示需要重复关联维表
- 金额、比率字段缺少值域校验,出现负数、无穷大、空值异常,未前置过滤
- 分区管理混乱,部分业务表未使用dt日分区,采用全量表存储,历史数据清理成本高
- 所有表字段注释不全,新增开发人员无法快速理解字段业务含义,维护成本高
1.3 运维与审计技术问题
- KMV、DCF计量过程无完整明细落地,监管现场检查无法提供逐笔测算原始依据
- 集中度风险敞口计算逻辑分散,无法一键回溯单笔贷款/同业业务对单一对手总敞口贡献
- NSFR、LCR折算权重硬编码在SQL脚本中,参数调整需要全量修改所有加载脚本,版本管控混乱
二、风险集市完整应用业务场景及落地案例
2.1 信用风险业务场景
2.1.1 零售客户全生命周期风险监控
- 业务描述:覆盖贷前准入、贷中预警、贷后催收全流程,基于客户风险宽表输出客户分层、风险标签、预警名单
- 业务示例:
plaintext
【BI大屏展示示意图】
┌─────────────────────────────────────────────────────────────┐
│ 零售客户信用风险监控首页 │
│ ├─整体指标:存量客户120万、逾期率1.23%、不良率0.41% │
│ ├─风险分层分布:低风险86%、中风险11%、高风险3% │
│ ├─预警客户TOP10机构排行(逾期环比上升超20%标红预警) │
│ └─明细下钻:客户ID、姓名、逾期笔数、最大逾期天数、风险处置建议 │
└─────────────────────────────────────────────────────────────┘
依赖核心必选表:dws_risk_cust_day_wide_d、ads_risk_cust_level_d、dwd_risk_overdue_detail_d
2.1.2 对公客户 KMV 违约概率计量与授信管控
业务描述:上市对公客户每日通过 KMV 模型计算违约距离 DD、预期违约概率 PD,用于授信额度调整、客户风险评级、大额授信审批
业务示例:
plaintext
【对公授信计量报表示意图】
┌─────────────────────────────────────────────────────────────┐
│ 上市企业KMV违约概率计量日报 │
│ 统计日期:2026-06-30 │
│ ┌──────┬────────┬────────┬────────┬────────┬────────┐ │
│ │企业ID │企业名称 │资产波动率 │违约距离DD │PD违约概率 │风险等级│
│ ├──────┼────────┼────────┼────────┼────────┼────────┤ │
│ │C00123 │XX制造集团 │0.3215 │2.1568 │0.0135 │中风险 │
│ │C00456 │XX房地产 │0.5689 │0.8921 │0.0762 │高风险 │
│ └──────┴────────┴────────┴────────┴────────┴────────┘ │
│ 风险管控规则:PD>0.05自动推送授信压降预警至对公客户经理 │
└─────────────────────────────────────────────────────────────┘
依赖核心必选表:dwd_credit_kmv_measure_d、ads_counterparty_concentration_risk_d
2.1.3 IFRS9 三阶段 DCF 预期信用损失 ECL 减值计提
业务描述:每日基于贷款现金流折现测算减值金额,区分 1/2/3 减值阶段,满足财务核算、监管资本计量报送要求
业务示例:
plaintext
【ECL减值监管报送表示意图】
┌─────────────────────────────────────────────────────────────┐
│ 全行贷款预期信用损失ECL汇总报表 │
│ 统计日期:2026-06-30 币种:CNY │
│ 减值阶段 │贷款笔数 │账面余额(万元) │ECL减值总额(万元) │减值率 │
│ 阶段1(正常) │98620 │12685400 │32650 │0.0026 │
│ 阶段2(关注) │6245 │862300 │21560 │0.0250 │
│ 阶段3(不良) │1260 │156800 │98620 │0.6290 │
└─────────────────────────────────────────────────────────────┘
依赖核心必选表:dwd_credit_dcf_impair_d
2.2 市场风险业务场景
2.2.1 债券持仓估值与 VaR 风险价值监控
业务描述:每日债券持仓市值、浮盈浮亏计算,计量市场风险潜在损失,监控高风险低评级债券持仓占比
业务示例:
plaintext
【债券市场风险监控大屏示意图】
┌─────────────────────────────────────────────────────────────┐
│ 资金业务市场风险总览 │
│ 当日债券总市值:562.86亿元 当日总浮亏:-1260.32万元 │
│ 高评级债券占比:78.62% 低评级债券占比:21.38% │
│ 当日VaR风险损失上限:2680万元 │
│ 预警项:3笔AA-评级债券持仓超单一债券限额标黄提示 │
└─────────────────────────────────────────────────────────────┘
依赖核心必选表:dwd_mkt_bond_hold_d、dws_mkt_risk_day_wide_d、ads_mkt_risk_monitor_d
2.2.2 利率 / 汇率敞口风险计量监控
业务描述:分重定价区间统计利率敏感资产负债,计算净缺口;统计外汇即期、远期净敞口,监控汇率波动风险
2.3 流动性风险业务场景
2.3.1 LCR 流动性覆盖率日间监控与监管报送
业务描述:基于 30 天现金流缺口、优质流动性资产 HQLA 计算 LCR,低于 100% 自动触发流动性预警
2.3.2 NSFR 净稳定资金比率长期流动性结构管控
业务描述:分存款、同业、贷款资产折算可用 / 所需稳定资金,监控中长期资产负债期限错配风险
业务示例:
```plaintext
【NSFR监管报表示意图】
┌─────────────────────────────────────────────────────────────┐
│ NSFR净稳定资金比率监管日报 │
│ 统计日期:2026-06-30 全行汇总币种CNY │
│ 可用稳定资金RSF总额:4268.65亿元 │
│ 所需稳定资金ASF总额:3862.15亿元 │
│ NSFR指标值:110.53% >监管阈值100% 状态正常 │
│ 细分项:稳定存款折算RSF 3126亿;中长期贷款占用ASF 2685亿 │
└─────────────────────────────────────────────────────────────┘
依赖核心必选表:dws_liquid_risk_day_wide_d、ads_liquid_nsfr_reg_report_d
2.3.3 全行资金日终头寸与日间流动性缺口监控
业务描述:实时统计当日资金流入流出、央行备付金,监控备付率充足性,预防日间挤兑风险
2.4 交易对手集中度风险业务场景
业务描述:汇总单一对手贷款、同业、债券全部风险暴露,对比单一授信限额,监控大额对手集中度超限风险
业务示例:
plaintext
【单一对手集中度风险预警清单示意图】
┌─────────────────────────────────────────────────────────────┐
│ 集中度风险超限预警清单 统计日期:2026-06-30 │
│ 对手名称:XX城市商业银行 对手类型:银行同业 │
│ 总风险暴露:86.25亿元 单一授信限额:100亿元 │
│ 敞口占限额比例:86.25% 预警等级:黄色预警 │
│ 风险构成:同业存放52亿、债券投资34.25亿 │
│ 处置建议:新增其他同业分散交易、缩减存放业务规模 │
└─────────────────────────────────────────────────────────────┘
依赖核心必选表:dim_counterparty_info、ads_counterparty_concentration_risk_d
2.5 压力测试统一业务场景
2.5.1 多情景综合压力测算(信用 / 市场 / 流动性)
业务描述:设置轻度经济下行、重度衰退、利率大幅上行、流动性挤兑四类场景,测算压力下总损失、LCR/NSFR 承压水平、资本缓冲剩余额度
业务示例:
plaintext
【压力测试汇总报表示意图】
┌─────────────────────────────────────────────────────────────┐
│ 全行综合压力测试汇总表 测算日期:2026-06-30 │
│ 压力场景:重度经济下行 测试类型:信用+流动性综合压力 │
│ 基准情景总资产:1.62万亿 压力情景预计总损失:126.85亿元 │
│ 压力下最低LCR:92.65% 低于监管阈值触发红色预警 │
│ 压力后剩余资本缓冲:68.23亿元,需启动流动性缓释预案 │
└─────────────────────────────────────────────────────────────┘
依赖核心必选表:ads_risk_stress_test_report_d
三、风险集市全套标准初始化建表完整代码
sql
-- ==============================================
-- 全局Hive参数配置
-- ==============================================
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
SET parquet.compression=snappy;
SET hive.mapred.mode=nonstrict;
SET hive.exec.parallel=true;
-- 创建风险集市总库
CREATE DATABASE IF NOT EXISTS risk_mart
COMMENT '全面风险管理数据集市(信用+市场+流动性风险,含监管计量、压力测试、集中度)'
LOCATION '/warehouse/risk_mart';
USE risk_mart;
-- 创建分层子数据库
CREATE DATABASE IF NOT EXISTS risk_mart.dim COMMENT '维度层:公共基础维度表';
CREATE DATABASE IF NOT EXISTS risk_mart.ods COMMENT '原始接入层:各业务系统日快照原始数据';
CREATE DATABASE IF NOT EXISTS risk_mart.dwd COMMENT '明细清洗层:标准化明细、KMV/DCF计量底层表';
CREATE DATABASE IF NOT EXISTS risk_mart.dws COMMENT '汇总宽表层:多维度聚合宽表,指标预计算';
CREATE DATABASE IF NOT EXISTS risk_mart.ads COMMENT '应用报表层:监管报送、监控大屏、NSFR/压力测试/集中度报表';
-- ==============================================
-- 一、DIM维度层【全局依赖必选维表,全量无分区】
-- ==============================================
USE risk_mart.dim;
-- 1.公共日期维度表
DROP TABLE IF EXISTS dim_date;
CREATE TABLE dim_date (
dt STRING COMMENT '业务日期,格式yyyy-MM-dd',
year INT COMMENT '年份',
month INT COMMENT '月份1-12',
week_of_year INT COMMENT '年度周次',
week_day INT COMMENT '星期1~7,1代表周一',
quarter INT COMMENT '季度1/2/3/4',
is_workday TINYINT COMMENT '是否工作日:1工作日,0节假日',
month_first_dt STRING COMMENT '当月第一天日期',
month_last_dt STRING COMMENT '当月最后一天日期',
year_month STRING COMMENT '年月标识,格式yyyy-MM'
) COMMENT '公共日期维度表,全集市报表日期关联基础'
STORED AS PARQUET
TBLPROPERTIES ('parquet.compression'='snappy');
-- 2.全行机构维度表
DROP TABLE IF EXISTS dim_org_info;
CREATE TABLE dim_org_info (
org_id STRING COMMENT '机构唯一编码',
org_name STRING COMMENT '机构全称',
parent_org_id STRING COMMENT '上级机构编码',
org_level TINYINT COMMENT '机构层级:1总行/2分行/3支行/4资金部',
org_type STRING COMMENT '机构类型:总行/分行/支行/同业资金中心/信贷部',
region_code STRING COMMENT '所属地区行政编码',
region_name STRING COMMENT '所属地区名称',
valid_flag TINYINT COMMENT '有效标识:1有效,0已注销停用',
create_dt STRING COMMENT '机构建档日期',
update_dt STRING COMMENT '信息最后更新日期'
) COMMENT '全行组织架构机构维度表'
STORED AS PARQUET;
-- 3.全品类金融产品维度表
DROP TABLE IF EXISTS dim_product_info;
CREATE TABLE dim_product_info (
product_id STRING COMMENT '产品唯一编码',
product_name STRING COMMENT '产品全称',
product_main_type STRING COMMENT '产品大类:信贷/同业/债券/外汇/存款',
product_sub_type STRING COMMENT '细分产品品种',
risk_belong_type STRING COMMENT '归属风险分类:信用风险/市场风险/流动性风险',
currency STRING COMMENT '计价币种:CNY人民币/USD美元/EUR欧元',
valid_flag TINYINT COMMENT '产品有效标识:1在用,0下线停用'
) COMMENT '信贷、资金、同业、债券统一产品维度'
STORED AS PARQUET;
-- 4.风险通用字典维度表
DROP TABLE IF EXISTS dim_risk_dict;
CREATE TABLE dim_risk_dict (
dict_type STRING COMMENT '字典分类编码:risk_level/overdue_class/liquidity_type/rate_type/stress_scene',
dict_code STRING COMMENT '字典项编码值',
dict_name STRING COMMENT '字典项中文名称',
dict_sort INT COMMENT '展示排序序号',
remark STRING COMMENT '字典业务说明'
) COMMENT '风险指标统一码值字典(逾期分类、风险等级、压力场景、流动性分类)'
STORED AS PARQUET;
-- 5.交易对手维度(同业机构、债券发行人、授信客户对手)
DROP TABLE IF EXISTS dim_counterparty_info;
CREATE TABLE dim_counterparty_info (
cp_id STRING COMMENT '交易对手唯一ID',
cp_full_name STRING COMMENT '对手方完整名称',
cp_type STRING COMMENT '对手类型:银行/券商/企业客户/央行/非银金融机构',
external_credit_rating STRING COMMENT '外部主体信用评级',
country_code STRING COMMENT '注册国别编码',
country_name STRING COMMENT '注册国家名称',
single_limit_amt DECIMAL(22,2) COMMENT '单一对手授信总限额',
valid_flag TINYINT COMMENT '对手信息有效标识:1有效,0失效'
) COMMENT '资金同业、债券、授信业务交易对手维度(集中度风险依赖)'
STORED AS PARQUET;
-- ==============================================
-- 二、ODS原始接入层 所有业务源系统落地必选日分区表
-- ==============================================
USE risk_mart.ods;
-- ------------------------------
-- 2.1 信用风险原始源表
-- ------------------------------
DROP TABLE IF EXISTS ods_cust_base_d;
CREATE TABLE ods_cust_base_d (
cust_id STRING COMMENT '客户唯一编号',
cust_name STRING COMMENT '客户姓名',
cert_type STRING COMMENT '证件类型',
cert_no STRING COMMENT '加密证件号码',
gender STRING COMMENT '性别',
age INT COMMENT '客户年龄',
mobile STRING COMMENT '加密手机号',
income_level STRING COMMENT '收入层级编码',
marr_status STRING COMMENT '婚姻状态编码',
work_unit STRING COMMENT '工作单位名称',
src_sys_code STRING COMMENT '数据来源系统编码'
) COMMENT '零售客户基础信息日快照原始表'
PARTITIONED BY (dt STRING COMMENT '业务数据日期') STORED AS PARQUET;
DROP TABLE IF EXISTS ods_loan_contract_d;
CREATE TABLE ods_loan_contract_d (
loan_id STRING COMMENT '贷款合同编号',
cust_id STRING COMMENT '客户编号',
product_id STRING COMMENT '信贷产品编码',
org_id STRING COMMENT '经办机构编码',
loan_origin_amt DECIMAL(18,2) COMMENT '原始放款金额',
total_term_month INT COMMENT '贷款总期限月数',
exec_annual_rate DECIMAL(10,4) COMMENT '合同执行年利率',
loan_start_dt STRING COMMENT '放款起始日期',
loan_end_dt STRING COMMENT '贷款到期日期',
repay_mode STRING COMMENT '还款方式编码',
contract_status STRING COMMENT '合同状态:正常/逾期/结清/核销',
src_sys_code STRING COMMENT '来源信贷系统编码'
) COMMENT '全行贷款合同日快照原始表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS ods_overdue_detail_d;
CREATE TABLE ods_overdue_detail_d (
overdue_serial_id STRING COMMENT '逾期流水唯一编号',
loan_id STRING COMMENT '关联贷款合同号',
repay_plan_id STRING COMMENT '还款计划明细编号',
overdue_principal DECIMAL(18,2) COMMENT '逾期本金金额',
overdue_interest DECIMAL(18,2) COMMENT '逾期利息金额',
overdue_days INT COMMENT '当前逾期天数',
five_class_code STRING COMMENT '贷款五级分类编码',
overdue_begin_dt STRING COMMENT '逾期发生起始日期',
src_sys_code STRING COMMENT '信贷核心系统编码'
) COMMENT '贷款逾期明细原始流水表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS ods_risk_rule_log_d;
CREATE TABLE ods_risk_rule_log_d (
hit_serial_id STRING COMMENT '规则命中流水号',
cust_id STRING COMMENT '客户编号',
loan_id STRING COMMENT '贷款合同号',
rule_id STRING COMMENT '风控规则编码',
hit_result_code STRING COMMENT '命中结果:拦截/预警/通过',
hit_time STRING COMMENT '规则触发时间',
hit_desc STRING COMMENT '命中原因文字描述',
src_sys_code STRING COMMENT '风控引擎系统编码'
) COMMENT '贷前贷中风控规则命中日志原始表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- ------------------------------
-- 2.2 市场风险原始源表
-- ------------------------------
DROP TABLE IF EXISTS ods_bond_hold_d;
CREATE TABLE ods_bond_hold_d (
bond_code STRING COMMENT '债券代码',
cp_id STRING COMMENT '债券发行对手ID',
hold_face_value DECIMAL(20,2) COMMENT '债券持仓面值总额',
market_value DECIMAL(20,2) COMMENT '当日债券市值',
coupon_year_rate DECIMAL(10,4) COMMENT '票面年利率',
bond_maturity_dt STRING COMMENT '债券到期日',
currency STRING COMMENT '债券计价币种',
book_account_type STRING COMMENT '记账分类:交易账户/可供出售/持有到期',
src_sys_code STRING COMMENT '资金交易系统编码'
) COMMENT '债券持仓日快照原始表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS ods_fx_exposure_d;
CREATE TABLE ods_fx_exposure_d (
exposure_id STRING COMMENT '外汇敞口流水号',
currency_pair_code STRING COMMENT '货币对编码,如USDCNY',
spot_net_exposure DECIMAL(20,2) COMMENT '即期净敞口金额',
forward_net_exposure DECIMAL(20,2) COMMENT '远期净敞口金额',
daily_close_price DECIMAL(12,6) COMMENT '当日外汇收盘价',
src_sys_code STRING COMMENT '外汇交易系统编码'
) COMMENT '外汇汇率风险敞口原始明细表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS ods_rate_gap_d;
CREATE TABLE ods_rate_gap_d (
gap_serial_id STRING COMMENT '利率缺口流水编号',
time_bucket_code STRING COMMENT '重定价区间编码:1M/3M/6M/1Y/3Y',
rate_sensitive_asset_amt DECIMAL(20,2) COMMENT '区间利率敏感资产总额',
rate_sensitive_liab_amt DECIMAL(20,2) COMMENT '区间利率敏感负债总额',
src_sys_code STRING COMMENT '资产负债管理系统编码'
) COMMENT '利率重定价缺口原始数据'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- ------------------------------
-- 2.3 流动性风险原始源表(头寸/同业/现金流/存款,NSFR底层数据源)
-- ------------------------------
DROP TABLE IF EXISTS ods_fund_position_d;
CREATE TABLE ods_fund_position_d (
position_serial_id STRING COMMENT '资金头寸流水号',
org_id STRING COMMENT '资金管理部门机构编码',
currency STRING COMMENT '币种',
daily_intraday_inflow DECIMAL(20,2) COMMENT '当日资金流入总额',
daily_intraday_outflow DECIMAL(20,2) COMMENT '当日资金流出总额',
daily_close_position DECIMAL(20,2) COMMENT '日终资金头寸余额',
interbank_deposit_balance DECIMAL(20,2) COMMENT '存放同业款项余额',
central_bank_reserve DECIMAL(20,2) COMMENT '央行法定+超额备付金余额',
src_sys_code STRING COMMENT '资金核心系统编码'
) COMMENT '全行日终资金头寸原始表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS ods_interbank_biz_d;
CREATE TABLE ods_interbank_biz_d (
inter_biz_id STRING COMMENT '同业业务合同编号',
cp_id STRING COMMENT '交易对手ID',
biz_type_code STRING COMMENT '同业业务类型:拆借/存放/回购/同业存单',
trade_amt DECIMAL(20,2) COMMENT '交易本金金额',
biz_term_day INT COMMENT '业务期限天数',
trade_interest_rate DECIMAL(10,4) COMMENT '成交年化利率',
trade_start_dt STRING COMMENT '业务起息日',
trade_maturity_dt STRING COMMENT '业务到期日',
currency STRING COMMENT '交易币种',
src_sys_code STRING COMMENT '同业交易系统编码'
) COMMENT '同业拆借、存放、回购、存单业务原始明细'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS ods_cash_flow_gap_d;
CREATE TABLE ods_cash_flow_gap_d (
bucket_code STRING COMMENT '现金流期限区间编码:T0/T7/T30/T90/T1Y',
period_cash_in DECIMAL(20,2) COMMENT '区间现金流入总额',
period_cash_out DECIMAL(20,2) COMMENT '区间现金流出总额',
src_sys_code STRING COMMENT '资产负债ALM系统编码'
) COMMENT '分期限现金流缺口原始数据(LCR/NSFR底层)'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS ods_deposit_stock_d;
CREATE TABLE ods_deposit_stock_d (
deposit_serial_id STRING COMMENT '存款台账流水号',
deposit_type_code STRING COMMENT '存款类型:活期/定期/同业存款/保证金',
stock_balance_amt DECIMAL(20,2) COMMENT '存款余额',
stable_deposit_flag TINYINT COMMENT '稳定存款标识:1稳定,0波动存款',
currency STRING COMMENT '存款币种',
src_sys_code STRING COMMENT '核心存款系统编码'
) COMMENT '全行存款存量日快照原始表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- ==============================================
-- 三、DWD明细清洗层(含新增KMV违约计量、DCF现金流折现计量子表)
-- ==============================================
USE risk_mart.dwd;
-- ------------------------------
-- 3.1 信用风险标准明细
-- ------------------------------
DROP TABLE IF EXISTS dwd_risk_cust_info_d;
CREATE TABLE dwd_risk_cust_info_d (
cust_id STRING COMMENT '客户唯一编号',
org_id STRING COMMENT '归属经办机构编码',
cust_name STRING COMMENT '客户姓名',
gender STRING COMMENT '性别',
age INT COMMENT '客户年龄',
income_level_name STRING COMMENT '收入层级中文名称',
marr_status_name STRING COMMENT '婚姻状态名称',
work_unit STRING COMMENT '工作单位'
) COMMENT '清洗标准化后客户风险基础明细'
PARTITIONED BY (dt STRING COMMENT '业务日期') STORED AS PARQUET;
DROP TABLE IF EXISTS dwd_risk_loan_detail_d;
CREATE TABLE dwd_risk_loan_detail_d (
cust_id STRING COMMENT '客户编号',
loan_id STRING COMMENT '贷款合同号',
org_id STRING COMMENT '经办机构编码',
product_id STRING COMMENT '信贷产品编码',
loan_balance_amt DECIMAL(18,2) COMMENT '贷款当前剩余本金余额',
total_term_month INT COMMENT '原始总期限月数',
remain_term_month INT COMMENT '剩余还款期限月数',
exec_annual_rate DECIMAL(10,4) COMMENT '执行年利率',
contract_status_name STRING COMMENT '合同状态中文名称',
five_class_name STRING COMMENT '贷款五级分类名称'
) COMMENT '标准化贷款风险明细事实表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS dwd_risk_overdue_detail_d;
CREATE TABLE dwd_risk_overdue_detail_d (
cust_id STRING COMMENT '客户编号',
loan_id STRING COMMENT '贷款合同编号',
org_id STRING COMMENT '经办机构编码',
product_id STRING COMMENT '信贷产品编码',
overdue_principal DECIMAL(18,2) COMMENT '逾期本金',
overdue_interest DECIMAL(18,2) COMMENT '逾期利息',
overdue_total_amt DECIMAL(18,2) COMMENT '逾期本息合计金额',
overdue_days INT COMMENT '当前逾期天数',
overdue_level_name STRING COMMENT '逾期分级M1/M2/M3+中文名称',
five_class_name STRING COMMENT '贷款五级分类名称',
overdue_begin_dt STRING COMMENT '逾期起始日期',
overdue_clear_dt STRING COMMENT '逾期结清日期,空代表未结清'
) COMMENT '清洗后逾期明细事实表,信用风险核心底层'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS dwd_risk_rule_hit_log_d;
CREATE TABLE dwd_risk_rule_hit_log_d (
hit_serial_id STRING COMMENT '规则命中流水号',
cust_id STRING COMMENT '客户编号',
loan_id STRING COMMENT '贷款合同号',
rule_id STRING COMMENT '风控规则编码',
rule_name STRING COMMENT '风控规则中文名称',
risk_type_name STRING COMMENT '规则所属风险类型:欺诈/信用/操作',
hit_result_name STRING COMMENT '命中结果中文:拦截/预警/通过',
hit_time STRING COMMENT '规则触发时间',
hit_desc STRING COMMENT '命中详细原因描述'
) COMMENT '标准化风控规则命中明细日志'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- ------------------------------
-- 3.2 【新增计量引擎子表1】DWD KMV违约概率计量明细
-- ------------------------------
DROP TABLE IF EXISTS dwd_credit_kmv_measure_d;
CREATE TABLE dwd_credit_kmv_measure_d (
cust_id STRING COMMENT '对公授信客户编号',
org_id STRING COMMENT '授信经办机构编码',
cp_id STRING COMMENT '对公交易对手ID',
stock_price DECIMAL(16,4) COMMENT '标的企业当日股价',
equity_value DECIMAL(22,2) COMMENT '企业股权价值',
debt_short_amt DECIMAL(22,2) COMMENT '短期债务总额',
debt_long_amt DECIMAL(22,2) COMMENT '长期债务总额',
asset_volatility DECIMAL(12,6) COMMENT '企业资产波动率',
distance_to_default DECIMAL(12,6) COMMENT '违约距离DD',
pd_prob DECIMAL(10,6) COMMENT 'KMV模型计算预期违约概率PD',
measure_dt STRING COMMENT '计量计算日期'
) COMMENT 'KMV信用风险计量明细子表,对公客户违约概率底层计算表'
PARTITIONED BY (dt STRING COMMENT '计量日期') STORED AS PARQUET;
-- ------------------------------
-- 3.3 【新增计量引擎子表2】DWD DCF现金流折现减值计量明细
-- ------------------------------
DROP TABLE IF EXISTS dwd_credit_dcf_impair_d;
CREATE TABLE dwd_credit_dcf_impair_d (
loan_id STRING COMMENT '贷款合同编号',
cust_id STRING COMMENT '客户编号',
org_id STRING COMMENT '经办机构编码',
stage_code STRING COMMENT '减值三阶段1/2/3',
future_cash_in_flow DECIMAL(22,2) COMMENT '未来合同现金流流入总额',
discount_rate DECIMAL(10,6) COMMENT '折现实际利率',
pv_cash_flow DECIMAL(22,2) COMMENT '现金流现值总额',
loan_carry_amt DECIMAL(22,2) COMMENT '贷款账面余额',
ecl_impair_amt DECIMAL(22,2) COMMENT '预期信用损失ECL减值金额',
measure_dt STRING COMMENT '减值计量日期'
) COMMENT 'DCF折现法贷款预期信用损失减值计量明细子表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- ------------------------------
-- 3.4 市场风险清洗明细
-- ------------------------------
DROP TABLE IF EXISTS dwd_mkt_bond_hold_d;
CREATE TABLE dwd_mkt_bond_hold_d (
bond_code STRING COMMENT '债券代码',
cp_id STRING COMMENT '发行对手ID',
org_id STRING COMMENT '资金管理机构编码',
product_id STRING COMMENT '债券产品编码',
currency STRING COMMENT '债券币种',
hold_face_total DECIMAL(20,2) COMMENT '持仓总面值',
market_value_total DECIMAL(20,2) COMMENT '当日总市值',
float_pl_amt DECIMAL(20,2) COMMENT '债券当日浮盈浮亏金额',
coupon_year_rate DECIMAL(10,4) COMMENT '票面年利率',
bond_maturity_dt STRING COMMENT '债券到期日',
book_account_name STRING COMMENT '记账账户类型中文名称',
cp_rating_code STRING COMMENT '发行主体外部评级编码',
cp_rating_name STRING COMMENT '发行主体外部评级中文名称'
) COMMENT '标准化债券持仓估值明细(市场风险VaR计算底层)'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS dwd_mkt_fx_exposure_d;
CREATE TABLE dwd_mkt_fx_exposure_d (
exposure_id STRING COMMENT '外汇敞口流水号',
currency_pair_code STRING COMMENT '货币对编码',
spot_net_amt DECIMAL(20,2) COMMENT '即期净敞口金额',
forward_net_amt DECIMAL(20,2) COMMENT '远期净敞口金额',
total_exposure_amt DECIMAL(20,2) COMMENT '合计总外汇敞口',
daily_close_price DECIMAL(12,6) COMMENT '当日收盘汇率',
var_potential_loss DECIMAL(20,2) COMMENT '汇率风险VaR潜在损失金额'
) COMMENT '标准化外汇汇率敞口明细'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS dwd_mkt_rate_gap_d;
CREATE TABLE dwd_mkt_rate_gap_d (
gap_serial_id STRING COMMENT '利率缺口流水号',
time_bucket_code STRING COMMENT '重定价区间编码',
time_bucket_name STRING COMMENT '区间中文名称1个月/3个月/1年',
rate_sensitive_asset DECIMAL(20,2) COMMENT '区间利率敏感资产总额',
rate_sensitive_liab DECIMAL(20,2) COMMENT '区间利率敏感负债总额',
net_gap_amt DECIMAL(20,2) COMMENT '区间净利率缺口金额',
rate_sens_ratio DECIMAL(10,4) COMMENT '利率敏感性资产负债占比'
) COMMENT '标准化利率重定价缺口明细'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- ------------------------------
-- 3.5 流动性风险清洗明细(NSFR计算底层)
-- ------------------------------
DROP TABLE IF EXISTS dwd_liquid_fund_position_d;
CREATE TABLE dwd_liquid_fund_position_d (
position_serial_id STRING COMMENT '头寸流水编号',
org_id STRING COMMENT '资金部门机构编码',
currency STRING COMMENT '币种',
daily_intraday_inflow DECIMAL(20,2) COMMENT '当日资金流入总额',
daily_intraday_outflow DECIMAL(20,2) COMMENT '当日资金流出总额',
net_daily_flow DECIMAL(20,2) COMMENT '当日资金净流量',
daily_close_position DECIMAL(20,2) COMMENT '日终头寸余额',
interbank_deposit_balance DECIMAL(20,2) COMMENT '存放同业余额',
central_bank_reserve DECIMAL(20,2) COMMENT '央行备付金余额',
reserve_ratio DECIMAL(10,4) COMMENT '当日超额备付率'
) COMMENT '标准化资金头寸清洗明细'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS dwd_liquid_interbank_biz_d;
CREATE TABLE dwd_liquid_interbank_biz_d (
inter_biz_id STRING COMMENT '同业业务合同编号',
cp_id STRING COMMENT '交易对手ID',
org_id STRING COMMENT '经办机构编码',
biz_type_name STRING COMMENT '同业业务类型中文名称',
trade_amt DECIMAL(20,2) COMMENT '交易本金金额',
biz_term_day INT COMMENT '业务期限天数',
trade_interest_rate DECIMAL(10,4) COMMENT '成交年化利率',
trade_start_dt STRING COMMENT '起息日期',
trade_maturity_dt STRING COMMENT '到期日期',
currency STRING COMMENT '交易币种',
cp_rating_name STRING COMMENT '对手外部评级名称',
liquid_level_name STRING COMMENT '资产流动性分层:高流动性/中流动性/低流动性'
) COMMENT '标准化同业业务明细(NSFR可用稳定资金计算依赖)'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS dwd_liquid_cash_flow_gap_d;
CREATE TABLE dwd_liquid_cash_flow_gap_d (
bucket_code STRING COMMENT '现金流区间编码',
bucket_name STRING COMMENT '区间中文名称T+0/T+7/T+30',
period_cash_in DECIMAL(20,2) COMMENT '区间现金流入总额',
period_cash_out DECIMAL(20,2) COMMENT '区间现金流出总额',
net_cash_gap_amt DECIMAL(20,2) COMMENT '区间净现金流缺口',
gap_ratio DECIMAL(10,4) COMMENT '现金流缺口占总资产比例'
) COMMENT '标准化分期限现金流缺口明细(LCR/NSFR共用底层)'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS dwd_liquid_deposit_stock_d;
CREATE TABLE dwd_liquid_deposit_stock_d (
deposit_serial_id STRING COMMENT '存款台账流水号',
org_id STRING COMMENT '存款经办机构编码',
deposit_type_name STRING COMMENT '存款类型中文名称',
stock_balance_amt DECIMAL(20,2) COMMENT '存款余额',
stable_deposit_flag TINYINT COMMENT '稳定存款标识1是0否',
currency STRING COMMENT '存款币种',
stable_weight_coeff DECIMAL(10,4) COMMENT 'NSFR稳定存款折算权重系数'
) COMMENT '标准化存款流动性明细(NSFR所需稳定资金来源底层)'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- ==============================================
-- 四、DWS汇总宽表层(预聚合宽表,ADS报表计算中间层)
-- ==============================================
USE risk_mart.dws;
-- 4.1 客户信用风险日汇总宽表
DROP TABLE IF EXISTS dws_risk_cust_day_wide_d;
CREATE TABLE dws_risk_cust_day_wide_d (
cust_id STRING COMMENT '客户编号',
org_id STRING COMMENT '归属机构编码',
total_loan_balance DECIMAL(18,2) COMMENT '客户全部贷款总余额',
overdue_loan_count INT COMMENT '逾期贷款笔数',
overdue_total_amt DECIMAL(18,2) COMMENT '客户当前逾期本息总额',
max_overdue_days INT COMMENT '客户最大单笔逾期天数',
worst_five_class_name STRING COMMENT '客户最差贷款五级分类',
daily_rule_hit_count INT COMMENT '当日风控规则命中总次数',
fraud_hit_30d_count INT COMMENT '近30天欺诈类规则命中次数',
credit_score INT COMMENT '客户综合信用评分',
cust_risk_level_name STRING COMMENT '客户综合风险等级:低/中/高/极高'
) COMMENT '零售客户信用风险日聚合宽表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- 4.2 全行逾期指标汇总宽表
DROP TABLE IF EXISTS dws_risk_overdue_stat_d;
CREATE TABLE dws_risk_overdue_stat_d (
stat_dim_type STRING COMMENT '汇总维度类型:机构/产品/客户层级',
stat_dim_id STRING COMMENT '对应维度编码',
total_cust_count BIGINT COMMENT '存量有效客户总数',
overdue_cust_count BIGINT COMMENT '逾期客户数量',
overdue_rate DECIMAL(10,4) COMMENT '客户逾期率',
total_loan_balance DECIMAL(20,2) COMMENT '维度内贷款总余额',
overdue_balance_amt DECIMAL(20,2) COMMENT '逾期贷款余额总额',
bad_balance_amt DECIMAL(20,2) COMMENT '不良贷款余额总额',
bad_rate DECIMAL(10,4) COMMENT '不良贷款率',
m1_overdue_amt DECIMAL(20,2) COMMENT 'M1短期逾期余额',
m2_overdue_amt DECIMAL(20,2) COMMENT 'M2中期逾期余额',
m3p_bad_amt DECIMAL(20,2) COMMENT 'M3+不良余额'
) COMMENT '多维度逾期、不良指标汇总宽表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- 4.3 市场风险全行日汇总宽表
DROP TABLE IF EXISTS dws_mkt_risk_day_wide_d;
CREATE TABLE dws_mkt_risk_day_wide_d (
org_id STRING COMMENT '资金管理机构编码',
total_bond_market_value DECIMAL(20,2) COMMENT '全行债券总市值',
total_var_loss_amt DECIMAL(20,2) COMMENT '当日市场风险VaR总潜在损失',
total_fx_net_exposure DECIMAL(20,2) COMMENT '全行外汇净敞口总额',
one_year_net_rate_gap DECIMAL(20,2) COMMENT '1年期内净利率缺口总额',
high_rating_bond_ratio DECIMAL(10,4) COMMENT '高评级债券持仓占比',
mkt_risk_level_name STRING COMMENT '当日市场风险综合等级'
) COMMENT '债券、汇率、利率风险合并汇总宽表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- 4.4 流动性风险汇总宽表(LCR、NSFR指标粗算中间层)
DROP TABLE IF EXISTS dws_liquid_risk_day_wide_d;
CREATE TABLE dws_liquid_risk_day_wide_d (
org_id STRING COMMENT '资金机构编码',
currency STRING COMMENT '币种',
daily_close_position DECIMAL(20,2) COMMENT '日终资金头寸余额',
central_bank_reserve_amt DECIMAL(20,2) COMMENT '央行备付金总额',
excess_reserve_ratio DECIMAL(10,4) COMMENT '超额备付率',
total_stable_deposit_amt DECIMAL(20,2) COMMENT '全行稳定存款总额',
hqla_total_amt DECIMAL(20,2) COMMENT '优质流动性资产HQLA总额',
thirty_day_net_cash_out DECIMAL(20,2) COMMENT '未来30天净现金流出总额(LCR分母)',
rough_lcr_ratio DECIMAL(10,4) COMMENT '流动性覆盖率粗算值',
rsf_total_amt DECIMAL(22,2) COMMENT '可用稳定资金总额(NSFR分子)',
asf_total_amt DECIMAL(22,2) COMMENT '所需稳定资金总额(NSFR分母)'
) COMMENT '流动性风险日汇总宽表,LCR、NSFR监管指标计算中间结果'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- ==============================================
-- 五、ADS应用报表层(新增NSFR、压力测试、交易对手集中度监管报表)
-- ==============================================
USE risk_mart.ads;
-- 5.1 原有信用风险应用报表
DROP TABLE IF EXISTS ads_risk_cust_level_d;
CREATE TABLE ads_risk_cust_level_d (
dt STRING COMMENT '统计日期',
cust_id STRING COMMENT '客户编号',
cust_name STRING COMMENT '客户姓名',
org_name STRING COMMENT '归属机构名称',
credit_score INT COMMENT '客户综合信用评分',
risk_level_name STRING COMMENT '客户综合风险等级',
risk_label_list ARRAY<STRING> COMMENT '客户风险标签数组',
warn_flag TINYINT COMMENT '预警标识1预警0正常',
risk_handle_suggest STRING COMMENT '风险处置操作建议'
) COMMENT '零售客户风险等级监控日报,BI大屏使用'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS ads_risk_overdue_monitor_d;
CREATE TABLE ads_risk_overdue_monitor_d (
dt STRING COMMENT '统计日期',
org_id STRING COMMENT '机构编码',
org_name STRING COMMENT '机构名称',
product_name STRING COMMENT '信贷产品名称',
total_cust_count BIGINT COMMENT '存量客户总数',
overdue_cust_count BIGINT COMMENT '逾期客户数量',
overdue_rate DECIMAL(10,4) COMMENT '客户逾期率',
bad_balance_amt DECIMAL(20,2) COMMENT '不良贷款余额',
bad_rate DECIMAL(10,4) COMMENT '不良贷款率',
overdue_chain_change_amt DECIMAL(20,2) COMMENT '逾期余额环比增减额',
warn_status_name STRING COMMENT '预警状态:正常/黄色预警/红色预警'
) COMMENT '全行逾期、不良监控大屏报表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- 5.2 原有市场风险监控报表
DROP TABLE IF EXISTS ads_mkt_risk_monitor_d;
CREATE TABLE ads_mkt_risk_monitor_d (
dt STRING COMMENT '统计日期',
org_name STRING COMMENT '资金部门机构名称',
total_var_loss DECIMAL(20,2) COMMENT '当日市场风险总VaR损失',
total_fx_risk_exposure DECIMAL(20,2) COMMENT '外汇总风险敞口',
one_year_rate_gap_amt DECIMAL(20,2) COMMENT '1年期利率净缺口',
bond_total_float_pl DECIMAL(20,2) COMMENT '债券持仓当日总浮盈浮亏',
mkt_risk_warn_flag TINYINT COMMENT '市场风险预警标识1预警0正常',
risk_control_suggest STRING COMMENT '市场风险管控操作建议'
) COMMENT '利率、汇率、债券市场风险监控日报'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- 5.3 原有LCR流动性覆盖率监管报表
DROP TABLE IF EXISTS ads_liquid_lcr_monitor_d;
CREATE TABLE ads_liquid_lcr_monitor_d (
dt STRING COMMENT '统计日期',
org_name STRING COMMENT '资金管理机构名称',
currency STRING COMMENT '统计币种',
hqla_total_amt DECIMAL(20,2) COMMENT '优质流动性资产总额',
thirty_day_net_cash_out DECIMAL(20,2) COMMENT '未来30天净现金流出总额',
lcr_ratio DECIMAL(10,4) COMMENT '流动性覆盖率监管指标正式值',
lcr_warn_flag TINYINT COMMENT 'LCR预警标识1低于监管阈值预警',
excess_reserve_ratio DECIMAL(10,4) COMMENT '当日超额备付率',
daily_intraday_fund_gap DECIMAL(20,2) COMMENT '日间资金最大缺口金额'
) COMMENT '流动性覆盖率LCR监管报送专用报表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
DROP TABLE IF EXISTS ads_liquid_daily_position_d;
CREATE TABLE ads_liquid_daily_position_d (
dt STRING COMMENT '统计日期',
org_name STRING COMMENT '资金部门名称',
currency STRING COMMENT '币种',
daily_total_inflow DECIMAL(20,2) COMMENT '当日资金总流入',
daily_total_outflow DECIMAL(20,2) COMMENT '当日资金总流出',
daily_close_position DECIMAL(20,2) COMMENT '日终资金头寸余额',
interbank_net_balance DECIMAL(20,2) COMMENT '同业往来净余额',
reserve_adequacy_flag TINYINT COMMENT '备付金充足标识1充足0不足'
) COMMENT '全行日终资金头寸监控大屏报表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- ------------------------------
-- 5.4 【新增ADS监管报表1】NSFR净稳定资金比率监管报表
-- ------------------------------
DROP TABLE IF EXISTS ads_liquid_nsfr_reg_report_d;
CREATE TABLE ads_liquid_nsfr_reg_report_d (
dt STRING COMMENT '报表统计日期',
org_name STRING COMMENT '汇总机构名称',
currency STRING COMMENT '统计币种',
total_rsf_amt DECIMAL(22,2) COMMENT '可用稳定资金RSF总额(NSFR分子)',
total_asf_amt DECIMAL(22,2) COMMENT '所需稳定资金ASF总额(NSFR分母)',
nsfr_ratio DECIMAL(10,4) COMMENT '净稳定资金比率监管指标正式值',
stable_deposit_rsf_amt DECIMAL(22,2) COMMENT '稳定存款折算可用稳定资金',
interbank_rsf_amt DECIMAL(22,2) COMMENT '同业负债折算可用稳定资金',
hqla_asf_amt DECIMAL(22,2) COMMENT '优质流动性资产所需稳定资金',
loan_long_asf_amt DECIMAL(22,2) COMMENT '中长期贷款所需稳定资金',
nsfr_warn_flag TINYINT COMMENT 'NSFR预警标识1低于监管标准预警',
reg_submit_flag TINYINT COMMENT '是否用于监管报送1是0否'
) COMMENT 'NSFR净稳定资金比率监管报送报表,流动性长期结构风险监控'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- ------------------------------
-- 5.5 【新增ADS监管报表2】全品类压力测试汇总报表(信用+市场+流动性)
-- ------------------------------
DROP TABLE IF EXISTS ads_risk_stress_test_report_d;
CREATE TABLE ads_risk_stress_test_report_d (
dt STRING COMMENT '压力测试执行日期',
stress_scene_code STRING COMMENT '压力场景编码',
stress_scene_name STRING COMMENT '压力场景中文名称:轻度/中度/重度经济下行、利率大幅上行、流动性挤兑',
risk_test_type STRING COMMENT '压力测试类型:信用风险/市场风险/流动性风险/综合压力',
org_name STRING COMMENT '测试覆盖机构名称',
original_balance_total DECIMAL(22,2) COMMENT '基准情景资产负债总额',
stress_loss_total DECIMAL(22,2) COMMENT '压力情景下预计总损失金额',
stress_pd_increase DECIMAL(10,4) COMMENT '压力情景违约概率上浮幅度',
stress_lcr_min DECIMAL(10,4) COMMENT '压力下最低流动性覆盖率',
stress_nsfr_min DECIMAL(10,4) COMMENT '压力下最低净稳定资金比率',
capital_surplus_after_stress DECIMAL(22,2) COMMENT '压力后剩余资本充足缓冲',
risk_alert_flag TINYINT COMMENT '压力风险预警标识1需启动应急预案0正常',
stress_handle_plan STRING COMMENT '压力情景缓释处置方案'
) COMMENT '信用/市场/流动性统一压力测试汇总监管报表'
PARTITIONED BY (dt STRING) STORED AS PARQUET;
-- ------------------------------
-- 5.6 【新增ADS监管报表3】交易对手集中度风险监管报表
-- ------------------------------
DROP TABLE IF EXISTS ads_counterparty_concentration_risk_d;
CREATE TABLE ads_counterparty_concentration_risk_d (
dt STRING COMMENT '统计日期',
cp_id STRING COMMENT '交易对手唯一ID',
cp_full_name STRING COMMENT '交易对手完整名称',
cp_type_name STRING COMMENT '对手类型:银行/券商/对公企业/非银机构',
cp_external_rating STRING COMMENT '对手外部主体评级',
org_name STRING COMMENT '授信经办机构名称',
total_exposure_amt DECIMAL(22,2) COMMENT '对该对手全部风险暴露总额(贷款+同业+债券投资)',
single_cp_limit_amt DECIMAL(22,2) COMMENT '该对手单一授信限额总额',
exposure_limit_ratio DECIMAL(10,4) COMMENT '风险暴露占单一限额比例',
total_bank_asset_amt DECIMAL(22,2) COMMENT '全行总资产规模',
cp_asset_ratio DECIMAL(10,4) COMMENT '该对手风险暴露占全行总资产比例',
concentration_warn_flag TINYINT COMMENT '集中度预警标识1超限预警0正常',
risk_control_suggest STRING COMMENT '集中度风险缓释处置建议'
) COMMENT '单一交易对手集中度风险监管报送报表,用于监控大额对手敞口超限风险、满足银保监会集中度监管指标上报'
PARTITIONED BY (dt STRING COMMENT '统计日期') STORED AS PARQUET;
-- ==============================================
-- 执行完成校验语句
-- ==============================================
SELECT '风险集市全量表初始化DDL执行完成,包含DIM/ODS/DWD(KMV+DCF计量)/DWS/ADS(NSFR/压力测试/集中度监管报表)全套必选表' AS execute_result;
四、每日报表装载完整 SQL 脚本(NSFR、压力测试、交易对手集中度)
sql
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
SET parquet.compression=snappy;
SET hive.exec.parallel=true;
SET hivevar:stat_dt = '2026-06-30';
USE risk_mart;
## 4.1 ads_liquid_nsfr_reg_report_d NSFR报表装载SQL
INSERT OVERWRITE TABLE ads.ads_liquid_nsfr_reg_report_d PARTITION(dt = '${stat_dt}')
SELECT
t_org.org_name AS org_name,
t_wide.currency AS currency,
t_wide.rsf_total_amt AS total_rsf_amt,
t_wide.asf_total_amt AS total_asf_amt,
CASE WHEN t_wide.asf_total_amt > 0 THEN ROUND(t_wide.rsf_total_amt / t_wide.asf_total_amt,4) ELSE 0 END AS nsfr_ratio,
SUM(CASE WHEN t_dep.stable_deposit_flag = 1 THEN t_dep.stock_balance_amt * t_dep.stable_weight_coeff ELSE 0 END) AS stable_deposit_rsf_amt,
SUM(t_inter.trade_amt * CASE WHEN t_inter.biz_term_day >= 365 THEN 0.9 ELSE 0.5 END) AS interbank_rsf_amt,
t_wide.hqla_total_amt * 0.05 AS hqla_asf_amt,
SUM(CASE WHEN t_loan.remain_term_month >= 12 THEN t_loan.loan_balance_amt * 0.85 ELSE t_loan.loan_balance_amt * 0.35 END) AS loan_long_asf_amt,
CASE WHEN CASE WHEN t_wide.asf_total_amt > 0 THEN ROUND(t_wide.rsf_total_amt / t_wide.asf_total_amt,4) ELSE 0 END < 1.0 THEN 1 ELSE 0 END AS nsfr_warn_flag,
1 AS reg_submit_flag
FROM dws.dws_liquid_risk_day_wide_d t_wide
LEFT JOIN dwd.dwd_liquid_deposit_stock_d t_dep
ON t_wide.org_id = t_dep.org_id AND t_wide.currency = t_dep.currency AND t_dep.dt = '${stat_dt}'
LEFT JOIN dwd.dwd_liquid_interbank_biz_d t_inter
ON t_wide.org_id = t_inter.org_id AND t_wide.currency = t_inter.currency AND t_inter.dt = '${stat_dt}'
LEFT JOIN dwd.dwd_risk_loan_detail_d t_loan
ON t_wide.org_id = t_loan.org_id AND t_loan.dt = '${stat_dt}'
LEFT JOIN dim.dim_org_info t_org
ON t_wide.org_id = t_org.org_id
WHERE t_wide.dt = '${stat_dt}'
GROUP BY t_org.org_name, t_wide.currency, t_wide.rsf_total_amt, t_wide.asf_total_amt, t_wide.hqla_total_amt;
SELECT org_name, currency, nsfr_ratio, nsfr_warn_flag FROM ads.ads_liquid_nsfr_reg_report_d WHERE dt = '${stat_dt}';
## 4.2 ads_risk_stress_test_report_d 压力测试报表装载SQL
INSERT OVERWRITE TABLE ads.ads_risk_stress_test_report_d PARTITION(dt = '${stat_dt}')
SELECT
'${stat_dt}' AS dt,
t_stress.scene_code AS stress_scene_code,
t_dict.dict_name AS stress_scene_name,
t_stress.risk_test_type AS risk_test_type,
t_org.org_name AS org_name,
t_stress.base_total_asset AS original_balance_total,
t_stress.stress_total_loss AS stress_loss_total,
t_stress.pd_rise_ratio AS stress_pd_increase,
t_stress.min_lcr_stress AS stress_lcr_min,
t_stress.min_nsfr_stress AS stress_nsfr_min,
t_stress.surplus_capital AS capital_surplus_after_stress,
CASE WHEN t_stress.surplus_capital < 0 OR t_stress.min_lcr_stress < 1.0 THEN 1 ELSE 0 END AS risk_alert_flag,
t_stress.relief_plan AS stress_handle_plan
FROM ods.ods_risk_stress_test_result_d t_stress
LEFT JOIN dim.dim_risk_dict t_dict
ON t_stress.scene_code = t_dict.dict_code AND t_dict.dict_type = 'stress_scene'
LEFT JOIN dim.dim_org_info t_org
ON t_stress.org_id = t_org.org_id
WHERE t_stress.dt = '${stat_dt}';
SELECT stress_scene_name, risk_test_type, stress_loss_total, risk_alert_flag FROM ads.ads_risk_stress_test_report_d WHERE dt = '${stat_dt}';
## 4.3 ads_counterparty_concentration_risk_d 交易对手集中度报表装载SQL
INSERT OVERWRITE TABLE ads.ads_counterparty_concentration_risk_d PARTITION(dt = '${stat_dt}')
SELECT
'${stat_dt}' AS dt,
t_cp.cp_id AS cp_id,
t_cp.cp_full_name AS cp_full_name,
t_cp.cp_type AS cp_type_name,
t_cp.external_credit_rating AS cp_external_rating,
t_org.org_name AS org_name,
COALESCE(t_loan.cp_loan_exposure,0) + COALESCE(t_inter.inter_exposure,0) + COALESCE(t_bond.bond_exposure,0) AS total_exposure_amt,
t_cp.single_limit_amt AS single_cp_limit_amt,
CASE WHEN t_cp.single_limit_amt > 0 THEN ROUND((COALESCE(t_loan.cp_loan_exposure,0) + COALESCE(t_inter.inter_exposure,0) + COALESCE(t_bond.bond_exposure,0)) / t_cp.single_limit_amt,4) ELSE 0 END AS exposure_limit_ratio,
t_total.total_asset_amt AS total_bank_asset_amt,
CASE WHEN t_total.total_asset_amt > 0 THEN ROUND((COALESCE(t_loan.cp_loan_exposure,0) + COALESCE(t_inter.inter_exposure,0) + COALESCE(t_bond.bond_exposure,0)) / t_total.total_asset_amt,6) ELSE 0 END AS cp_asset_ratio,
CASE
WHEN (CASE WHEN t_cp.single_limit_amt > 0 THEN (COALESCE(t_loan.cp_loan_exposure,0) + COALESCE(t_inter.inter_exposure,0) + COALESCE(t_bond.bond_exposure,0)) / t_cp.single_limit_amt ELSE 0 END) >= 0.8
OR (CASE WHEN t_total.total_asset_amt > 0 THEN (COALESCE(t_loan.cp_loan_exposure,0) + COALESCE(t_inter.inter_exposure,0) + COALESCE(t_bond.bond_exposure,0)) / t_total.total_asset_amt ELSE 0 END) >= 0.1
THEN 1 ELSE 0 END AS concentration_warn_flag,
'缩减授信额度、分散多交易对手、追加抵质押品缓释集中度风险' AS risk_control_suggest
FROM dim.dim_counterparty_info t_cp
LEFT JOIN (
SELECT cp_id, SUM(loan_balance_amt) AS cp_loan_exposure
FROM dwd.dwd_risk_loan_detail_d
WHERE dt = '${stat_dt}'
GROUP BY cp_id
) t_loan ON t_cp.cp_id = t_loan.cp_id
LEFT JOIN (
SELECT cp_id, SUM(trade_amt) AS inter_exposure
FROM dwd.dwd_liquid_interbank_biz_d
WHERE dt = '${stat_dt}'
GROUP BY cp_id
) t_inter ON t_cp.cp_id = t_inter.cp_id
LEFT JOIN (
SELECT cp_id, SUM(market_value_total) AS bond_exposure
FROM dwd.dwd_mkt_bond_hold_d
WHERE dt = '${stat_dt}'
GROUP BY cp_id
) t_bond ON t_cp.cp_id = t_bond.cp_id
LEFT JOIN dim.dim_org_info t_org ON t_cp.valid_flag = 1
CROSS JOIN (
SELECT SUM(total_loan_balance) AS total_asset_amt
FROM dws.dws_risk_overdue_stat_d
WHERE dt = '${stat_dt}' AND stat_dim_type = 'org'
) t_total
WHERE t_cp.valid_flag = 1;
SELECT cp_full_name, total_exposure_amt, exposure_limit_ratio, concentration_warn_flag FROM ads.ads_counterparty_concentration_risk_d WHERE dt = '${stat_dt}' AND concentration_warn_flag = 1;
五、全链路标准调度执行顺序
- ODS层全部业务、模型中间数据T日落地完成
- DWD层标准明细依次执行:信用明细→市场明细→流动性明细
- DWD计量子表执行顺序:KMV对公违约计量表 → DCF贷款ECL减值计量表
- DWS各风险域汇总宽表批量计算
- ADS监管报表固定执行顺序
- ads_liquid_nsfr_reg_report_d(NSFR长期流动性报表)
- ads_risk_stress_test_report_d(多场景压力测试汇总报表)
- ads_counterparty_concentration_risk_d(交易对手集中度监管报表)
- 下游BI抽取、监管报送文件导出脚本执行
六、数据质量管控规则
6.1 金额类字段校验规则
- 所有资产、负债、敞口、减值金额必须 >= 0,过滤负数异常脏数据
6.2 比率字段值域约束
- nsfr_ratio、lcr_ratio、exposure_limit_ratio、cp_asset_ratio 值域区间 0,9999.9999
- pd_prob、stress_pd_increase 值域区间 0,1
6.3 空值过滤规则
- 核心主键(dt、cp_id、loan_id、org_id)不允许为空,空值直接丢弃
6.4 分区管控规范
- 全业务统一使用dt日分区,分区格式yyyy-MM-dd;月度监管报表增加year_month分区冗余字段
6.5 版本运维规范
- NSFR、LCR折算权重统一存入dim_risk_dict维度表,不再硬编码SQL,参数修改仅维护维度表无需改写装载脚本
七、配套业务示意图(plaintext格式)
7.1 交易对手集中度预警报表示意图
plaintext
【单一交易对手集中度风险监管报表预览】
┌─────────────────────────────────────────────────────────────┐
│ 统计日期:2026-06-30 监管报送标识:是 │
│ 对手全称:XX国有股份制银行 对手类型:银行同业 │
│ 外部评级:AAA 授信机构:总行资金部 │
│ 总风险暴露合计:126.82亿元 │
│ 单一授信限额:150.00亿元 敞口占限额比例:84.55% │
│ 全行总资产:1.65万亿 对手敞口占全行资产比例:0.7686% │
│ 预警标识:1(黄色预警) │
│ 缓释建议:分散配置5家以上同业对手、降低存放同业规模、新增国债质押 │
└─────────────────────────────────────────────────────────────┘
7.2 NSFR 监管报送报表示意图
plaintext
【NSFR净稳定资金比率监管日报】
┌─────────────────────────────────────────────────────────────┐
│ 统计日期:2026-06-30 币种:CNY 报送标识:1 │
│ 汇总机构:全行合并 │
│ 可用稳定资金RSF合计:4526.32亿元 │
│ 所需稳定资金ASF合计:4012.78亿元 │
│ NSFR指标值:112.80% ≥ 监管红线100% 状态正常 │
│ 稳定存款折算RSF:3215.60亿元 │
│ 中长期贷款占用ASF:2761.35亿元 │
│ 预警标识:0 无流动性结构风险预警 │
└─────────────────────────────────────────────────────────────┘
7.3 综合压力测试汇总示意图
plaintext
【重度经济下行综合压力测试报表】
┌─────────────────────────────────────────────────────────────┐
│ 测算日期:2026-06-30 压力场景编码:STRESS_03 │
│ 场景名称:重度经济下行(信用+流动性双压力) │
│ 测试覆盖机构:全行所有分支机构、资金中心 │
│ 基准总资产:1.62万亿 压力情景预计总损失:132.65亿元 │
│ 违约概率PD上浮幅度:0.0620 │
│ 压力下最低LCR:91.32% 压力下最低NSFR:98.65% │
│ 压力后剩余资本缓冲:62.30亿元 │
│ 预警标识:1(红色预警,需启动流动性缓释应急预案) │
│ 处置方案:加大国债持有、同业短期融入、压降高风险对公授信 │
└─────────────────────────────────────────────────────────────┘