农行数据清洗
本文所说的数据清洗是指自银行发来的pdf账单到库中dwd层这个流程。这个流程分为pdf提取,导入ods和导入dwd这三步。
PDF提取
主要实现以下功能:
- 异体字标准化处理(支持84个异体字转换)
- PDF文本布局解析(保留原始排版结构)
- 交易时间自动补全(缺失时间字段时补零)
- 短行合并处理(解决PDF换行错误问题)
- 特定业务规则适配(苹果支付URL处理、信用卡交易格式修正等)
备注:详情见农行pdfToCsv
导入ods
py提取出来的文件先excel打开,检查一遍(一般都有问题),然后添加到农行.xlsx
文件,进行kettle导入ods_abc
。
excel导入ods工作分为提取进kettle、字段处理、添加null字段、插入与更新表四个步骤。下面为各个步骤的注意点:
- 提取进kettle:暂无
- 字段处理:保持ods一致性,全部string 128
- 添加null字段:保持ods一致性,添加三个农行没有的字段,默认为null
- 插入与更新:根据日期、时间、对手方判断是更新还是插入
导入dwd
dwd表格的结构参照DWD结构-25,使用Kettle中的java脚本进行处理。
核心功能解析
- 数据提取与空值处理
- 从输入字段(
DEFSTR1
到DEFSTR9
)提取交易日期、时间、摘要、金额、对手信息等数据。 - 对关键字段进行空值检查,确保后续逻辑的安全性(如
ins3 = (ins3 == null) ? "" : ins3;
)。
- 从输入字段(
- 收支方向判断
- 根据交易金额(
DEFSTR4
)的首字符判断收支方向:+
→收
(收入)-
→支
(支出)- 其他字符直接保留首字符(如数字或符号)。
- 根据交易金额(
- 金额标准化
- 去除金额前的
+
或-
符号,保留纯数值(如将-24.60
转换为24.60
)。
- 去除金额前的
- 唯一标识生成
- 拼接固定前缀(
XABC0076-
)、交易日期、时间和格式化的金额(8位整数+2位小数),生成唯一标识hask
。
- 拼接固定前缀(
- 交易备注处理
- 合并交易附言(
DEFSTR9
)和交易摘要(DEFSTR3
),形成临时备注str_temp
。 - 使用正则表达式提取第一个中文字符后的内容作为最终备注(
outs9
)。
- 合并交易附言(
- 交易单号提取
- 从交易附言(
DEFSTR9
)中提取以字母开头、仅含字母和数字的部分作为交易单号t_orderno
。 - 限制单号长度不超过33字符,且长度需大于8才视为有效。
- 从交易附言(
- 交易对方分类
- 根据交易摘要(
DEFSTR3
)映射标准名称(如“支付宝” →ALI
,“微信支付” →TENCE
)。 - 若未匹配预设值,则从备注(
outs9
)中提取前缀(如“支付宝”开头的备注仍映射为ALI
)。
- 根据交易摘要(
- 输出字段设置
- 将处理后的数据写入输出字段,包括:
- 余额(
balance
)、金额(amount
)、货币(CNY
)、所属账户(ABC0076
) - 收支方向(
payent_dirce
)、交易对方(counterparty
)、交易单号(t_orderno
) - 交易备注(
t_notes
)、唯一标识(hask
)
- 余额(
- 将处理后的数据写入输出字段,包括: