Benedikt-lw/GeoRisk
GitHub: Benedikt-lw/GeoRisk
基于 n8n 和 SQL Server 构建的自动化 ETL 流水线,旨在将 ACLED 冲突数据转化为结构化星型模型,以支持地缘政治风险情报分析。
Stars: 0 | Forks: 0
# 🌍 地缘政治风险情报流水线 (ACLED)




## 📌 概述
本项目是一个自动化的开源情报(OSINT)数据流水线,旨在监测和分析全球冲突事件。它从 [ACLED (Armed Conflict Location & Event Data) API](https://acleddata.com/) 中提取地缘政治数据,转换复杂的 JSON 结构,并将其加载到 Microsoft SQL Server 数据仓库中高度优化的**星型模型**中。
该流水线使用 **n8n** 进行编排,确保了数据去重、关系完整性以及用于维度建模的顺序负载传递。
## 🏗️ 架构与当前状态 (MVP)
最小可行产品(MVP)建立了一个稳健、功能齐全的 ETL 工作流,包含以下组件:
- **数据提取:** 通过 ACLED API 获取冲突数据的自动 HTTP 请求。
- **数据转换与编排:**
- 实现顺序负载传递以处理复杂的外键依赖。
- 自定义 JavaScript 表达式以处理动态 SQL 转义(例如,本地化名称中的撇号,如 *Côte d'Ivoire* 或 *Jama'at Nusrat*)。
- **数据仓库:**
- **星型模型设计:** 确保未来分析查询的高查询性能。
- **维度表:** `Dim_Location`、`Dim_Actor`、`Dim_Event_Type`、`Dim_Source`。
- **事实表:** `Fact_Conflict_Events` 存储事务性数据、细粒度时间戳、死亡人数和退化维度(例如,相关参与者)。
- **幂等加载:** 在数据库节点中直接实现自定义的 `IF NOT EXISTS` Upsert 脚本,以防止重复并自然地增长维度表。
## 🚀 计划的未来实施
虽然核心架构是稳定的,但计划在未来的版本中推出以下功能:
1. **自定义威胁评分算法:**
- 实现存储过程,根据交互类型、死亡人数和基本威胁权重自动计算定量的 `Threat_Score`。
2. **交互式 3D 地理空间前端:**
- 开发自定义的基于 Web 的 3D 地球仪界面,以可视化实时的地缘政治风险。
- 动态分级统计地图将直接根据聚合的 `Threat_Score` 对国家和地区进行颜色编码(从绿色/低风险到红色/严重风险的热力梯度)。
3. **商业智能 (BI) 集成:**
- 将数据仓库连接到 Power BI 以分析参与者网络关系和纵向冲突趋势。
4. **高级多事件处理:**
- 在 BI/前端层开发分配逻辑,以便在跨分割的地理事件中准确分配死亡人数,防止多地点事件中的重复聚合。
5. **全自动增量加载:**
- 在 n8n 中实现持久状态,以动态获取自上一个 `timestamp` 以来更新的事件,最大限度地减少 API 流量并确保近乎实时的前端更新。
## ⚙️ 设置与安装
1. **数据库初始化:** 在 MS SQL Server Management Studio (SSMS) 中运行提供的 `DDL_table_schema.sql` 脚本以构建空的星型模型。
2. **导入工作流:** 将 `n8n.json` 文件导入到您的本地或云端托管的 n8n 实例中。
3. **配置凭证:** 在 n8n 中更新 MS SQL Server 连接凭证。
4. **执行:** 手动触发工作流或启用计划触发器以进行每日自动更新。
标签:ACLED, API 集成, BI, ESC4, ETL, JavaCC, JSON 处理, n8n, OSINT, SQL Server, 事实表, 冲突分析, 地缘政治, 数据仓库, 数据可视化, 数据清洗, 数据管道, 星型模型, 维度建模, 网络调试, 自动化, 软件工程