|
@@ -96,4 +96,45 @@ python scripts/rebuild_all.py # 或门户「数据重算」
|
|
|
|
|
|
|
|
⚠️ **尚未做的一步(等你定)**:把年度 zip **解出**(每月 12 个 `.mdb`,约十几 GB),
|
|
⚠️ **尚未做的一步(等你定)**:把年度 zip **解出**(每月 12 个 `.mdb`,约十几 GB),
|
|
|
以及是否把 MDB **转成** `scada_10min/`、`scada_1min/` 的 CSV(即"用 MDB 取代现有 CSV")。
|
|
以及是否把 MDB **转成** `scada_10min/`、`scada_1min/` 的 CSV(即"用 MDB 取代现有 CSV")。
|
|
|
-}这个决定会影响现有 27 GB 的 CSV 输入要不要保留, 故先只做"放进去"这一步。
|
|
|
|
|
|
|
+}这个决定会影响现有 27 GB 的 CSV 输入要不要保留, 故先只做"放进去"这一步。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 7. CSV → MDB(用户令 2026-09-17:仿照 `25年.zip`/`26年.zip` 的形态)—— 探路结果
|
|
|
|
|
+
|
|
|
|
|
+### 7.1 目标形态(照现场归档抄)
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+<年>年.zip → <年>年/<月>月/<年>-<月>-<类>.zip → <年>-<月>-<类>.mdb
|
|
|
|
|
+```
|
|
|
|
|
+现场每月 12 类(`cnt din dot flg grd int prs scd std sum tmp tur`),**每类一个 MDB、库内一张表**
|
|
|
|
|
+(如 `tblGrid`,用 `Station` 区分机组)。本器同构产出,类名沿用现场叫法:`10min` / `1min`。
|
|
|
|
|
+
|
|
|
|
|
+### 7.2 两条**必须偏离**现场形态的硬限制(Access 引擎,绕不过)
|
|
|
|
|
+
|
|
|
|
|
+| 限制 | 实测冲突 | 处置 |
|
|
|
|
|
+|---|---|---|
|
|
|
|
|
+| **单表 ≤ 255 列** | `scada_10min/WTG01.csv` = **598 列**(`scada_1min/01E.csv` = 79 列) | 每库按列拆表 `t1/t2/t3`(建议每片 250 列),各表首列放 `rid` 行号便于对齐 |
|
|
|
|
|
+| **单 MDB ≤ 2 GB** | `scada_10min` 14.4 GB + `scada_1min` 12.8 GB | **按月分库**(不可按年一个库) |
|
|
|
|
|
+
|
|
|
|
|
+### 7.3 写 MDB 的能力与路线(本机实测,2026-09-17)
|
|
|
|
|
+
|
|
|
|
|
+- ✅ **建库可用**:`ADOX.Catalog` COM + `Microsoft.ACE.OLEDB.12.0/16.0` 提供程序(64 位 PowerShell 下实测
|
|
|
|
|
+ `可实例化`、`$cat.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=x.mdb;")` 成功建出 180 KB 库)。
|
|
|
|
|
+- ❌ **`SELECT … INTO [文本源]` 不支持**:实测报「这种对象类型不支持该操作」。
|
|
|
|
|
+- ❌ **用目标库连接去 `INSERT INTO … SELECT * FROM [text;…]` 也不支持**:同样报该错。
|
|
|
|
|
+- ✅ **可行方向(下一步要落的就是它)**:**反过来的写法** —— 连接**文本源**,
|
|
|
|
|
+ 用 Jet 的链接语法指向目标库:`INSERT INTO [;DATABASE=<目标.mdb>;].[表名] SELECT * FROM [<分片>.csv]`
|
|
|
|
|
+ (实测语法已被接受:报的是「INSERT 语句语法错误」而非「不支持该操作」;当时两点没对上 ——
|
|
|
|
|
+ 方括号里要**带结尾分号** `[;DATABASE=…;]`,且目标表列数/列序要与 CSV 完全一致)。
|
|
|
|
|
+- ⚠ **Linux 侧只能读不能写**:`mdbtools` 无写库能力 ⇒ MDB 生成请在 Windows 上做(或让现场直接给 MDB)。
|
|
|
|
|
+- ⚠ 中文字段名(1 分钟数据是中文列名):文本 ISAM 需配 `schema.ini`(`CharacterSet=65001`,UTF-8),
|
|
|
|
|
+ 否则中文列名/值会按 ANSI 代码页解错。
|
|
|
|
|
+
|
|
|
|
|
+### 7.4 尚未做的(下次接手的最短路径)
|
|
|
|
|
+
|
|
|
|
|
+1. 在 `scripts/extract_site_data.py` 增 `--csv-to-mdb --month <YYYY-MM> --class {10min,1min}`:
|
|
|
|
|
+ 按月过滤 → 按 250 列切片写临时分片 CSV(首列 `rid`)→ 建库 → 按列生成 DDL(`CREATE TABLE`)→
|
|
|
|
|
+ 按 §7.3 的链接语法 `INSERT … SELECT` → 打成同名 zip → **读回校验行数/首末行与源 CSV 一致**;
|
|
|
|
|
+2. 试点:`--month 2025-01 --turbines WTG01`(1 台 1 月)跑通并逐值对拍;
|
|
|
|
|
+3. 全量:38 台 × 21 个月(10min 3 张表/月、1min 1 张表/月),按 §7.2 按月分库。
|