【MIMICIII 数据库安装】踩坑记录+解决方案

前提

已经获得数据包(大致6G)

如果还没有数据包的话,可以参照以下两个链接进行注册、考试,获得下载数据的链接:

MIMICIII 数据库教程(1)——注册CITI、考试拿证

MIMICIII 数据库教程(2)——注册PhysioNet、上传证书、等待审核

之后,我根据以下三个链接进行MIMICIII数据库的安装(目前MIMIC已经出了IV版本,但是看到论文里比较多是使用III版本,所以还是下载III版本)。

第1个教程链接与第1个坑

第1个教程链接

MIMICIII 数据库教程(3)——数据库及其他软件的下载及安装 #丁香打卡#

这一链接的主要内容:下载使用MIMICIII数据库过程中所需要的软件和代码包,包括原数据包、数据导入的代码指令包、和代码指令包对应的数据库管理系统postgresql。

第1个(小)坑——代码包版本不同

在第2步——“下载6M的Code(Github)”中,由于版本更新的原因(教程作者发布这篇教程的时间是2020年7月,在计算机领域来说确实有些年代久远了),我下载到的不是教程中显示的“mimic-code-master.zip”,而是”mimic-code.main.zip”,这里其实就开始埋坑了(其实不算是坑吧,只是版本不同带来的操作的不同)。

下面的这个步骤可以不做,做了也没用,因为后面继续跟着步骤做的时候会发现:已经不是作者当初写教程时的情景。


下载的postgresql版本是12.13.1,操作系统是windows-x64。

除此之外没有碰到教程作者在教程中提到的那些问题和其他问题。

第2个教程链接与第2、3个坑

第2个教程链接与官方文档

MIMICIII 数据库教程(4)——MIMIC数据库的安装 #丁香打卡#

这一篇文章的主要内容是:使用postgresql(主要是用它的shell)将6G数据压缩包中的数据导入到postgresql中。

同时打开MIMIC的官方文档,找到安装MIMIC-III数据库的教程。第2份教程链接的内容其实也是根据这个官方文档给出的安装教程编写的,但是直接跟着教程链接里的步骤,后面会出问题(下文详叙),所以还是建议结合官方文档一起看。

目前这个官方给的教程位置在如下图所示的地方↓(一段时间过去后它可能文档的编排又会修改,放到另一个位置,到时候另外找找就行,总会找到的)

第2个坑——数据文件太大导致加载失败

报错内容

跟着教程的步骤,直到下图中的这一步开始出现问题:


原教程作者说到:他的文件夹中放的是解压之后的csv文件。在运行postgres_load_data.sql这个文件后,前三个csv文件可以顺利导入,到了第四个文件就会报错(这个错误在评论区也有人提到了):无法获取文件“CHARTEVENTS.csv”的状态:Unknown error

报错原因与解决方案

造成这个报错的原因是这个csv文件太大,无法加载进内存。所以进行到这一步时,我们不使用解压后的csv文件,而是使用解压前的.csv.gz文件,同时根据官方文档给的下载“解压工具”的指引,下载好7-zip或者GNU zip并将解压工具的位置配置到环境变量中。之后运行postgres_load_data_7zip.sql或者postgres_load_data_gz.sql

我下载的解压工具是7-zip,运行脚本前也配置好了环境变量了。但是运行脚本的时候提示没有7z这个命令。重启电脑后,再次按照教程的提示(前面那些删除数据库、创建数据库的步骤就不用做了,需要做的只有\c mimic;以回到数据库、set search_path to mimiciii;以使用mimiciii这个schema、\set ON_ERROR_STOP 1以在遇到错误时指令立刻停止以便排错)回到运行脚本的这个步骤,设置好mimic_data_dir的文件夹,这个文件夹里包含的是未解压的.csv.gz文件,然后运行postgres_load_data_7zip.sql或者postgres_load_data_gz.sql

上面的这个过程可以参考链接:

PostgreSQL无法获取文件 XX.csv: Unkonw error 的状态

SQL-shell安装MIMIC-III报错:无法加载CHARTEVENTS(讨论区)

第3个(小)坑——再次运行加载数据的sql文件时报错:重复键违反唯一约束(在已经踩中第2个坑的基础上出现)

报错内容

如果在看到第2个坑前就已经按照原教程链接作者的做法运行了postgres_load_data.sql这个文件,等到再次运行postgres_load_data_7zip.sql或者postgres_load_data_gz.sql时,首先面临的可能是这样一个报错:错误:重复键违反唯一约束……

报错原因与解决方案

这个报错的原因是在之前运行postgres_load_data.sql这个文件的时候,前三个表已经创建过了,而运行postgres_load_data_7zip.sql或者postgres_load_data_gz.sql时,这两个文件里也有创建前三个表的命令,相当于把已经存在的前三个表再创建一次,当然就重复了,所以解决办法也很简单:使用记事本打开运行postgres_load_data_7zip.sql或者postgres_load_data_gz.sql,将前三个表的创建命令删掉或者注释掉,使得运行脚本时不再重复创建这几个表,如下图所示:

保存修改后的sql文件,再次运行这个sql文件,然后就是陷入漫长的寂静,电脑看起来没有反应。这是正常的,因为此时第一个要创建的表变成了CHARTEVENTS,而这个表非常大,慢慢等吧!

之后可以跟着教程继续走了,没有碰到其他问题。

第3个教程链接与第4、5个坑

第3个教程链接

MIMICIII 数据库教程(5)——打开pgAdmin 4 #丁香打卡#

这篇文章的主要内容:在pgAdmin中查看导入的数据+安装物化视图。

教程里首先说打开pgAdmin后连不上server,不过我没有遇到这个问题,可以窃喜。查看导入的数据也没有问题。

第4个坑——没有make-concepts.sql文件

内容

到了安装物化视图这步开始懵圈了:找遍了mimic-code-main这个文件夹,没有发现make-concepts.sql这个文件,只有\mimic-code-main\mimic-iii\concepts这个路径下有make-concepts.sh\mimic-code-main\mimic-iii\concepts_postgres这个路径下有postgres-make-concepts.sql。讨论区里面也有很多人疑惑没有make-concepts.sql这个文件怎么办。

原因与解决方案

会出现这个差别的原因是:大家在github上下载到的code包的版本和教程作者当时下载到的code包的版本不同。我自己使用的代码包版本是v2.3.0。当我在github上找到MIMIC v1.4.2这个版本的代码包并下载下来观察后,在concepts文件夹里面确实能找到make-concepts.sql这个文件。

当把make-concepts.sql与自己下载的code包里面的postgres-make-concepts.sql进行比较时,我发现两者的内容是相似的,而且postgres-make-concepts.sql的内容比make-concepts.sql的更多,说明这是原来make-concepts.sql的升级版本,只不过使用方式要变一下。

首先看到\mimic-code-main\mimic-iii\concepts下的README.md文件,里面提到了应该如何使用postgres-make-concepts.sql文件:先运行postgres-functions.sql,再运行postgres-make-concepts.sqlpostgres-functions.sql里面定义了一些postgres-make-concepts.sql里面会用到的函数,所以不能只运行postgres-make-concepts.sql)。

进一步的,postgres-make-concepts.sql里面是由多个\i命令组成的,意思是运行这个文件相当于逐个调用、运行里面所有的sql文件。比如第一个运行的命令是这个:\i demographics/icustay_times.sql。打开\mimic-code-main\mimic-iii\concepts_postgres文件夹下的demographics文件夹里的icustay_times.sql,发现它创建的是TABLE(表格),并不是教程中说的MATERIALIZED VIEW(物化视图)。

而在v1.4.2的代码包中,demographics文件夹里的icustay_times.sql创建的的确是MATERIALIZED VIEW。

虽然创建TABLE也不妨碍以后的数据查询,但是对比物化视图和表格的优劣,考虑到MIMIC III数据量庞大,使用物化视图查询效率更高,而且我日后也基本不会对数据进行更新、修改,所以我将postgres-make-concepts.sql里面提到的所有sql文件里的创建语句做了修改,从创建TABLE修改成了创建MATERIALIZED VIEW。

第5个坑——文件位置不正确

报错内容

之后运行postgres-make-concepts.sql一路顺利,直到运行到ccs_dx.sql,报错:

报错原因与解决方案

这个错误也比较好理解,因为ccs_dx.sql文件里有一行代码,需要用gzip命令去解压ccs_multi_dx.csv.gz这个文件。但是这个文件代码没有找到正确的位置,因为我们在执行postgres-make-concepts.sql这个脚本的时候并没有进入到diagnosis文件夹里(ccs_multi_dx.csv.gz在这个文件夹里),而我们运行脚本前执行的命令只是cd到了concepts_postgres这一层目录。

这个时候把ccs_multi_dx.csv.gz复制到concepts_postgres文件夹里,或者在shell里cd到diagnosis这一层也可以解决问题。重新运行脚本前记得注释掉脚本里前面已经运行成功的命令即可。

最终,生成物化视图68张,表格44张。
stgres`这一层目录。

这个时候把ccs_multi_dx.csv.gz复制到concepts_postgres文件夹里,或者在shell里cd到diagnosis这一层也可以解决问题。重新运行脚本前记得注释掉脚本里前面已经运行成功的命令即可。

最终,生成物化视图68张,表格44张。