Saltar al contenido principal
chDB-node proporciona bindings de Node.js para chDB, lo que te permite ejecutar consultas de ClickHouse directamente en tus aplicaciones de Node.js sin ninguna dependencia externa.

Instalación

npm install chdb

Uso

chDB-node admite dos modos de consulta: consultas independientes para operaciones sencillas y consultas basadas en sesión para mantener el estado de la base de datos.

Consultas independientes

Para consultas simples e independientes que no requieren un estado persistente:
const { query } = require("chdb");

// Consulta básica
const result = query("SELECT version()", "CSV");
console.log("ClickHouse version:", result);

// Consulta con múltiples columnas
const multiResult = query("SELECT 'Hello' as greeting, 'chDB' as engine, 42 as answer", "CSV");
console.log("Multi-column result:", multiResult);

// Operaciones matemáticas
const mathResult = query("SELECT 2 + 2 as sum, pi() as pi_value", "JSON");
console.log("Math result:", mathResult);

// Información del sistema
const systemInfo = query("SELECT * FROM system.functions LIMIT 5", "Pretty");
console.log("System functions:", systemInfo);

Consultas basadas en sesión

const { Session } = require("chdb");

// Crear una sesión con almacenamiento persistente
const session = new Session("./chdb-node-data");

try {
    // Crear base de datos y tabla
    session.query(`
        CREATE DATABASE IF NOT EXISTS myapp;
        CREATE TABLE IF NOT EXISTS myapp.users (
            id UInt32,
            name String,
            email String,
            created_at DateTime DEFAULT now()
        ) ENGINE = MergeTree() ORDER BY id
    `);

    // Insertar datos de muestra
    session.query(`
        INSERT INTO myapp.users (id, name, email) VALUES 
        (1, 'Alice', 'alice@example.com'),
        (2, 'Bob', 'bob@example.com'),
        (3, 'Charlie', 'charlie@example.com')
    `);

    // Consultar los datos con distintos formatos
    const csvResult = session.query("SELECT * FROM myapp.users ORDER BY id", "CSV");
    console.log("CSV Result:", csvResult);

    const jsonResult = session.query("SELECT * FROM myapp.users ORDER BY id", "JSON");
    console.log("JSON Result:", jsonResult);

    // Consultas de agregación
    const stats = session.query(`
        SELECT 
            COUNT(*) as total_users,
            MAX(id) as max_id,
            MIN(created_at) as earliest_signup
        FROM myapp.users
    `, "Pretty");
    console.log("User Statistics:", stats);

} finally {
    // Limpiar siempre la sesión
    session.cleanup(); // Esto elimina los archivos de la base de datos
}

Procesamiento de datos externos

const { Session } = require("chdb");

const session = new Session("./data-processing");

try {
    // Procesar datos CSV desde URL
    const result = session.query(`
        SELECT 
            COUNT(*) as total_records,
            COUNT(DISTINCT "UserID") as unique_users
        FROM url('https://datasets.clickhouse.com/hits/hits.csv', 'CSV') 
        LIMIT 1000
    `, "JSON");
    
    console.log("External data analysis:", result);

    // Crear tabla a partir de datos externos
    session.query(`
        CREATE TABLE web_analytics AS
        SELECT * FROM url('https://datasets.clickhouse.com/hits/hits.csv', 'CSV')
        LIMIT 10000
    `);

    // Analizar los datos importados
    const analysis = session.query(`
        SELECT 
            toDate("EventTime") as date,
            COUNT(*) as events,
            COUNT(DISTINCT "UserID") as unique_users
        FROM web_analytics
        GROUP BY date
        ORDER BY date
        LIMIT 10
    `, "Pretty");
    
    console.log("Daily analytics:", analysis);

} finally {
    session.cleanup();
}

Manejo de errores

Gestione siempre los errores de forma adecuada al trabajar con chDB:
const { query, Session } = require("chdb");

// Manejo de errores para consultas independientes
function safeQuery(sql, format = "CSV") {
    try {
        const result = query(sql, format);
        return { success: true, data: result };
    } catch (error) {
        console.error("Query error:", error.message);
        return { success: false, error: error.message };
    }
}

// Ejemplo de uso
const result = safeQuery("SELECT invalid_syntax");
if (result.success) {
    console.log("Query result:", result.data);
} else {
    console.log("Query failed:", result.error);
}

// Manejo de errores para sesiones
function safeSessionQuery() {
    const session = new Session("./error-test");
    
    try {
        // Esto generará un error debido a una sintaxis inválida
        const result = session.query("CREATE TABLE invalid syntax", "CSV");
        console.log("Unexpected success:", result);
    } catch (error) {
        console.error("Session query error:", error.message);
    } finally {
        // Limpiar siempre, incluso si ocurrió un error
        session.cleanup();
    }
}

safeSessionQuery();

Repositorio de GitHub

Última modificación el 10 de junio de 2026