Skip to content

anothersmith/node-duckdb

 
 

Repository files navigation

Node-DuckDB

Production ready DuckDB Node.js library written in TypeScript.

Overview

  • 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.

Getting Started

Installation

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.

Usage

Using node-duckdb is easy:

const db = new DuckDB();
const connection = new Connection(db);
await connection.execute("SELECT * FROM mytable;");

Promise API example

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();

Streaming API example

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);

Complete sample project

You can see a complete sample project using node-duckdb here.

API

API documentation is found here.

Known Issues

Known issues and their workarounds are found here.

Developing

Documentation for developers is found here.