메인 콘텐츠로 건너뛰기
chDB-bun은 chDB용 Experimental FFI(Foreign Function Interface) 바인딩을 제공하며, 이를 통해 Bun 애플리케이션에서 외부 의존성 없이 ClickHouse 쿼리를 직접 실행할 수 있습니다.

설치

1단계: 시스템 의존성 설치

먼저 필요한 시스템 의존성을 설치합니다:

libchdb 설치

curl -sL https://lib.chdb.io | bash

빌드 도구 설치

시스템에 gcc 또는 clang이 설치되어 있어야 합니다.

2단계: chDB-bun 설치

# GitHub 리포지토리에서 설치
bun add github:chdb-io/chdb-bun

# 또는 로컬에서 클론 후 빌드
git clone https://github.com/chdb-io/chdb-bun.git
cd chdb-bun
bun install
bun run build

사용법

chDB-bun은 두 가지 쿼리 모드를 지원합니다. 일회성 작업을 위한 임시 쿼리와 데이터베이스 상태 유지를 위한 지속형 세션입니다.

임시 쿼리

지속적으로 유지되는 상태가 필요 없는 간단한 일회성 쿼리의 경우:
import { query } from 'chdb-bun';

// 기본 쿼리
const result = query("SELECT version()", "CSV");
console.log(result); // "23.10.1.1"

// 다양한 출력 형식으로 쿼리
const jsonResult = query("SELECT 1 as id, 'Hello' as message", "JSON");
console.log(jsonResult);

// 계산이 포함된 쿼리
const mathResult = query("SELECT 2 + 2 as sum, pi() as pi_value", "Pretty");
console.log(mathResult);

// 시스템 정보 쿼리
const systemInfo = query("SELECT * FROM system.functions LIMIT 5", "CSV");
console.log(systemInfo);

지속형 세션

여러 쿼리 간에 상태를 유지해야 하는 복잡한 작업의 경우:
import { Session } from 'chdb-bun';

// 영구 저장소로 세션 생성
const sess = new Session('./chdb-bun-tmp');

try {
    // 데이터베이스 및 테이블 생성
    sess.query(`
        CREATE DATABASE IF NOT EXISTS mydb;
        CREATE TABLE IF NOT EXISTS mydb.users (
            id UInt32,
            name String,
            email String
        ) ENGINE = MergeTree() ORDER BY id
    `, "CSV");

    // 데이터 삽입
    sess.query(`
        INSERT INTO mydb.users VALUES 
        (1, 'Alice', 'alice@example.com'),
        (2, 'Bob', 'bob@example.com'),
        (3, 'Charlie', 'charlie@example.com')
    `, "CSV");

    // 데이터 쿼리
    const users = sess.query("SELECT * FROM mydb.users ORDER BY id", "JSON");
    console.log("Users:", users);

    // 사용자 정의 함수 생성 및 사용
    sess.query("CREATE FUNCTION IF NOT EXISTS hello AS () -> 'Hello chDB'", "CSV");
    const greeting = sess.query("SELECT hello() as message", "Pretty");
    console.log(greeting);

    // 집계 쿼리
    const stats = sess.query(`
        SELECT 
            COUNT(*) as total_users,
            MAX(id) as max_id,
            MIN(id) as min_id
        FROM mydb.users
    `, "JSON");
    console.log("Statistics:", stats);

} finally {
    // 리소스 해제를 위해 반드시 세션을 정리
    sess.cleanup(); // 데이터베이스 파일을 삭제합니다
}
마지막 수정일 2026년 6월 10일