如何使用DuckDB C API向表中追加Array类型数据?
使用DuckDB C API插入固定长度UINTEGER数组
问题描述
现有DuckDB表结构:
name: VARCHAR, location: VARCHAR, lucky_numbers: UINTEGER[5]
使用C API插入数据时,已完成前两个字段的追加,但不清楚如何通过duckdb_append_data_chunk插入lucky_numbers字段的5元素整数数组。
完整实现代码
// 假设已完成数据库连接初始化 duckdb_appender appender; duckdb_appender_create(db_connection, NULL, db_table, &appender); // 追加前两个VARCHAR字段 duckdb_append_varchar(appender, "John Doe"); duckdb_append_varchar(appender, "Switzerland"); // 1. 定义数组对应的逻辑类型 duckdb_logical_type elem_type = duckdb_create_uint_type(); duckdb_logical_type array_type = duckdb_create_array_type(elem_type, 5); duckdb_destroy_logical_type(&elem_type); // 释放不再需要的元素类型 // 2. 创建DataChunk存储数组数据(仅1行) duckdb_data_chunk chunk; duckdb_data_chunk_create(array_type, 1, &chunk); // 准备要插入的数组数据 uint32_t nums[] = {2, 4, 6, 8, 10}; // 获取数组字段对应的向量,写入数据 duckdb_vector arr_vec = duckdb_data_chunk_get_vector(&chunk, 0); duckdb_vector_append_array_element(arr_vec, nums, 5); // 3. 将DataChunk追加到appender duckdb_append_data_chunk(appender, &chunk); // 清理资源 duckdb_data_chunk_destroy(&chunk); duckdb_destroy_logical_type(&array_type); // 结束行并销毁appender duckdb_appender_end_row(appender); duckdb_appender_destroy(&appender);
关键步骤说明
- 类型定义:先创建数组元素的
UINTEGER类型,再构建长度为5的数组类型,严格匹配表结构定义。 - DataChunk构建:创建仅包含1行的DataChunk,其类型与数组字段完全一致。
- 数组数据写入:通过
duckdb_vector_append_array_element将整数数组写入向量,注意数组长度必须和表定义的5保持一致,否则会触发类型不匹配错误。 - 资源释放:所有通过DuckDB API创建的类型、DataChunk、Appender都需要手动销毁,避免内存泄漏。
内容的提问来源于stack exchange,提问作者gl13
相关产品推荐
相关产品推荐

