⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
表函数

表函数 API 可用于定义一个表函数,随后即可在 DuckDB 查询的 FROM 子句中调用该函数。

API参考概览

duckdb_table_function duckdb_create_table_function();
void duckdb_destroy_table_function(duckdb_table_function *table_function);
void duckdb_table_function_set_name(duckdb_table_function table_function, const char *name);
void duckdb_table_function_add_parameter(duckdb_table_function table_function, duckdb_logical_type type);
void duckdb_table_function_add_named_parameter(duckdb_table_function table_function, const char *name, duckdb_logical_type type);
void duckdb_table_function_set_extra_info(duckdb_table_function table_function, void *extra_info, duckdb_delete_callback_t destroy);
void duckdb_table_function_set_bind(duckdb_table_function table_function, duckdb_table_function_bind_t bind);
void duckdb_table_function_set_init(duckdb_table_function table_function, duckdb_table_function_init_t init);
void duckdb_table_function_set_local_init(duckdb_table_function table_function, duckdb_table_function_init_t init);
void duckdb_table_function_set_function(duckdb_table_function table_function, duckdb_table_function_t function);
void duckdb_table_function_supports_projection_pushdown(duckdb_table_function table_function, bool pushdown);
duckdb_state duckdb_register_table_function(duckdb_connection con, duckdb_table_function function);

表函数绑定 (Table Function Bind)

void *duckdb_bind_get_extra_info(duckdb_bind_info info);
void duckdb_table_function_get_client_context(duckdb_bind_info info, duckdb_client_context *out_context);
void duckdb_bind_add_result_column(duckdb_bind_info info, const char *name, duckdb_logical_type type);
idx_t duckdb_bind_get_parameter_count(duckdb_bind_info info);
duckdb_value duckdb_bind_get_parameter(duckdb_bind_info info, idx_t index);
duckdb_value duckdb_bind_get_named_parameter(duckdb_bind_info info, const char *name);
void duckdb_bind_set_bind_data(duckdb_bind_info info, void *bind_data, duckdb_delete_callback_t destroy);
void duckdb_bind_set_cardinality(duckdb_bind_info info, idx_t cardinality, bool is_exact);
void duckdb_bind_set_error(duckdb_bind_info info, const char *error);

表函数初始化 (Table Function Init)

void *duckdb_init_get_extra_info(duckdb_init_info info);
void *duckdb_init_get_bind_data(duckdb_init_info info);
void duckdb_init_set_init_data(duckdb_init_info info, void *init_data, duckdb_delete_callback_t destroy);
idx_t duckdb_init_get_column_count(duckdb_init_info info);
idx_t duckdb_init_get_column_index(duckdb_init_info info, idx_t column_index);
void duckdb_init_set_max_threads(duckdb_init_info info, idx_t max_threads);
void duckdb_init_set_error(duckdb_init_info info, const char *error);

表函数 (Table Function)

void *duckdb_function_get_extra_info(duckdb_function_info info);
void *duckdb_function_get_bind_data(duckdb_function_info info);
void *duckdb_function_get_init_data(duckdb_function_info info);
void *duckdb_function_get_local_init_data(duckdb_function_info info);
void duckdb_function_set_error(duckdb_function_info info, const char *error);

duckdb_create_table_function

创建一个新的空表函数。

返回值应使用 duckdb_destroy_table_function 进行销毁。

返回值

表函数对象。

语法
duckdb_table_function duckdb_create_table_function(
  
);


duckdb_destroy_table_function

销毁给定的表函数对象。

语法
void duckdb_destroy_table_function(
  duckdb_table_function *table_function
);
参数
  • table_function:要销毁的表函数


duckdb_table_function_set_name

设置给定表函数的名称。

语法
void duckdb_table_function_set_name(
  duckdb_table_function table_function,
  const char *name
);
参数
  • table_function:表函数
  • name:表函数的名称


duckdb_table_function_add_parameter

为表函数添加参数。

语法
void duckdb_table_function_add_parameter(
  duckdb_table_function table_function,
  duckdb_logical_type type
);
参数
  • table_function:表函数。
  • type:参数类型。不能包含 INVALID。


duckdb_table_function_add_named_parameter

为表函数添加命名参数。

语法
void duckdb_table_function_add_named_parameter(
  duckdb_table_function table_function,
  const char *name,
  duckdb_logical_type type
);
参数
  • table_function:表函数。
  • name:参数名称。
  • type:参数类型。不能包含 INVALID。


duckdb_table_function_set_extra_info

为表函数分配额外信息,以便在绑定等阶段获取。

语法
void duckdb_table_function_set_extra_info(
  duckdb_table_function table_function,
  void *extra_info,
  duckdb_delete_callback_t destroy
);
参数
  • table_function:表函数
  • extra_info:额外信息
  • destroy:用于销毁额外信息(如有)的回调函数


duckdb_table_function_set_bind

设置表函数的绑定函数。

语法
void duckdb_table_function_set_bind(
  duckdb_table_function table_function,
  duckdb_table_function_bind_t bind
);
参数
  • table_function:表函数
  • bind:绑定函数


duckdb_table_function_set_init

设置表函数的初始化函数。

语法
void duckdb_table_function_set_init(
  duckdb_table_function table_function,
  duckdb_table_function_init_t init
);
参数
  • table_function:表函数
  • init:初始化函数


duckdb_table_function_set_local_init

设置表函数的线程局部初始化函数。

语法
void duckdb_table_function_set_local_init(
  duckdb_table_function table_function,
  duckdb_table_function_init_t init
);
参数
  • table_function:表函数
  • init:初始化函数


duckdb_table_function_set_function

设置表函数的主函数。

语法
void duckdb_table_function_set_function(
  duckdb_table_function table_function,
  duckdb_table_function_t function
);
参数
  • table_function:表函数
  • function:函数


duckdb_table_function_supports_projection_pushdown

设置给定的表函数是否支持投影下推 (projection pushdown)。

如果设置为 true,系统将在 init 阶段通过 duckdb_init_get_column_countduckdb_init_get_column_index 函数提供所有所需列的列表。如果设置为 false(默认值),系统将预期所有列都会被投影。

语法
void duckdb_table_function_supports_projection_pushdown(
  duckdb_table_function table_function,
  bool pushdown
);
参数
  • table_function:表函数
  • pushdown:如果表函数支持投影下推则为 True,否则为 False。


duckdb_register_table_function

在给定的连接中注册表函数对象。

该函数至少需要一个名称、一个绑定函数、一个初始化函数和一个主函数。

如果函数不完整或具有此名称的函数已存在,则会返回 DuckDBError。

语法
duckdb_state duckdb_register_table_function(
  duckdb_connection con,
  duckdb_table_function function
);
参数
  • con:要注册该函数的连接。
  • function:函数指针
返回值

注册是否成功。


duckdb_bind_get_extra_info

检索函数中通过 duckdb_table_function_set_extra_info 设置的额外信息。

语法
void *duckdb_bind_get_extra_info(
  duckdb_bind_info info
);
参数
  • info:信息对象
返回值

额外信息


duckdb_table_function_get_client_context

检索表函数绑定信息的客户端上下文。

语法
void duckdb_table_function_get_client_context(
  duckdb_bind_info info,
  duckdb_client_context *out_context
);
参数
  • info:表函数的绑定信息对象。
  • out_context:绑定信息的客户端上下文。必须使用 duckdb_destroy_client_context 进行销毁。


duckdb_bind_add_result_column

向表函数的输出添加结果列。

语法
void duckdb_bind_add_result_column(
  duckdb_bind_info info,
  const char *name,
  duckdb_logical_type type
);
参数
  • info:表函数的绑定信息。
  • name:列名。
  • type:逻辑列类型。


duckdb_bind_get_parameter_count

检索函数的常规(非命名)参数数量。

语法
idx_t duckdb_bind_get_parameter_count(
  duckdb_bind_info info
);
参数
  • info:信息对象
返回值

参数数量


duckdb_bind_get_parameter

检索给定索引处的参数。

结果必须使用 duckdb_destroy_value 进行销毁。

语法
duckdb_value duckdb_bind_get_parameter(
  duckdb_bind_info info,
  idx_t index
);
参数
  • info:信息对象
  • index:要获取的参数索引
返回值

参数的值。必须使用 duckdb_destroy_value 进行销毁。


duckdb_bind_get_named_parameter

检索具有给定名称的命名参数。

结果必须使用 duckdb_destroy_value 进行销毁。

语法
duckdb_value duckdb_bind_get_named_parameter(
  duckdb_bind_info info,
  const char *name
);
参数
  • info:信息对象
  • name:参数名称
返回值

参数的值。必须使用 duckdb_destroy_value 进行销毁。


duckdb_bind_set_bind_data

在表函数的绑定对象中设置用户提供的绑定数据。此对象可在执行期间再次检索。

语法
void duckdb_bind_set_bind_data(
  duckdb_bind_info info,
  void *bind_data,
  duckdb_delete_callback_t destroy
);
参数
  • info:表函数的绑定信息。
  • bind_data:绑定数据对象。
  • destroy:销毁绑定数据(如有)的回调函数。


duckdb_bind_set_cardinality

设置用于优化的表函数基数估计值。

语法
void duckdb_bind_set_cardinality(
  duckdb_bind_info info,
  idx_t cardinality,
  bool is_exact
);
参数
  • info:绑定数据对象。
  • is_exact:基数估计值是精确的还是近似值


duckdb_bind_set_error

报告在调用表函数的绑定时发生的错误。

语法
void duckdb_bind_set_error(
  duckdb_bind_info info,
  const char *error
);
参数
  • info:信息对象
  • error:错误消息


duckdb_init_get_extra_info

检索函数中通过 duckdb_table_function_set_extra_info 设置的额外信息。

语法
void *duckdb_init_get_extra_info(
  duckdb_init_info info
);
参数
  • info:信息对象
返回值

额外信息


duckdb_init_get_bind_data

获取在绑定期间通过 duckdb_bind_set_bind_data 设置的绑定数据。

请注意,绑定数据应被视为只读。若要跟踪状态,请改用初始化数据。

语法
void *duckdb_init_get_bind_data(
  duckdb_init_info info
);
参数
  • info:信息对象
返回值

绑定数据对象


duckdb_init_set_init_data

在初始化对象中设置用户提供的初始化数据。此对象可在执行期间再次检索。

语法
void duckdb_init_set_init_data(
  duckdb_init_info info,
  void *init_data,
  duckdb_delete_callback_t destroy
);
参数
  • info:信息对象
  • init_data:初始化数据对象。
  • destroy:将用于销毁初始化数据(如有)的回调函数


duckdb_init_get_column_count

返回投影列的数量。

如果启用了投影下推,则必须使用此函数来确定要输出哪些列。

语法
idx_t duckdb_init_get_column_count(
  duckdb_init_info info
);
参数
  • info:信息对象
返回值

投影列的数量。


duckdb_init_get_column_index

返回指定位置处投影列的列索引。

如果启用了投影下推,则必须使用此函数来确定要输出哪些列。

语法
idx_t duckdb_init_get_column_index(
  duckdb_init_info info,
  idx_t column_index
);
参数
  • info:信息对象
  • column_index:要获取投影列索引的位置,范围为 0..duckdb_init_get_column_count(info)
返回值

投影列的列索引。


duckdb_init_set_max_threads

设置可以并行处理此表函数的线程数(默认值:1)

语法
void duckdb_init_set_max_threads(
  duckdb_init_info info,
  idx_t max_threads
);
参数
  • info:信息对象
  • max_threads:可以处理此表函数的最大线程数


duckdb_init_set_error

报告在调用初始化时发生的错误。

语法
void duckdb_init_set_error(
  duckdb_init_info info,
  const char *error
);
参数
  • info:信息对象
  • error:错误消息


duckdb_function_get_extra_info

检索函数中通过 duckdb_table_function_set_extra_info 设置的额外信息。

语法
void *duckdb_function_get_extra_info(
  duckdb_function_info info
);
参数
  • info:信息对象
返回值

额外信息


duckdb_function_get_bind_data

获取通过 duckdb_bind_set_bind_data 设置的表函数绑定数据。

请注意,绑定数据是只读的。若要跟踪状态,请改用初始化数据。

语法
void *duckdb_function_get_bind_data(
  duckdb_function_info info
);
参数
  • info:函数信息对象。
返回值

绑定数据对象。


duckdb_function_get_init_data

获取在初始化期间通过 duckdb_init_set_init_data 设置的初始化数据。

语法
void *duckdb_function_get_init_data(
  duckdb_function_info info
);
参数
  • info:信息对象
返回值

初始化数据对象


duckdb_function_get_local_init_data

获取在 local_init 期间通过 duckdb_init_set_init_data 设置的线程局部初始化数据。

语法
void *duckdb_function_get_local_init_data(
  duckdb_function_info info
);
参数
  • info:信息对象
返回值

初始化数据对象


duckdb_function_set_error

报告在执行函数时发生的错误。

语法
void duckdb_function_set_error(
  duckdb_function_info info,
  const char *error
);
参数
  • info:信息对象
  • error:错误消息


© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南