chDB-bun proporciona bindings FFI (Foreign Function Interface) experimentales para chDB, lo que le permite ejecutar consultas de ClickHouse directamente en sus aplicaciones de Bun sin dependencias externas.
# Instalar desde el repositorio de GitHubbun add github:chdb-io/chdb-bun# O clonar y compilar localmentegit clone https://github.com/chdb-io/chdb-bun.gitcd chdb-bunbun installbun run build
chDB-bun admite dos modos de consulta: consultas efímeras para operaciones puntuales y sesiones persistentes para mantener el estado de la base de datos.
Para consultas simples y puntuales que no requieren un estado persistente:
import { query } from 'chdb-bun';// Consulta básicaconst result = query("SELECT version()", "CSV");console.log(result); // "23.10.1.1"// Consulta con diferentes formatos de salidaconst jsonResult = query("SELECT 1 as id, 'Hello' as message", "JSON");console.log(jsonResult);// Consulta con cálculosconst mathResult = query("SELECT 2 + 2 as sum, pi() as pi_value", "Pretty");console.log(mathResult);// Consulta de información del sistemaconst systemInfo = query("SELECT * FROM system.functions LIMIT 5", "CSV");console.log(systemInfo);
Para operaciones complejas que requieren mantener el estado entre consultas:
import { Session } from 'chdb-bun';// Crear una sesión con almacenamiento persistenteconst sess = new Session('./chdb-bun-tmp');try { // Crear una base de datos y una tabla 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"); // Insertar datos sess.query(` INSERT INTO mydb.users VALUES (1, 'Alice', 'alice@example.com'), (2, 'Bob', 'bob@example.com'), (3, 'Charlie', 'charlie@example.com') `, "CSV"); // Consultar los datos const users = sess.query("SELECT * FROM mydb.users ORDER BY id", "JSON"); console.log("Users:", users); // Crear y usar funciones personalizadas sess.query("CREATE FUNCTION IF NOT EXISTS hello AS () -> 'Hello chDB'", "CSV"); const greeting = sess.query("SELECT hello() as message", "Pretty"); console.log(greeting); // Consultas de agregación 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 { // Limpiar siempre la sesión para liberar recursos sess.cleanup(); // Esto elimina los archivos de la base de datos}