> For the complete documentation index, see [llms.txt](https://summer-2.gitbook.io/ultraxiaozi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://summer-2.gitbook.io/ultraxiaozi/2021-03-01.md).

# 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进行一键安装，具体效果未知。

* <https://github.com/OHDSI/Broadsea>
* <https://github.com/OHDSI/OHDSIonAWS>

## 实施流程

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.username**、**datasource.password** - 默认配置了**ohdsi\_app\_user**用户作为webapi的普通用户，可以增删改查webapi中的所有表和数据
   4. **flyway.datasource.username**、**flyway.datasource.password** - flyway用于创建webpi所需要的表，默认为**ohdsi\_admin\_user**，拥有webapi的全部权限
   5. 在postgresql中创建对应用户、数据库的命令如下，需要使用postgres管理员登录

      ```sql
      -- 创建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;
      ```

![](/files/-MUgqIYjfa95UMCFvnc3)

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

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

![](/files/-MUgqOBFCZqSIfr44Wdc)

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

![](/files/-MUgqY3dXlmaxtYV2Pyx)

![](/files/-MUgqcHfzHo99PqslGxk)

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

![](/files/-MUgqfJo5kFnh1KcYbIr)

### 安装 CDM、Vocab

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

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

   ```r
   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;**&#x8BED;句，创建自定义的类型，这个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语言库

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

   ```r
   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中包含费用的数据，可以打开，不过会增加较多的执行时间

   ```r
   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查看统计结果的话

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

   ```r
   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`*](http://localhost:8080/WebAPI/source/refresh)

   ```sql
   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. 在项目根目录创建两个配置文件，避免后续部署之后，在浏览器上访问报错

&#x20;     &#x20;

![](/files/-MUgr6Rx7frSp6EqBKR-)

执行打包命令

```
npm run build
```

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

![](/files/-MUgrPqAr8FTpWX9pyLR)

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

## 创建分析

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

![](/files/-MUgreFAFpJJA_LMWyhu)

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

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

![](/files/-MUgrtL0cpCXlsjjrUGM)

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

![](/files/-MUgrvEKzyFJqWK8MPb8)

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

![](/files/-MUgrwgqERN9yG7JQTUt)

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

![](/files/-MUgryEFDsq2A-omfu9X)

![](/files/-MUgs1ecJferSSfLCall)

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

![](/files/-MUgs36FG6UFCoc_RWT0)

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

![](/files/-MUgs5-5hLalDGNAYMQ7)

![](/files/-MUgs7635XSUPjVLpXM_)

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

![](/files/-MUgs8Z4XBURVqVyr3WA)

![](/files/-MUgsAY-wC_whuSCnAYb)

## 欢迎交流

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

邮箱地址：<1163525902@qq.com>
