Learn_Energy_Special_Wen
节能专题学习库(文)
最近更新:ETL与实时能耗同步组件 (2026-04-09)
当前阶段构建并完成了从源库(15434 / log_platform)到目标库(15433 / test)的回路能耗数据抽取、转换、加载(ETL)及实时同步的基础架构。包含以下核心文件:
1. 数据库配置与连接组件 (db_config.py)
- 技术细节:统一管理基于 SQLAlchemy 和
psycopg2的 PostgreSQL 数据库连接。- 提供了按
prefix(PORTAL,TEST,SOURCE,TARGET) 获取连接 URL 的工厂方法get_db_url。 - 安全性:实现了
get_db_password,内置一次交互式getpass()收集及本地字典_password_cache缓存极致,支持环境变量回退机制。避免在批量执行时反复输入密码。
- 提供了按
2. 回路与房间关联数据打平与校验 (Loops_Power_Valid_1.py, Loops_Power_Valid_2.py, validate_flattened.py)
Loops_Power_Valid_1.py:将loops表的数据(type IN ('0', '1'))与hotels、room_type关联,并利用 PostgreSQL 特有的array_agg(...) FILTER ...分析函数,将同一回路所属关联的多个房间(room_id)聚合为一条数组格式的数据 (loops_type01_enriched)。Loops_Power_Valid_2.py:一对多的基础平铺(Flattened)脚本。通过标准的LEFT JOIN将一个涉及多个房间的合并回路平铺出多行(loops_type01_flattened),建立清晰的设备-房间一对一拓扑。validate_flattened.py:数据一致性验证工具。对抽样的目标库平铺数据(前500条)通过源库loop_id,hotel_id,room_type_id,room_id进行自动化交叉检验。
3. 全局静态计算流水线 (Loops_Power_Calculation.py)
- 技术细节:执行存量能耗数据全量清洗构建业务逻辑的核心 Pipeline。
- 并发抽取目标库的架构数据 (
loops_type01_flattened) 和源库中的客观瞬间状态数据 (room_status_moment_g5)。 - 使用 Pandas 进行了内存级数据对齐聚合(
merge,astype(str).str.strip()防脏数据)。处理位运算掩码解构bright_g的值,获取具体的真实开关功率规律,得出real_power,然后清洗、回退,最后写回目标表wh_test.loops_power与wh_test.rooms_power。
- 并发抽取目标库的架构数据 (
4. 数据完整性统计工具 (check_matching_rate.py)
- 技术细节:双库联调监控工具。对比 15433 test 库提取的
loops_power设备总量与room_status_moment_g5中房间总量的覆盖率关系,利用 Pandas 强制数字/字符串清洗,计算并给出宏观的匹配率数据以及找不到设备的烂数据明细,提供数据排查凭点。
5. 数据库实时事件流触发层 (g5_notify_trigger.sql 与 realtime_g5_listener.py)
g5_notify_trigger.sql:- 在源库端创建了拦截更新动作的 PostgreSQL 本地 Trigger (
trg_g5_update) 监听特定字段变化,采用IS DISTINCT FROM语法避免无效触发。 - 将变化集利用
json_build_object封装,并下发给 PostgreSQL 的原生异步通知信道pg_notify('g5_realtime_channel', payload)。
- 在源库端创建了拦截更新动作的 PostgreSQL 本地 Trigger (
realtime_g5_listener.py:- 使用 Python 进程
psycopg2持久阻塞监听LISTEN g5_realtime_channel管道获取流式数据。 - 设计亮点:启动前带有
initialize_energy_tracking函数,通过基于clock_timestamp()及jsonb_object_keys对数据库的存量能耗记录值归零对齐打锚点(重置last_computed_time)。同时含有 TCP Keepalive 设置防止中间代理意外杀掉长链接。
- 使用 Python 进程
Description
Languages
Python
96.1%
PLpgSQL
3.9%