Atlas安装教程

由于OHDSI生态中,Atlas作为统计分析处于比较重要的地位,鉴于官网的安装文档比较简陋,且存在错误的部分,所以此处基于自身经验,提供了一份完整的安装文档帮助中国地区的OHDSI初学者用于入门。

先决条件

本教程暂时适配的是Atlas 2.8.0版本其它版本的安装可能存在一些不同。我们暂时使用Postgresql作为CDM和Atlas的元数据库,鉴于WebAPI 3.0之后不再支持其它数据库,且Postgresql的功能足够强大。

软件环境

  • Postgresql 10 (其它版本的可能存在兼容性问题)且硬盘大于100GB

  • Tomcat 8.X (虽然使用Spring Boot开发,但是由于添加了很多自定义的Maven插件,所以还是建议使用War包进行部署)

  • R 4.0.X、R Tools 4.0.X 且仅安装64位

  • JDK 1.8.X 且仅安装64位

  • Maven 3.X

  • Node JS LTS版本

  • Git

取决于你的服务器和客户端的操作系统,请安装对应的程序,另外如果你在之前对OMOP、CDM等理论知识不了解,建议熟悉之后再进行后续的安装,当然如果只是简单部署你也可以选择使用Docker Compose进行一键安装,具体效果未知。

实施流程

Atlas = Atlas Front + WebAPI + CDM + VOCAB

WebAPI = RESULTS + TMP + ACHILLES

安装步骤

一旦你已经完成了先决条件中所有软件的安装,让我们开始真正的Atlas安装步骤

安装 WebAPI

WebAPI是一个基于Java的程序,用来提供一系列的web接口用来和CDM数据库进行交互。当然它也有自己的数据库用来存储需要连接的CDM数据库配置信息、队列定义信息、概念集合、分析配置信息等。

  1. 下载对应版本的源代码

    git clone https://github.com/OHDSI/WebAPI.git
    cd WebAPI
    git checkout -b v2.8.0 v2.8.0
  2. 解压之后,创建WebAPIConfig目录,复制sample_settings.xml配置文件到新目录中,修改配置文件中的部分内容

    1. datasource.url - 当前应用的数据库地址,源代码中的数据库地址为localhost、数据库名为OHDSI,如果你的配置信息不同,需要修改。

    2. datasource.ohdsi.schema - 由于postgresql的数据库中可以包含多个模式,当前参数配置的模式为WebAPI应用的模式,默认为webapi,如果你没有手动创建当前模式的话,需要手动创建或者修改配置

    3. datasource.usernamedatasource.password - 默认配置了ohdsi_app_user用户作为webapi的普通用户,可以增删改查webapi中的所有表和数据

    4. flyway.datasource.usernameflyway.datasource.password - flyway用于创建webpi所需要的表,默认为ohdsi_admin_user,拥有webapi的全部权限

    5. 在postgresql中创建对应用户、数据库的命令如下,需要使用postgres管理员登录

      -- 创建ohdsi_app_user、ohdsi_admin_user
      create user ohdsi_app_user with password 'ohdsi_app_user';
      create user ohdsi_admin_user with password 'ohdsi_admin_user';
      -- 创建ohdsi数据库
      create database ohdsi;
      -- 创建temp数据库
      create database temp;
      -- 创建wenapi模式
      create schema webapi;
      -- 切换数据库为webapi
      set search_path = webapi;
      -- 授权给新建的两个账号
      grant all privileges on all tables in schema webapi to ohdsi_app_user;
      grant all privileges on all tables in schema webapi to ohdsi_admin_user;

3.构建war包,执行打包命令,此处使用postgresql的打包参数,打包完成后我们可以在target目录下看到WebAPI.war的文件

mvn clean package -DskipTests -s WebAPIConfig/settings.xml -P webapi-postgresql

4.启动tomcat,将打包好的文件复制到tomcat主目录下的webapp目录中,稍等一段时间之后,tomcat将会自动完成webapi的部署,在这个过程中会自动在webapi下创建应用所需的全部表结构,如果启动过程中出现表不存在等关系,请检查flyway.datasource的配置,例如用户没有授权,schema指定的不对等,如果在第一次启动过程中由flyway初始化失败导致项目启动失败,请在下次启动之前,删除schema_version表,否则程序不会重新进行表的初始化

5. 验证webapi的发布是否成功,打开浏览器访问 http://localhost:8080/WebAPI/info,如果页面返回类似下图的信息,即表示webapi的部署基本成功,当然此时你还没有配置任何的CDM数据源,仅仅是完成了WebAPI的安装

安装 CDM、Vocab

CDM为实际的业务数据,所以需要你能够提前将转换后的数据写入到CDM中,Vocab为OMOP的术语库,需要从athena下载你需要的字典文件导入。

  1. 下载CDM所需的sql脚本,处于兼容性的考虑,我们使用的是v5.3.1版本的数据,如果你使用了v6.0的cdm模型,可能你需要对自己的模型进行降级,不过问题不大,只需要修改部分字段的名字和删掉death表

    git clone https://github.com/OHDSI/CommonDataModel
    cd CommonDataModel
    git checkout -b v5.3.1 v5.3.1
  2. 取决于你使用的数据库,此处我们假设你使用的是postgresql数据库,打开项目目录中的PostgreSQL目录,按顺序执行sql脚本

    1. 首先执行create domain datetime2 as timestamp;语句,创建自定义的类型,这个sql并没有在官方的仓库中提及,但是会导致你后续的脚本执行失败

    2. 执行OMOP CDM postgresql ddl.txt,创建基础表结构

    3. 此时你需要导入OMOP术语库的文件,这样的导入速度是最快的,一旦你创建完关联关系之后,这个操作将会变得非常耗时

      执行OMOP CDM vocabulary load - PostgreSQL.sql之前你需要把你从athena下载的zip文件解压到和数据库相同的服务器上,请检查文件所在目录是否和脚本相对应,否则会导致执行失败

    4. 最后执行OMOP CDM postgresql indexes.txt,此处会创建表对应的索引

    5. 虽然还剩余一个文件我们并没有执行,但是你的CDM数据库已经安装完成,此处建议不要执行OMOP CDM postgresql constraints.txt,这个脚本里面的命令会导致数据库对CDM模型进行极大的限制,有些限制其实并不需要,因为在实际进行统计分析时是不必要的,但是一旦你执行了这些sql,你将无法写入你的业务数据到CDM中

安装 Achilles

一旦完成了CDM的安装,且已经写入了业务数据,此时需要进行质量检测和数据的基础统计来给Atlas提供一些基础信息,此处我们做一些简化操作,直接执行命令即可,不需要下载额外的库

  1. 首先安装Achilles的R语言库

    library(Achilles)
  2. 创建cdm的数据库连接,请注意修改数据库的配置信息

    connectionDetails <- createConnectionDetails(
      dbms="postgresql", 
      server="localhost/ohdsi", 
      user="user", 
      password='password', 
      port="5432")
  3. 执行achilles的扫描程序,此处我们使用并发扫描,需要注意几个参数

    cdmDatabaseSchema - cdm的模式,里面存放的是你的业务数据

    vocabDatabaseSchema - vocab的模式,里面存放的是OMOP的术语库,虽然你可以创建一个独立的术语库,但是由于atlas已经在代码中硬编码了cdm和vocab的模式,所以你只能将cdm的数据和vocab的数据放在一个模式中

    resultsDatabaseSchema - achilles执行结果的模式,此处会存放最后统计分析出来的结果

    scratchDatabaseSchema - achilles执行的中间表数据库

    runCostAnalysis - 是否执行费用的统计分析,此处我们忽略,如果你的cdm中包含费用的数据,可以打开,不过会增加较多的执行时间

    achilles(connectionDetails, 
      cdmDatabaseSchema = "cdm", 
      resultsDatabaseSchema="results",
     vocabDatabaseSchema = "cdm",
      scratchDatabaseSchema = "scratch",
      numThreads = 10, # multi-threaded mode
      sourceName = "OMOP_CDM_achilles_v5.3.10", 
      cdmVersion = "5.3.10",
      runHeel = TRUE,
      runCostAnalysis = FALSE)
  4. 导出JSON文件,如果你想使用Achilles Web查看统计结果的话

    exportToJson(connectionDetails, 
      cdmDatabaseSchema = "cdm", 
      resultsDatabaseSchema = "results", 
      outputPath = "c:/myPath/AchillesExport", 
      compressIntoOneFile = TRUE)
  5. 创建achilles的缓存

    optimizeAtlasCache(connectionDetails,
                       resultsDatabaseSchema="results",
                       vocabDatabaseSchema = "cdm")
  6. 请在rtool中执行以上命令,由于兼容性等等问题,请始终仅安装64位版本,如果你的cdm数据量较大例如超过10万以上,请关注数据库服务器的性能是否够用,否则你可能会等待超过一天的时间来执行这些命令

  7. 接下来如果你是第一次运行achilles,我们需要执行一些sql,生成一些配置表用于atlas使用,如果你想直接通过atlas获取部分sql的话,请在浏览器访问

    http://localhost:8080/WebAPI/ddl/results?dialect=postgresql&schema=results&vocabSchema=cdm&tempSchema=temp&initConceptHierarchy=true,浏览器上将会返回所有你需要执行的sql,请检查schema、vocabSchema、tempSchema的值分别对应achilles结果模式、OMOP术语模式、临时表模式。

    如果你使用默认的配置去创建数据库的话,我们也提供了一份完整sql脚本,你可以直接执行

    下载地址:https://gist.github.com/bdc0770e089677ff3c3ef1a052d89df3

  8. 在webapi库中配置当前CDM的信息,这样你就可以在atlas中去访问这些数据了,请在webapi的schema中执行这些命令,注意你配置的数据库地址应该和你执行achilles中的数据源配置相同,完成这些配置信息后,调用webapi的接口刷新数据源

    http://localhost:8080/WebAPI/source/refresh

    INSERT INTO "webapi"."source" (
        "source_id",
        "source_name",
        "source_key",
        "source_connection",
        "source_dialect",
        "username",
        "password",
        "krb_auth_method",
        "keytab_name",
        "krb_keytab",
        "krb_admin_server",
        "deleted_date",
        "created_by_id",
        "created_date",
        "modified_by_id",
        "modified_date" 
    )
    VALUES
        (
            1,
            'OHDSI V5 Database',
            'OHDSI-CDMV5',
            'jdbc:postgresql://localhost/ohdsi',
            'postgresql',
            'user',
            'password',
            'PASSWORD',
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL 
        );
    INSERT INTO "webapi"."source_daimon"("source_daimon_id", "source_id", "daimon_type", "table_qualifier", "priority") VALUES (1, 1, 0, 'cdm', 2);
    INSERT INTO "webapi"."source_daimon"("source_daimon_id", "source_id", "daimon_type", "table_qualifier", "priority") VALUES (2, 1, 1, 'cdm', 2);
    INSERT INTO "webapi"."source_daimon"("source_daimon_id", "source_id", "daimon_type", "table_qualifier", "priority") VALUES (3, 1, 2, 'results', 2);
    INSERT INTO "webapi"."source_daimon"("source_daimon_id", "source_id", "daimon_type", "table_qualifier", "priority") VALUES (4, 1, 5, 'temp', 2);

安装 Atlas Front

一旦你执行过了Achilles,接下来还剩最后一个组件atlas的前端项目。

  1. 下载对应版本的源代码

    git clone https://github.com/OHDSI/Atlas.git
    cd atlas
    git checkout -b v2.8.0 v2.8.0
  2. 在项目根目录创建两个配置文件,避免后续部署之后,在浏览器上访问报错

执行打包命令

npm run build

3. 打包完成后,直接将项目目录复制到tomcat中即可,此时通过浏览器访问前端地址http://localhost:8080/atlas/#/home,就可以看到atlas的主页了

4. 如果前端页面显示红色的报错信息,提示configuration配置错误,则可能是因为webapi中的souce、source_diamond表的配置信息异常导致

创建分析

  1. 首先访问configuration页面,确认你的cdm数据源都是可用的

如果出现undefined等提示,请检查cdm的配置信息是否正确

2. 点击search按钮,进入术语搜索页面,搜索warfarin,确认术语库的安装正确

3. 点击Data Source按钮,查看CDM中的数据,如果你的cdm总有对应的数据,那么你应该能够看到如下所示的信息,如果你点击查看其它表的数据的时候报错,请确认achilles中的第七步操作是否执行,还有一点就是如果你的concept数据没有进行标准化,此页面也不会显示任何数据,对于atlas分析平台来说,它只能识别标准的概念

4. 在concept sets中创建一个概念集,此处我们选择几个疾病的术语,修改概念集的名字

5. 进入cohort Definition,创建队列,选择conditon作为入队标准,保存之后,查看concept sets中点击condition,查看概念集是否有匹配的数据,如果为0的话你将不会在看到任何人进入你定义的队列中

确认完毕之后,进入Generation的页面中,点击generate生成入队的数据,此处依然需要确认是否有数据,否则其它模块的统计分析将不会产生任何的数据

6. 进入Characterization模块中,创建一个表征分析,使用刚才定义的队列,并选择你想使用的分析方法

7. 切换到Executions的页面中,点击执行,过一段时间后,你将可以查看分析结果

欢迎交流

以上是本人在实践atlas的过程中所总结的一些经验,如果你有任何疑问或者希望交流关于OHDSI生态组件的使用欢迎联系作者。

邮箱地址:1163525902@qq.com

最后更新于