
Exasol 데이터베이스에서 Mojo로 작성한 사용자 정의 함수를 실행하는 스크립트 언어 컨테이너(SLC)가 공개됐다. 제작팀은 Linux ARM64와 x86_64에서 바이너리가 컴파일되고 ZMQ·프로토콜 버퍼 오프라인 자체 테스트를 통과했다고 밝혔지만, 실제 Exasol에서의 함수 호출은 아직 확인되지 않았다.
프로젝트 저장소는 프로토콜 통신과 함수 실행을 하나의 Mojo 바이너리 mojoudfclient에 담는다. Rust, C++ 호스트, 컴파일된 .so 플러그인 로딩 없이 Exasol의 ZMQ 요청·응답 및 프로토콜 버퍼 기반 UDF 프로토콜을 직접 처리한다. 외부 C 의존성은 libzmq 하나다.
컨테이너에는 DOUBLE_MOJO_NATIVE 스칼라 함수, 그룹별 합산을 수행하는 SUM_POSITIVE 세트 함수, CPython을 호출하는 PY_SCALE이 예제로 포함됐다. 기본 방식에서는 UDF가 바이너리에 포함되므로 함수를 추가하거나 바꾸려면 컨테이너를 다시 빌드하고 배포해야 한다. 선택적으로 공유 객체 방식도 지원하며, 이 경우 .so를 BucketFS에 올리고 SQL 스크립트에 %udf_object를 지정한다. 공유 객체는 컨테이너와 같은 Mojo 도구 체인으로 빌드해야 한다.
제작팀은 먼저 SQL로 문제를 표현하고, 복잡한 행·그룹별 처리나 반복 알고리즘처럼 SQL이 적합하지 않은 경우에 UDF를 고려하라고 안내한다. Mojo는 네이티브 코드로 컴파일되며, Python.import_module을 통해 Python 패키지도 이용할 수 있다. 다만 Python 호출은 Mojo와 Python 사이의 경계를 넘으므로 수치 연산이 집중되는 구간보다는 라이브러리 활용에 적합하다고 설명한다.
배포 경로는 Exasol Personal, Enterprise, Nano로 나뉜다. Personal은 exasol slc custom install로 설치하고, Enterprise는 컨테이너 압축 파일을 BucketFS에 올려 등록한다. Nano는 압축을 푼 루트 파일 시스템을 /exa/slc와 /exa/sandbox에 마운트한다. 빌드 산출물은 데이터베이스 컨테이너와 같은 아키텍처여야 한다.
현재 범위와 검증 상태에는 제약이 있다. 오프라인 자체 테스트는 실제 바이너리로 ZMQ·프로토콜 버퍼 통신을 확인하지만, 실제 Exasol에서의 E2E 실행은 아직 성공 여부가 재확인되지 않았다. 이전 실DB 실행에서는 빈 결과가 나왔고, BIGINT가 NUMERIC/문자열 블록으로 전달되는 경우를 처리하도록 수정했으나 라이브 실행 검증은 남아 있다. 현재 함수는 주로 BIGINT 입력·출력을 다루며, 부동소수점 DOUBLE과 여러 다른 형식은 지원하지 않는다. EMITS 다중 행 출력도 아직 구현되지 않았다. 자세한 조건과 진단 방법은 현재 한계, 실행 진단 안내, 설계 문서에서 확인할 수 있다.
부록: 원문 예시
원문에 실린 예시 1
MOJO-DIAG script=DOUBLE_MOJO_NATIVE in_iter=1 single=0 in_types=[..] out_types=[..] | RUN->6 rows=1 i64=1 str=0 first_i64=21
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요