データソース追加手順(ATLAS)

ATLAS のデータソースを追加する手順を記します。
WebAPI は、OMOP Common Data Model (CDM) v5 に変換された 1 つ以上のデータベースの構成をサポートします。

下記 URL を参考に、この手順を作成しています。
https://github.com/OHDSI/WebAPI/wiki/CDM-Configuration

前提条件


WebAPI がインストールされていること。
CDM スキーマに対象のデータが格納されていること。

概要


ATLAS セットアップ手順で作成された WebAPI データベースでは、WebAPI を使用してさまざまな分析をするために使用する 1 つまたは複数の CDM を設定できます。
WebAPI が正しく機能するためには sourceおよび source_daimon エントリを構成する必要があります。


sourceテーブルは、CDM への JDBC 接続情報が保持され、CDM データベースへの接続を定義します。
source_daimon テーブルは、source_id を使用して、CDM、Vocabulary、Results、temp スキーマの関連付けを定義します。

以下のセクションでは、OHDSI WebAPI で使用する CDM を準備する方法と、WebAPI を設定して環境内の CDM に接続する方法について説明します。


スキーマのセットアップ


CDM データの特性を把握するために Achilles を実行することを強くお勧めします。
そのプロセスの一環として、結果を保持する
Results schema を作成します。
これらのテーブルは WebAPI によって利用され、WebAPI で設定された CDM に基づくレコード数の情報を含む語彙検索を補完します。

スキーマ概要権限
CDM患者レベルのデータを保持するためのテーブル群read-only
Vocabulary語彙を保持するテーブル群read-only
ResultsAchilles を使用した特性化の結果を保持するテーブル群insert/delete/select/update
TempWebAPI が特定の分析を実行する際に、情報を一時的に保存するためのスキーマfull control (create/remove tables & data)

※以降の手順では、
CDM schema : eunomia
Results schema : eunomia_results
temp schema : eunomia_temp
として進めます

※CDM には OMOP の語彙を保持するテーブルが含まれ、CDM schemaVocabulary schema は、CDM データベース内の同じスキーマを参照していることが多いです

OHDSI データベースに Results schematemp schema の 2 つのスキーマを作成します。

INDEX の作成


cdm, vocabulary の中のテーブル群に対して、Index を作成します。
これにより、ATLAS の Query の実行効率を大幅に改善します。

下記の URL から SQL をコピーします。
https://github.com/OHDSI/CommonDataModel/blob/v5.4.0/inst/ddl/5.3/postgresql/OMOPCDM_postgresql_5.3_indices.sql

“@cdmDatabaseSchema” を CDM schema の名称に置き換えて、pgAdmin 4 から実行します。

INDEX が作成されます。

Achilles の実行


CDM に対して、Achilles を実行し、results(結果)を作成します。
実行結果が Results schema に反映されます。

R から下記のコマンドを実行します。

※パスワード “zzzz” は、書き換えてください
※JDBC ドライバのパスは、C:/Program Files/PostgreSQL としています(PostgreSQL JDBC ドライバを保存していることが前提)

library(Achilles)

connectionDetails <- createConnectionDetails(
  dbms="postgresql", 
  server="localhost/OHDSI", 
  user="ohdsi_app_user", 
  password="zzzz",
  port="5432",
  pathToDriver = "C:/Program Files/PostgreSQL")

options(connectionObserver = NULL)

achilles(connectionDetails = connectionDetails,
         cdmVersion = "5.3",
         cdmDatabaseSchema = "eunomia", 
         resultsDatabaseSchema = "eunomia_results", 
         outputFolder = "output")

Results schema に以下の 3 つのテーブルが作成されます。

Results schema のテーブルを作成


CDM 用の SQL スクリプトを生成して、Results schema にテーブルを作成します。
WebAPI の実行に必要なテーブルを確立する必要があります。

次の WebAPI URL は、Results schema テーブルを作成および設定するために必要な SQL スクリプトを生成するために使用します。

http://<server:port>/WebAPI/ddl/results?dialect=<your_cdm_database_dialect>&schema=<your_results_schema>&vocabSchema=<your_vocab_schema>&tempSchema=<your_temp_schema>&initConceptHierarchy=true

catalina.bat run 実行後、URL をブラウザに貼り付けます。

例: CDM schema : eunomia、Results schema : eunomia_results、temp schema : eunomia_temp とした場合。

http://localhost:8080/WebAPI/ddl/results?dialect=postgresql&schema=eunomia_results&vocabSchema=eunomia&tempSchema=eunomia_temp&initConceptHierarchy=true

生成された SQL を pgAdmin 4 から実行します。

Results schemaに、テーブルが追加されます。

concept_count テーブルの作成


Achilles が実行されていることを前提とし、これらのテーブルを使用して語彙検索を強化するために使用される concept_count テーブルを作成します。

http://server:port/WebAPI/ddl/achilles?dialect=<cdm_database_dialect>&schema=<results_schema>&vocabSchema=<vocabulary_schema>

catalina.bat run を実行している状態で、URL をブラウザに貼り付けます。

例:cdm_database_dialect : postgresql、Results_schema: eunomia_results、 Vocabulary_schema : eunomia とした場合。

http://localhost:8080/WebAPI/ddl/achilles?dialect=postgresql&schema=eunomia_results&vocabSchema=eunomia

生成された SQL を pgAdmin 4 から実行します。

Results schemaに、achilles_result_concept_count テーブルが追加されます。

source および source_daimon テーブルのセットアップ


source および source_daimon テーブルは、WebAPI.war がデプロイされた状態で tomcat サービ スを起動したときに作成されます。
OHDSI ツールを使用するには、これらのテーブルに JDBC ソース接続と対応する source_daimon を設定し、ソースに関連付けられた CDMVocabularyResultsTemp スキーマの場所を指定する必要があります。

例:WebAPI.SOURCE および SOURCE_DAIMON の挿入例(CDM schema : eunomia Results schema : eunomia_results temp schema : eunomia_temp)

下記の SQL を pgAdmin 4 から実行します。( “zzzz のパスワードを書き換えて実行してください)

INSERT INTO webapi.source (source_id, source_name, source_key, source_connection, source_dialect) 
SELECT nextval('webapi.source_sequence'), 'eunomia', 'eunomia', $$jdbc:postgresql://localhost:5432/OHDSI?user=ohdsi_app_user&password=zzzz$$, 'postgresql';

INSERT INTO webapi.source_daimon (source_daimon_id, source_id, daimon_type, table_qualifier, priority) 
SELECT nextval('webapi.source_daimon_sequence'), source_id, 0, 'eunomia', 0
FROM webapi.source
WHERE source_key = 'eunomia'
;

INSERT INTO webapi.source_daimon (source_daimon_id, source_id, daimon_type, table_qualifier, priority) 
SELECT nextval('webapi.source_daimon_sequence'), source_id, 1, 'eunomia', 1
FROM webapi.source
WHERE source_key = 'eunomia'
;

INSERT INTO webapi.source_daimon (source_daimon_id, source_id, daimon_type, table_qualifier, priority) 
SELECT nextval('webapi.source_daimon_sequence'), source_id, 2, 'eunomia_results', 1
FROM webapi.source
WHERE source_key = 'eunomia'
;

INSERT INTO webapi.source_daimon (source_daimon_id, source_id, daimon_type, table_qualifier, priority) 
SELECT nextval('webapi.source_daimon_sequence'), source_id, 5, 'eunomia_temp', 0
FROM webapi.source
WHERE source_key = 'eunomia'
;

処理が完了すると、webapi スキーマの source テーブル、source_daimon テーブルにデータソースのデータが追加されます。

WebAPI が起動し、source/source_daimon の挿入が完了すると、ブラウザで次の URL を開くことができるようになります。

http://localhost:8080/WebAPI/source/sources

出力は次のようになります。

[{
		"sourceId":2,
		"sourceName":"eunomia",
		"sourceDialect":"postgresql",
		"sourceKey":"eunomia",
		"daimons":
		[{
				"sourceDaimonId":2,
				"daimonType":"CDM",
				"tableQualifier":"eunomia",
				"priority":0
			},{
				"sourceDaimonId":3,
				"daimonType":"Vocabulary",
				"tableQualifier":"eunomia",
				"priority":1
			},{
				"sourceDaimonId":4,
				"daimonType":"Results",
				"tableQualifier":"eunomia_results",
				"priority":1
			},{
				"sourceDaimonId":5,
				"daimonType":"Temp",
				"tableQualifier":"eunomia_temp",
				"priority":0
			}
		]
	}
]

以上の作業が完了することにより、ATLAS からデータソースの選択ができるようになります。