You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过DuckDB Node.js API直接加载JSON对象至数据表?

DuckDB Node.js 无需写入文件加载JSON对象的实现方法

当然可以无需写入文件直接加载JSON对象到DuckDB,以下是几种实用的实现方式:

方法一:参数绑定批量插入

适合数据量中等、结构明确的场景,安全性高(自动处理特殊字符转义):

const duckdb = require('duckdb');
const db = new duckdb.Database(':memory:');

// 待导入的JSON对象数组
const jsonData = [
  { id: 1, name: 'Alice', age: 30 },
  { id: 2, name: 'Bob', age: 25 }
];

// 1. 创建匹配结构的表
db.run('CREATE TABLE users (id INTEGER, name VARCHAR, age INTEGER)');

// 2. 准备预编译插入语句
const insertStmt = db.prepare('INSERT INTO users VALUES (?, ?, ?)');

// 3. 遍历JSON数据完成插入
jsonData.forEach(item => {
  insertStmt.run(item.id, item.name, item.age);
});

// 验证结果
db.all('SELECT * FROM users', (err, rows) => {
  if (err) throw err;
  console.log(rows);
});

方法二:通过VALUES语句构造表

适合小型数据集,写法简洁:

const duckdb = require('duckdb');
const db = new duckdb.Database(':memory:');

const jsonData = [
  { id: 1, name: 'Alice', age: 30 },
  { id: 2, name: 'Bob', age: 25 }
];

// 将JSON对象转为SQL VALUES格式的字符串,注意转义单引号
const rowsStr = jsonData.map(item => 
  `(${item.id}, '${item.name.replace(/'/g, "''")}', ${item.age})`
).join(', ');

// 直接创建表并导入数据
db.run(`CREATE TABLE users AS SELECT * FROM VALUES ${rowsStr} AS t(id, name, age)`);

// 验证结果
db.all('SELECT * FROM users', (err, rows) => {
  if (err) throw err;
  console.log(rows);
});

方法三:从内存Buffer导入JSON Lines数据

适合大数据量场景,利用DuckDB的COPY功能直接读取内存缓冲区:

const duckdb = require('duckdb');
const db = new duckdb.Database(':memory:');

const jsonData = [
  { id: 1, name: 'Alice', age: 30 },
  { id: 2, name: 'Bob', age: 25 }
];

// 将JSON数组转为JSON Lines格式(每行一个JSON对象)
const jsonLines = jsonData.map(JSON.stringify).join('\n');
const dataBuffer = Buffer.from(jsonLines);

// 1. 创建表
db.run('CREATE TABLE users (id INTEGER, name VARCHAR, age INTEGER)');

// 2. 注册内存缓冲区到DuckDB
db.register_buffer('json_data_buf', dataBuffer);

// 3. 从缓冲区导入数据
db.run(`COPY users FROM 'buffer://json_data_buf' (FORMAT JSON)`);

// 验证结果
db.all('SELECT * FROM users', (err, rows) => {
  if (err) throw err;
  console.log(rows);
});

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:35:16