cdmduck
OMOP data. Simpler. Faster. Everywhere. — OHDSI ATLAS-compatible tools for the OMOP CDM, in pure Python on DuckDB. No Java, no Postgres, no Docker.
OMOP CDM · OHDSI ATLAS 호환 도구를 DuckDB 위에서, 순수 파이썬으로.
pip install cdmduck
| 모듈 | 원본 (OHDSI, Apache 2.0) | 상태 |
|---|---|---|
cdmduck.sqlrender |
SqlRender (Java) | 이식 완료 — Java 판과 58,440 건 글자 단위 일치 |
cdmduck.circe |
circe-be (Java) | 예정 |
cdmduck.webapi |
WebAPI 3.0 (Java) — ATLAS 3.0 화면이 부르는 API | 예정 |
from cdmduck.sqlrender import render, translate
sql = render("SELECT TOP 10 * FROM @cdm.person {@adult}?{WHERE year_of_birth < 2000};", cdm="main", adult=True)
translate(sql, "duckdb") # SELECT * FROM main.person WHERE year_of_birth < 2000 LIMIT 10;
cdmduck translate query.sql duckdb -p cdm=main
cdmduck dialects
Java 판과의 동등성 검증
tests/equiv/ — SqlRender R 테스트 문자열 2,009개, Circe·WebAPI SQL 763개(×16 방언·렌더·분할),
합성 조건식 3,000개를 Java 원본(tests/java, JDK 22+ 소스 실행)과 이 이식본에 넣어 결과를 비교한다.
python3 tests/equiv/build_corpus.py <클론 디렉터리> cases.tsv
python3 tests/equiv/run_java.py cases.tsv java.out 24
PYTHONPATH=src python3 tests/equiv/py_harness.py cases.tsv py.out 32
python3 tests/equiv/diff.py cases.tsv java.out py.out
알려진 차이: Java 내부 예외(EmptyStack, ArrayIndexOutOfBounds)의 메시지 문구만 다르다(예외가 나는 자리는 같다). BMP 밖 문자(이모지 등)는 Java 가 UTF-16 대리쌍 둘로 보므로 위치가 달라질 수 있다.
라이선스
Apache 2.0. src/cdmduck/sqlrender/csv/replacementPatterns.csv 와 ref/java, tests/java/org 는
OHDSI SqlRender 에서 가져왔다(third_party/, NOTICE).
Metadata
Release files for cdmduck 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cdmduck-0.0.1.tar.gz | 40.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cdmduck-0.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 81.7 kB
Release files / cdmduck-0.0.1.tar.gz
| Download URL | cdmduck-0.0.1.tar.gz |
|---|---|
| Size | 40.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ce1ed6d620f213a3e0e492d1d8e5337d648aee9ef68ca6e22da1e74df8e61671
|
|
BLAKE2b-256 checksum How to use checksums |
b6cdd902cb20785ff7e13db61db7836b3ed8ba880db86667f92d28ef72d222c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / cdmduck-0.0.1-py3-none-any.whl
| Download URL | cdmduck-0.0.1-py3-none-any.whl |
|---|---|
| Size | 41.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0e473b952a1e76136176ec1cef662077642ff5782acce856362f73c960f1fa9e
|
|
BLAKE2b-256 checksum How to use checksums |
697312e0164487e5a42563d6e3174b0e06d024832090c0d288fe59a986ed2667
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|