农行数据清洗

本文所说的数据清洗是指自银行发来的pdf账单到库中dwd层这个流程。这个流程分为pdf提取,导入ods和导入dwd这三步。

PDF提取

主要实现以下功能:

  1. 异体字标准化处理(支持84个异体字转换)
  2. PDF文本布局解析(保留原始排版结构)
  3. 交易时间自动补全(缺失时间字段时补零)
  4. 短行合并处理(解决PDF换行错误问题)
  5. 特定业务规则适配(苹果支付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脚本进行处理。

核心功能解析

  1. 数据提取与空值处理
    • 从输入字段(DEFSTR1DEFSTR9)提取交易日期、时间、摘要、金额、对手信息等数据。
    • 对关键字段进行空值检查,确保后续逻辑的安全性(如 ins3 = (ins3 == null) ? "" : ins3;)。
  2. 收支方向判断
    • 根据交易金额(DEFSTR4)的首字符判断收支方向:
      • + → (收入)
      • - → (支出)
      • 其他字符直接保留首字符(如数字或符号)。
  3. 金额标准化
    • 去除金额前的+-符号,保留纯数值(如将 -24.60 转换为 24.60)。
  4. 唯一标识生成
    • 拼接固定前缀(XABC0076-)、交易日期、时间和格式化的金额(8位整数+2位小数),生成唯一标识 hask
  5. 交易备注处理
    • 合并交易附言(DEFSTR9)和交易摘要(DEFSTR3),形成临时备注 str_temp
    • 使用正则表达式提取第一个中文字符后的内容作为最终备注(outs9)。
  6. 交易单号提取
    • 从交易附言(DEFSTR9)中提取以字母开头、仅含字母和数字的部分作为交易单号 t_orderno
    • 限制单号长度不超过33字符,且长度需大于8才视为有效。
  7. 交易对方分类
    • 根据交易摘要(DEFSTR3)映射标准名称(如“支付宝” → ALI,“微信支付” → TENCE)。
    • 若未匹配预设值,则从备注(outs9)中提取前缀(如“支付宝”开头的备注仍映射为 ALI)。
  8. 输出字段设置
    • 将处理后的数据写入输出字段,包括:
      • 余额(balance)、金额(amount)、货币(CNY)、所属账户(ABC0076
      • 收支方向(payent_dirce)、交易对方(counterparty)、交易单号(t_orderno
      • 交易备注(t_notes)、唯一标识(hask