Production ready DuckDB Node.js library written in TypeScript.
- This is a library that adds support for DuckDB to NodeJS.
- It comes preinstalled with DuckDB ver 0.2.6+ with the parquet extension included.
- Has been tested to work with Linux and MacOS.
- Currently supports NodeJS v12.17.0+.
- Supports BIGINT and HUGEINT types as BigInt.
- Provides a Promise-based API and a Stream-based one.
To use Node-DuckDB in your project:
npm i node-duckdb
or
yarn add node-duckdb
Note: this will download the duckdb binary for your platform (currently Linux and MacOS are supported), or if it's not available will attempt to build it.
Using node-duckdb is easy:
const db = new DuckDB();
const connection = new Connection(db);
await connection.execute("SELECT * FROM mytable;");
An example using promises:
import { Connection, DuckDB } from "node-duckdb";
async function queryDatabaseWithIterator() {
// create new database in memory
const db = new DuckDB();
// create a new connection to the database
const connection = new Connection(db);
// perform some queries
await connection.executeIterator("CREATE TABLE people(id INTEGER, name VARCHAR);");
await connection.executeIterator("INSERT INTO people VALUES (1, 'Mark'), (2, 'Hannes'), (3, 'Bob');");
const result = await connection.executeIterator("SELECT * FROM people;");
// fetch and print result
console.log(result.fetchAllRows());
// release resources
connection.close();
db.close();
}
queryDatabaseWithIterator();
Getting a stream of data from DuckDB and piping into a destination stream:
import { Connection, DuckDB } from "node-duckdb";
const db = new DuckDB();
const connection = new Connection(db);
const resultStream = await connection.execute("SELECT * FROM people;");
// get destinationStream somehow
resultStream.pipe(destinationStream);
You can see a complete sample project using node-duckdb here.
API documentation is found here.
Known issues and their workarounds are found here.
Documentation for developers is found here.