我一直在尝试在 MySQL 中创建一个“间隙和岛屿”识别例程。请参阅上一个有关此处设置和此处所需计算资源的问题。
我将数据库服务器的 RAM 增加到 4 Gb。查询运行正常,但现在我遇到了一个问题,即数据库服务器在运行查询时磁盘空间不足。
该查询查看整个数据库并将它找到的岛插入到名为 的表中shutdown_events。我使用INSERT IGNORE并查看整个数据库,这样我就不会切断跨越某种时间戳约束的岛屿(我尝试添加它,继续阅读......)。
我使用以下 SQL 创建了视图(dr.*_sd要包含~30 个值)
create view sd_pivot as
select dr.wellsite_id, 'EngOilP_sd' as sd, dr.timestamp, dr.EngOilP_sd as val from datarecords dr
union all
select dr.wellsite_id, 'Stg1ScrbLVL_sd', dr.timestamp, dr.Stg1ScrbLVL_sd from datarecords dr
union all
select dr.wellsite_id, 'Stg2ScrbLVL_sd', dr.timestamp, dr.Stg2ScrbLVL_sd from datarecords dr
union all
...
Run Code Online (Sandbox Code Playgroud)
然后填充shutdownevents表的 SQL在这里:
INSERT IGNORE INTO shutdownevents (wellsite_id, sd_name, start, end)
SELECT t.* …Run Code Online (Sandbox Code Playgroud) 我有一个具有以下结构的数据库
+---------------------+------------+---------------+
| timestamp | EngOilP_sd | CompOilLVL_sd |
+---------------------+------------+---------------+
| 2015-06-24 20:28:07 | 0 | 0 |
| 2015-06-24 20:30:20 | 1 | 0 |
| 2015-06-24 20:36:47 | 1 | 0 |
| 2015-06-24 20:41:11 | 1 | 0 |
| 2015-06-24 20:43:29 | 1 | 0 |
| 2015-06-24 20:45:42 | 0 | 0 |
| 2015-06-24 20:47:51 | 0 | 0 |
| 2015-06-24 20:49:59 | 0 | 1 |
| 2015-06-24 20:52:01 | 0 | …Run Code Online (Sandbox Code Playgroud)