⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
数据块

数据块表示表的水平切片。它们包含多个向量,每个向量最多可容纳VECTOR_SIZE行。向量大小可以通过duckdb_vector_size函数获取,并且是可配置的,但通常设置为2048

数据块和向量是DuckDB用于原生存储和表示数据的方式。因此,数据块接口是与DuckDB交互最有效的方式。但是,请注意,使用数据块API正确地与DuckDB交互需要了解DuckDB的内部向量格式。

数据块可以通过两种方式使用

  • 读取数据:数据块可以通过duckdb_fetch_chunk方法从查询结果中获取,或作为用户定义函数的输入。在这种情况下,可以使用向量方法来读取单个值。
  • 写入数据:数据块可以使用duckdb_create_data_chunk创建。然后数据块可以填充值,并用于duckdb_append_data_chunk将数据写入数据库。

与数据块交互的主要方式是使用duckdb_data_chunk_get_vector方法获取数据块的内部向量。之后,可以使用向量方法来读取或写入各个向量。

API参考概览

duckdb_data_chunk duckdb_create_data_chunk(duckdb_logical_type *types, idx_t column_count);
void duckdb_destroy_data_chunk(duckdb_data_chunk *chunk);
void duckdb_data_chunk_reset(duckdb_data_chunk chunk);
idx_t duckdb_data_chunk_get_column_count(duckdb_data_chunk chunk);
duckdb_vector duckdb_data_chunk_get_vector(duckdb_data_chunk chunk, idx_t col_idx);
idx_t duckdb_data_chunk_get_size(duckdb_data_chunk chunk);
void duckdb_data_chunk_set_size(duckdb_data_chunk chunk, idx_t size);

duckdb_create_data_chunk

使用指定的列类型创建一个空数据块。结果必须使用duckdb_destroy_data_chunk销毁。

语法
duckdb_data_chunk duckdb_create_data_chunk(
  duckdb_logical_type *types,
  idx_t column_count
);
参数
  • types:列类型数组。列类型不能包含ANY和INVALID类型。
  • column_count:列数。
返回值

数据块。


duckdb_destroy_data_chunk

销毁数据块并释放为该数据块分配的所有内存。

语法
void duckdb_destroy_data_chunk(
  duckdb_data_chunk *chunk
);
参数
  • chunk:要销毁的数据块。


duckdb_data_chunk_reset

重置数据块,清除有效性掩码并将数据块的基数设置为0。调用此方法后,您必须调用duckdb_vector_get_validityduckdb_vector_get_data以获取当前数据和有效性指针。

语法
void duckdb_data_chunk_reset(
  duckdb_data_chunk chunk
);
参数
  • chunk:要重置的数据块。


duckdb_data_chunk_get_column_count

获取数据块中的列数。

语法
idx_t duckdb_data_chunk_get_column_count(
  duckdb_data_chunk chunk
);
参数
  • chunk:要从中获取数据的数据块。
返回值

数据块中的列数。


duckdb_data_chunk_get_vector

获取数据块中指定列索引处的向量。

向量指针在数据块存在期间有效。它不需要被销毁。

语法
duckdb_vector duckdb_data_chunk_get_vector(
  duckdb_data_chunk chunk,
  idx_t col_idx
);
参数
  • chunk:要从中获取数据的数据块。
返回值

向量。


duckdb_data_chunk_get_size

获取数据块中当前的元组数。

语法
idx_t duckdb_data_chunk_get_size(
  duckdb_data_chunk chunk
);
参数
  • chunk:要从中获取数据的数据块。
返回值

数据块中的元组数。


duckdb_data_chunk_set_size

设置数据块中当前的元组数。

语法
void duckdb_data_chunk_set_size(
  duckdb_data_chunk chunk,
  idx_t size
);
参数
  • chunk:要设置大小的数据块。
  • size:数据块中的元组数。