使用 MonetdbLite C API 中的monetdb_append



我正在尝试在应用程序中使用MonetDBLite C。根据PDF(https://arxiv.org/pdf/1805.08520.pdf(,我将受益于使用monetdb_append函数加载大量数据的速度提高。从 PDF 开始:

除了发出 SQL 查询外,嵌入式进程还可以 使用 monetdb_append函数。此函数采用架构和 要追加到的表的名称以及对要追加到的数据的引用 表的列。此功能可实现高效的批量 插入,因为解析涉及大量开销 单个 INSERT INTO 语句,当 用户想要插入大量数据。

这是嵌入式中的声明。

char* monetdb_append(monetdb_connection conn, const char* schema, const char* table, append_data *data, int ncols);

有没有人举例如何使用此功能?我假设append_data结构的batid是 BAT 结构的识别。但目前尚不清楚如何将其与现有API一起使用。

二进制追加确实需要构造与要追加的列一样多的 BAT 结构。需要包含一些额外的 MonetDBLite 标头(monetdb_config.hgdk.h(。重要的部分是:

  1. 使用具有正确类型和计数的COLnew创建 BAT。
  2. 向它们添加一些值,例如通过指针访问(正确类型长度(到bat->theap.base[i]
  3. 为追加设置 BAT 属性(BATsetcountBATsettrivpropBBPkeepref
  4. (
  5. 分配和填充append_data数据结构。
  6. 呼叫monetdb_append

下面是一个简短的示例,如何将 42 个值附加到包含整数 (CREATE TABLE test (my_column INTEGER);( 的单列表

// startup, connect etc. before
size_t n = 42;
BAT* b = COLnew(0, TYPE_int, n, TRANSIENT);
for (size_t i = 0; i < n; i++) {
((int*)b->theap.base)[i] = i; // or whatever
}
BATsetcount(b, n);
BATsettrivprop(b);
BBPkeepref(b->batCacheid);
append_data *ad = NULL;
ad = malloc(1 * sizeof(append_data));
ad[0].colname = "my_column";
ad[0].batid = b->batCacheid;
if (monetdb_append(conn, "sys", "test", ad, 1) != NULL) { /* handle error */}

相关内容

  • 没有找到相关文章

最新更新