首页/数据/数仓建模速查/日志解析成结构化事实
维度与事实设计149 条

日志解析成结构化事实

日志入仓先解析为结构化列并保留原始定位(文件路径 + 偏移或对象键):解析规则版本化,回溯时可重新解析。

数仓建模速查数据更新于 2026-10-13

日志解析成结构化事实

日志入仓要先把半结构化日志(JSON、键值对、定长文本)解析成结构化列,同时保留原始定位信息:文件路径加偏移量,或对象存储的 key 加 offset。解析规则必须版本化登记。这样当规则写错或上游新增字段时,可以回到原始日志重新解析,不必等上游重发数据。

基本信息

解析方式JSON 提取、正则捕获、分隔符切分
原始定位src_path + src_offset 或对象键 + offset
规则版本解析规则编号,标注生效时间与变更内容
失败处理解析失败与字段缺失单列监控,不静默丢弃
分区方式按日志生成日期 dt 分区
常见函数Hive 的 get_json_object / regexp_extract

典型使用场景

  • 应用埋点入仓:把 JSON 日志解析成行为事实表供漏斗分析
  • 网关访问日志:解析出状态码、耗时、上游地址做稳定性统计
  • 设备上报日志:解析物联网设备的周期上报,构造状态事实
  • 规则迭代回溯:解析规则升级后对历史日志重新解析补齐字段
  • 问题定位:借助原始指针回到具体文件与偏移,复核解析结果

JSON 解析与失败监控

JSON 解析与失败监控
SELECT
  get_json_object(log, '$.order_id')  AS order_id,
  get_json_object(log, '$.amount')    AS amount,
  get_json_object(log, '$.event_type') AS event_type,
  src_path,
  src_offset,                                          -- 原始指针,用于回溯复核
  rule_version
FROM ods_app_log
WHERE dt = '2026-10-12';
SELECT count(1) AS bad_rows                              -- 解析失败的行单独监控,不静默丢弃
FROM ods_app_log
WHERE dt = '2026-10-12' AND get_json_object(log, '$.order_id') IS NULL;

解析入仓要点

环节做法出错表现
解析按规则提取字段并保留原始指针无法回溯,只能等上游重发
规则版本登记版本与生效时间历史与新字段混用,口径不明
失败监控失败行数与缺失率单独出指标指标悄悄变小,无人发现
字段类型解析后显式转换类型字符串比较导致数值判断错误
字段缺失与解析失败的行要单列监控,不能静默丢弃:真实的典型症状是某天指标突然变小,而任务依旧成功,问题要等到业务发现才暴露。
保留原始指针还有成本含义:完全保留原始日志可以做任意回溯,但存储成本高,通常的做法是原始日志按生命周期归档到对象存储,仓库里只保留结构化结果与指针。

易错点

  • 解析规则变更后不回刷历史,新旧字段并存,同一指标出现两套数值
  • 解析失败的行被静默丢弃,任务成功但指标偏小,问题延迟暴露
  • 不保留原始定位信息,解析规则修正后无法重算历史
  • 解析结果不做类型转换,金额按字符串比较,排序与阈值判断出错

数据来源与参考

  • Hive 语言手册:JSON 函数;日志治理实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌