OHDSI Home | Forums | Wiki | Github

WebAPI 관련 질문입니다

저는 지금 CDM 5.2 버전과 webapi 2.60 버전을 사용하여 atlas를 구축중에 있습니다.
이유는 최신버전이 5.2버전과 2.6버전일때 구축을하고
최근에 안하다가 다시 할일이 생겨서 예전 기억을 되살리며 일단 예전 버전으로 설치를 해봤습니다.

atlas까지 웹상에 데이터 경로를 지정하여 잘 띄웠고 voca 까지 검색은 됩니다.

근데
atlas 의 대쉬보드에서 condition이나 drug등 을 보려고 하면 에러가 나서 톰캣 로그를 확인해보니 concept_hierarchy 테이블이 없다고 뜹니다.

webapi 를 웹서버에서 deploy 실행을 시키고 82개의 테이블은 생성이 되었고,

achilles 명령어를 R에서 돌린후에 achilles_analysis / heel_results/ results/ results_derived/ dist 테이블은 생성이 되었는데 이중에서 concept_hierarchy 테이블은 보이지가 않습니다.
어느부분을 제가 빼먹은게 있거나 바뀐 수정사항이 있나요?

2.6.0 버전을 설치했을때의 기억이 잘 나지 않는데 ATLAS에서 configuration 탭 - Qualifiers 컬럼의 Results가 제대로 걸려있을까요??

configuration 과, DB 테이블 캡처도 올려주시면 좋을듯합니다.

네 답변 감사합니다!
configuration 부분은 다음과 같이 잘 설정을 해두었고요


(result를 webapi DB랑 합쳐서 같이 해놨습니다. 이걸로 문제 된적은 없었습니다.)

(한번에 하나의 사진만 올릴수 있는거 같아서 바로 이어서 작성드립니다.)

그로 인한 DB 테이블 들은 다음과 같습니다
왼쪽 37개가 CDM 에 관한 테이블이고 오른쪽 87개가
webapi(82개) + result(5개) 입니다
result의 결과는 맨 상위의 achilles 부분만 입니다.

추가적으로 궁금한 점은 concept_hierarchy 는 webapi deploy 과정에서 생성이 되는거로 기억하는데 맞나요? 아니면 achilles 명령어를 돌리면서 result 테이블이 생성될때 같이 생성이 되는건가요?

concept_hierarchy 테이블은 webapi 설정뒤 source, source_daimon 테이블에 CDM 정보 넣고 톰캣 가동하면 ddl 쿼리 돌면서 생성되는 것으로 알고 있습니다.

위에 링크에서 보시면 다른 results 테이블과 같이 생성되는게 맞는것 같은데, results를 다른 스키마로 변경 뒤 톰캣로그를 보며 생성되지 않는 이유를 찾아보는게 좋을 것 같습니다.

답변 감사합니다.
CDM정보를 source 랑 daimon에 넣고 가동이라고 하셨는데
정확히 hierarchy 테이블 생성되는 시점이

1>source, source_daimon을 채우고 톰캣 재가동인가요?
2>아니면 war파일을 웹가동 폴더에 넣고 톰캣 재가동할때인가요?

일단 지금 80여개의 테이블 들은 두번째 말씀드린 war파일을 웹서버에 올려놓고 톰캣 재가동시 생성되는 테이블입니다!

톰캣 로그를 확인하며 새롭게 로딩을 하는데 특별한 에러는 보이지 않습니다.

혹시 몰라서 postgresql의 오류인가 하고 sqlserver로 (mssql) 지정을 하여 톰캣을 가동할 경우 postgresql에서는 82개의 테이블이 생겼는데 mssql에서는 85개의 테이블이 생성되었습니다.
batch_job_execution_seq
batch_job_seq
cohort concept_map

이렇게 3개의 테이블이 추가적으로 생성되었습니다.

result 스키마를 webapi 스키마로 같이 잡는것이 아닌 별도로 잡아도 위에서 말씀드린 5가지의 테이블만 새로 만든 스키마에 저장이 됩니다.

혹시 다른 의심가는 사항이 있으신가요.?..

1번으로 알고 있습니다.

최신버전의 ATLAS 설치할 때는 Tomcat에서
ex) localhost:8080/WebAPI?query=…
를 입력해서 results table에 대한 ddl이 나오는데요.

2.6.0버전에서는 source, source_daimon에 cdm 정보를 넣고 재가동하면, 그때 생성됐던 것으로 기억합니다.

혹시 그렇다면 source 와 source_daimon 의 값을 한번 확인 부탁드려도 될까요?

image

문제가 없어보이는데요.

혹시 제가 지금 v2.7.4버전의 ATLAS 버전에서
올려주신 스키마 정보로 concept_hierarchy에 insert 할 수 있는 query를 드릴테니 그걸로 돌려보시는게 어떨까요?

CREATE TABLE IF NOT EXISTS webapi.concept_hierarchy
(concept_id INT,
concept_name VARCHAR(400),
treemap VARCHAR(20),
concept_hierarchy_type VARCHAR(20),
level1_concept_name VARCHAR(255),
level2_concept_name VARCHAR(255),
level3_concept_name VARCHAR(255),
level4_concept_name VARCHAR(255)
);

//
/
Populate the hierarchy lookup table per treemap /
/
/
TRUNCATE TABLE webapi.concept_hierarchy;

/********** CONDITION/CONDITION_ERA **********/
INSERT INTO webapi.concept_hierarchy
(concept_id, concept_name, treemap, level1_concept_name, level2_concept_name, level3_concept_name, level4_concept_name)
SELECT
snomed.concept_id,
snomed.concept_name AS snomed_concept_name,
CAST(‘Condition’ AS VARCHAR(20)) AS treemap,
pt_to_hlt.pt_concept_name,
hlt_to_hlgt.hlt_concept_name,
hlgt_to_soc.hlgt_concept_name,
soc.concept_name AS soc_concept_name
FROM (
SELECT
concept_id,
concept_name
FROM cdm52.concept
WHERE domain_id = ‘Condition’
) snomed
LEFT JOIN (
SELECT
c1.concept_id AS snomed_concept_id,
max(c2.concept_id) AS pt_concept_id
FROM cdm52.concept c1
INNER JOIN cdm52.concept_ancestor ca1 ON c1.concept_id = ca1.descendant_concept_id
AND c1.domain_id = ‘Condition’
AND ca1.min_levels_of_separation = 1
INNER JOIN cdm52.concept c2 ON ca1.ancestor_concept_id = c2.concept_id
AND c2.vocabulary_id = ‘MedDRA’
GROUP BY c1.concept_id
) snomed_to_pt ON snomed.concept_id = snomed_to_pt.snomed_concept_id
LEFT JOIN (
SELECT
c1.concept_id AS pt_concept_id,
c1.concept_name AS pt_concept_name,
max(c2.concept_id) AS hlt_concept_id
FROM cdm52.concept c1
INNER JOIN cdm52.concept_ancestor ca1 ON c1.concept_id = ca1.descendant_concept_id
AND c1.vocabulary_id = ‘MedDRA’
AND ca1.min_levels_of_separation = 1
INNER JOIN cdm52.concept c2 ON ca1.ancestor_concept_id = c2.concept_id
AND c2.vocabulary_id = ‘MedDRA’
GROUP BY c1.concept_id, c1.concept_name
) pt_to_hlt ON snomed_to_pt.pt_concept_id = pt_to_hlt.pt_concept_id
LEFT JOIN (
SELECT
c1.concept_id AS hlt_concept_id,
c1.concept_name AS hlt_concept_name,
max(c2.concept_id) AS hlgt_concept_id
FROM cdm52.concept c1
INNER JOIN cdm52.concept_ancestor ca1 ON c1.concept_id = ca1.descendant_concept_id
AND c1.vocabulary_id = ‘MedDRA’
AND ca1.min_levels_of_separation = 1
INNER JOIN cdm52.concept c2 ON ca1.ancestor_concept_id = c2.concept_id
AND c2.vocabulary_id = ‘MedDRA’
GROUP BY c1.concept_id, c1.concept_name
) hlt_to_hlgt ON pt_to_hlt.hlt_concept_id = hlt_to_hlgt.hlt_concept_id
LEFT JOIN (
SELECT
c1.concept_id AS hlgt_concept_id,
c1.concept_name AS hlgt_concept_name,
max(c2.concept_id) AS soc_concept_id
FROM cdm52.concept c1
INNER JOIN cdm52.concept_ancestor ca1 ON c1.concept_id = ca1.descendant_concept_id
AND c1.vocabulary_id = ‘MedDRA’
AND ca1.min_levels_of_separation = 1
INNER JOIN cdm52.concept c2 ON ca1.ancestor_concept_id = c2.concept_id
AND c2.vocabulary_id = ‘MedDRA’
GROUP BY c1.concept_id, c1.concept_name
) hlgt_to_soc ON hlt_to_hlgt.hlgt_concept_id = hlgt_to_soc.hlgt_concept_id
LEFT JOIN cdm52.concept soc ON hlgt_to_soc.soc_concept_id = soc.concept_id;

/********** DRUG **********/
INSERT INTO webapi.concept_hierarchy
(concept_id, concept_name, treemap, level1_concept_name, level2_concept_name, level3_concept_name, level4_concept_name)
SELECT
rxnorm.concept_id,
rxnorm.concept_name AS rxnorm_concept_name,
CAST(‘Drug’ AS VARCHAR(20)) AS treemap,
rxnorm.rxnorm_ingredient_concept_name,
atc5_to_atc3.atc5_concept_name,
atc3_to_atc1.atc3_concept_name,
atc1.concept_name AS atc1_concept_name
FROM (
SELECT
c1.concept_id,
c1.concept_name,
c2.concept_id AS rxnorm_ingredient_concept_id,
c2.concept_name AS RxNorm_ingredient_concept_name
FROM cdm52.concept c1
INNER JOIN cdm52.concept_ancestor ca1 ON c1.concept_id = ca1.descendant_concept_id
AND c1.domain_id = ‘Drug’
INNER JOIN cdm52.concept c2 ON ca1.ancestor_concept_id = c2.concept_id
AND c2.domain_id = ‘Drug’
AND c2.concept_class_id = ‘Ingredient’
) rxnorm
LEFT JOIN (
SELECT
c1.concept_id AS rxnorm_ingredient_concept_id,
max(c2.concept_id) AS atc5_concept_id
FROM cdm52.concept c1
INNER JOIN cdm52.concept_ancestor ca1 ON c1.concept_id = ca1.descendant_concept_id
AND c1.domain_id = ‘Drug’
AND c1.concept_class_id = ‘Ingredient’
INNER JOIN cdm52.concept c2 ON ca1.ancestor_concept_id = c2.concept_id
AND c2.vocabulary_id = ‘ATC’
AND c2.concept_class_id = ‘ATC 4th’
GROUP BY c1.concept_id
) rxnorm_to_atc5 ON rxnorm.rxnorm_ingredient_concept_id = rxnorm_to_atc5.rxnorm_ingredient_concept_id
LEFT JOIN (
SELECT
c1.concept_id AS atc5_concept_id,
c1.concept_name AS atc5_concept_name,
max(c2.concept_id) AS atc3_concept_id
FROM cdm52.concept c1
INNER JOIN cdm52.concept_ancestor ca1 ON c1.concept_id = ca1.descendant_concept_id
AND c1.vocabulary_id = ‘ATC’
AND c1.concept_class_id = ‘ATC 4th’
INNER JOIN cdm52.concept c2 ON ca1.ancestor_concept_id = c2.concept_id
AND c2.vocabulary_id = ‘ATC’
AND c2.concept_class_id = ‘ATC 2nd’
GROUP BY c1.concept_id, c1.concept_name
) atc5_to_atc3 ON rxnorm_to_atc5.atc5_concept_id = atc5_to_atc3.atc5_concept_id
LEFT JOIN (
SELECT
c1.concept_id AS atc3_concept_id,
c1.concept_name AS atc3_concept_name,
max(c2.concept_id) AS atc1_concept_id
FROM cdm52.concept c1
INNER JOIN cdm52.concept_ancestor ca1 ON c1.concept_id = ca1.descendant_concept_id
AND c1.vocabulary_id = ‘ATC’
AND c1.concept_class_id = ‘ATC 2nd’
INNER JOIN cdm52.concept c2 ON ca1.ancestor_concept_id = c2.concept_id
AND c2.vocabulary_id = ‘ATC’
AND c2.concept_class_id = ‘ATC 1st’
GROUP BY c1.concept_id, c1.concept_name
) atc3_to_atc1 ON atc5_to_atc3.atc3_concept_id = atc3_to_atc1.atc3_concept_id
LEFT JOIN cdm52.concept atc1 ON atc3_to_atc1.atc1_concept_id = atc1.concept_id;

/********** DRUG_ERA **********/
INSERT INTO webapi.concept_hierarchy
(concept_id, concept_name, treemap, level1_concept_name, level2_concept_name, level3_concept_name)
SELECT
rxnorm.rxnorm_ingredient_concept_id,
rxnorm.rxnorm_ingredient_concept_name,
CAST(‘Drug Era’ AS VARCHAR(20)) AS treemap,
atc5_to_atc3.atc5_concept_name,
atc3_to_atc1.atc3_concept_name,
atc1.concept_name AS atc1_concept_name
FROM (
SELECT
c2.concept_id AS rxnorm_ingredient_concept_id,
c2.concept_name AS RxNorm_ingredient_concept_name
FROM cdm52.concept c2
WHERE c2.domain_id = ‘Drug’
AND c2.concept_class_id = ‘Ingredient’
) rxnorm
LEFT JOIN (
SELECT
c1.concept_id AS rxnorm_ingredient_concept_id,
max(c2.concept_id) AS atc5_concept_id
FROM cdm52.concept c1
INNER JOIN cdm52.concept_ancestor ca1 ON c1.concept_id = ca1.descendant_concept_id
AND c1.domain_id = ‘Drug’
AND c1.concept_class_id = ‘Ingredient’
INNER JOIN cdm52.concept c2 ON ca1.ancestor_concept_id = c2.concept_id
AND c2.vocabulary_id = ‘ATC’
AND c2.concept_class_id = ‘ATC 4th’
GROUP BY c1.concept_id
) rxnorm_to_atc5 ON rxnorm.rxnorm_ingredient_concept_id = rxnorm_to_atc5.rxnorm_ingredient_concept_id
LEFT JOIN (
SELECT
c1.concept_id AS atc5_concept_id,
c1.concept_name AS atc5_concept_name,
max(c2.concept_id) AS atc3_concept_id
FROM cdm52.concept c1
INNER JOIN cdm52.concept_ancestor ca1 ON c1.concept_id = ca1.descendant_concept_id
AND c1.vocabulary_id = ‘ATC’
AND c1.concept_class_id = ‘ATC 4th’
INNER JOIN cdm52.concept c2 ON ca1.ancestor_concept_id = c2.concept_id
AND c2.vocabulary_id = ‘ATC’
AND c2.concept_class_id = ‘ATC 2nd’
GROUP BY c1.concept_id, c1.concept_name
) atc5_to_atc3 ON rxnorm_to_atc5.atc5_concept_id = atc5_to_atc3.atc5_concept_id
LEFT JOIN (
SELECT
c1.concept_id AS atc3_concept_id,
c1.concept_name AS atc3_concept_name,
max(c2.concept_id) AS atc1_concept_id
FROM cdm52.concept c1
INNER JOIN cdm52.concept_ancestor ca1 ON c1.concept_id = ca1.descendant_concept_id
AND c1.vocabulary_id = ‘ATC’
AND c1.concept_class_id = ‘ATC 2nd’
INNER JOIN cdm52.concept c2 ON ca1.ancestor_concept_id = c2.concept_id
AND c2.vocabulary_id = ‘ATC’
AND c2.concept_class_id = ‘ATC 1st’
GROUP BY c1.concept_id, c1.concept_name
) atc3_to_atc1 ON atc5_to_atc3.atc3_concept_id = atc3_to_atc1.atc3_concept_id
LEFT JOIN cdm52.concept atc1 ON atc3_to_atc1.atc1_concept_id = atc1.concept_id;

/********** MEASUREMENT **********/
INSERT INTO webapi.concept_hierarchy
(concept_id, concept_name, treemap, level1_concept_name, level2_concept_name, level3_concept_name)
SELECT
m.concept_id,
m.concept_name AS concept_name,
CAST(‘Measurement’ AS VARCHAR(20)) AS treemap,
CAST(max(c1.concept_name) AS VARCHAR(255)) AS level1_concept_name,
CAST(max(c2.concept_name) AS VARCHAR(255)) AS level2_concept_name,
CAST(max(c3.concept_name) AS VARCHAR(255)) AS level3_concept_name
FROM (
SELECT DISTINCT
concept_id,
concept_name
FROM cdm52.concept c
WHERE domain_id = ‘Measurement’
) m
LEFT JOIN cdm52.concept_ancestor ca1 ON M.concept_id = ca1.DESCENDANT_CONCEPT_ID AND ca1.min_levels_of_separation = 1
LEFT JOIN cdm52.concept c1 ON ca1.ANCESTOR_CONCEPT_ID = c1.concept_id
LEFT JOIN cdm52.concept_ancestor ca2 ON c1.concept_id = ca2.DESCENDANT_CONCEPT_ID AND ca2.min_levels_of_separation = 1
LEFT JOIN cdm52.concept c2 ON ca2.ANCESTOR_CONCEPT_ID = c2.concept_id
LEFT JOIN cdm52.concept_ancestor ca3 ON c2.concept_id = ca3.DESCENDANT_CONCEPT_ID AND ca3.min_levels_of_separation = 1
LEFT JOIN cdm52.concept c3 ON ca3.ANCESTOR_CONCEPT_ID = c3.concept_id
GROUP BY M.concept_id, M.concept_name;

/********** OBSERVATION **********/
INSERT INTO webapi.concept_hierarchy
(concept_id, concept_name, treemap, level1_concept_name, level2_concept_name, level3_concept_name)
SELECT
obs.concept_id,
obs.concept_name AS concept_name,
CAST(‘Observation’ AS VARCHAR(20)) AS treemap,
CAST(max(c1.concept_name) AS VARCHAR(255)) AS level1_concept_name,
CAST(max(c2.concept_name) AS VARCHAR(255)) AS level2_concept_name,
CAST(max(c3.concept_name) AS VARCHAR(255)) AS level3_concept_name
FROM (
SELECT
concept_id,
concept_name
FROM cdm52.concept
WHERE domain_id = ‘Observation’
) obs
LEFT JOIN cdm52.concept_ancestor ca1 ON obs.concept_id = ca1.DESCENDANT_CONCEPT_ID AND ca1.min_levels_of_separation = 1
LEFT JOIN cdm52.concept c1 ON ca1.ANCESTOR_CONCEPT_ID = c1.concept_id
LEFT JOIN cdm52.concept_ancestor ca2 ON c1.concept_id = ca2.DESCENDANT_CONCEPT_ID AND ca2.min_levels_of_separation = 1
LEFT JOIN cdm52.concept c2 ON ca2.ANCESTOR_CONCEPT_ID = c2.concept_id
LEFT JOIN cdm52.concept_ancestor ca3 ON c2.concept_id = ca3.DESCENDANT_CONCEPT_ID AND ca3.min_levels_of_separation = 1
LEFT JOIN cdm52.concept c3 ON ca3.ANCESTOR_CONCEPT_ID = c3.concept_id
GROUP BY obs.concept_id, obs.concept_name;

/********** PROCEDURE **********/
INSERT INTO webapi.concept_hierarchy
(concept_id, concept_name, treemap, level1_concept_name, level2_concept_name, level3_concept_name)
SELECT
procs.concept_id,
CAST(procs.proc_concept_name AS VARCHAR(400)) AS concept_name,
CAST(‘Procedure’ AS VARCHAR(20)) AS treemap,
CAST(max(proc_hierarchy.os3_concept_name) AS VARCHAR(255)) AS level2_concept_name,
CAST(max(proc_hierarchy.os2_concept_name) AS VARCHAR(255)) AS level3_concept_name,
CAST(max(proc_hierarchy.os1_concept_name) AS VARCHAR(255)) AS level4_concept_name
FROM
(
SELECT
c1.concept_id,
CONCAT(v1.vocabulary_name, ’ ', c1.concept_code, ': ', c1.concept_name) AS proc_concept_name
FROM cdm52.concept c1
INNER JOIN cdm52.vocabulary v1 ON c1.vocabulary_id = v1.vocabulary_id
WHERE c1.domain_id = ‘Procedure’
) procs
LEFT JOIN (
SELECT
ca0.DESCENDANT_CONCEPT_ID,
max(ca0.ancestor_concept_id) AS ancestor_concept_id
FROM cdm52.concept_ancestor ca0
INNER JOIN (
SELECT DISTINCT c2.concept_id AS os3_concept_id
FROM cdm52.concept_ancestor ca1
INNER JOIN cdm52.concept c1 ON ca1.DESCENDANT_CONCEPT_ID = c1.concept_id
INNER JOIN cdm52.concept_ancestor ca2 ON c1.concept_id = ca2.ANCESTOR_CONCEPT_ID
INNER JOIN cdm52.concept c2 ON ca2.DESCENDANT_CONCEPT_ID = c2.concept_id
WHERE ca1.ancestor_concept_id = 4040390
AND ca1.Min_LEVELS_OF_SEPARATION = 2
AND ca2.MIN_LEVELS_OF_SEPARATION = 1
) t1 ON ca0.ANCESTOR_CONCEPT_ID = t1.os3_concept_id
GROUP BY ca0.descendant_concept_id
) ca1 ON procs.concept_id = ca1.DESCENDANT_CONCEPT_ID
LEFT JOIN (
SELECT
proc_by_os1.os1_concept_name,
proc_by_os2.os2_concept_name,
proc_by_os3.os3_concept_name,
proc_by_os3.os3_concept_id
FROM (
SELECT
DESCENDANT_CONCEPT_ID AS os1_concept_id,
concept_name AS os1_concept_name
FROM cdm52.concept_ancestor ca1
INNER JOIN cdm52.concept c1 ON ca1.DESCENDANT_CONCEPT_ID = c1.concept_id
WHERE ancestor_concept_id = 4040390
AND Min_LEVELS_OF_SEPARATION = 1
) proc_by_os1
INNER JOIN (
SELECT
max(c1.CONCEPT_ID) AS os1_concept_id,
c2.concept_id AS os2_concept_id,
c2.concept_name AS os2_concept_name
FROM cdm52.concept_ancestor ca1
INNER JOIN cdm52.concept c1 ON ca1.DESCENDANT_CONCEPT_ID = c1.concept_id
INNER JOIN cdm52.concept_ancestor ca2 ON c1.concept_id = ca2.ANCESTOR_CONCEPT_ID
INNER JOIN cdm52.concept c2 ON ca2.DESCENDANT_CONCEPT_ID = c2.concept_id
WHERE ca1.ancestor_concept_id = 4040390
AND ca1.Min_LEVELS_OF_SEPARATION = 1
AND ca2.MIN_LEVELS_OF_SEPARATION = 1
GROUP BY c2.concept_id, c2.concept_name
) proc_by_os2 ON proc_by_os1.os1_concept_id = proc_by_os2.os1_concept_id
INNER JOIN (
SELECT
max(c1.CONCEPT_ID) AS os2_concept_id,
c2.concept_id AS os3_concept_id,
c2.concept_name AS os3_concept_name
FROM cdm52.concept_ancestor ca1
INNER JOIN cdm52.concept c1 ON ca1.DESCENDANT_CONCEPT_ID = c1.concept_id
INNER JOIN cdm52.concept_ancestor ca2 ON c1.concept_id = ca2.ANCESTOR_CONCEPT_ID
INNER JOIN cdm52.concept c2 ON ca2.DESCENDANT_CONCEPT_ID = c2.concept_id
WHERE ca1.ancestor_concept_id = 4040390
AND ca1.Min_LEVELS_OF_SEPARATION = 2
AND ca2.MIN_LEVELS_OF_SEPARATION = 1
GROUP BY c2.concept_id, c2.concept_name
) proc_by_os3 ON proc_by_os2.os2_concept_id = proc_by_os3.os2_concept_id
) proc_hierarchy ON ca1.ancestor_concept_id = proc_hierarchy.os3_concept_id
GROUP BY procs.concept_id, procs.proc_concept_name;

감사합니다. 직접 넣으면 되긴 합니다만,
왜 concept_hierarchy가 생성이 되지 않았던걸까요?

글쎄요. 다른 테이블이 정상적으로 생성됐다면,
해당 테이블도 문제 없지 않을까 싶은데요.
정확한 이유는 저도 잘 모르겠습니다.
tomcat 로그를 확인해보시는게 좋을 듯 합니다.

그렇군요 ! 감사합니다.
좋은하루되세요 ^^

네 좋은하루되세요~

아래 R 코드만 돌려보시면서 로그를 확인해 보심은 어떨까요? (참조 : https://www.ohdsi.org/web/wiki/doku.php?id=documentation:software:atlas:achilles_v_1_5#creating_the_concept_hierarchy)

connectionDetails <- DatabaseConnector::createConnectionDetails(dbms = “postgresql”,
server = “localhost/ohdsi”,
user = “joe”,
password = “supersecret”)
cdmVocabSchema <- “my_cdm_schema”
resultsSchema <- “my_results_schema_goes_here”
hierarchy <- Achilles::conceptHierarchy(connectionDetails,
vocabDatabaseSchema=cdmVocabSchema,
resultsDatabaseSchema=resultsSchema)

안녕하세요 선생님.

예전부터 CDM을 구축하면서 위와같은 명령어는 처음 접해봤습니다.

wiki를 보니 hierarchy가 안보일때 사용하는 스크립트는 맞는것 같은데요.

저는 이런 에러가 떴습니다.
에러: 'conceptHierarchy’는 'namespace:Achilles’로부터 내보내어진 객체가 아닙니다

혹시 특정 achilles 버전이 있나요?
저는 현재 1.6.7버전의 아킬레스 라이브러리를 사용중입니다.

t