테이블 함수
테이블 함수
테이블 함수 API는 DuckDB 내에서 쿼리의 FROM 절에서 호출할 수 있는 테이블 함수를 정의할 때 사용해요. C API로 직접 확장 기능을 만들 때 아주 유용하답니다.
출처: 문서
본문
이 문서는 C API의 테이블 함수 관련 함수들(bind, init, 실행)의 전체 시그니처와 각 파라미터·반환값을 정리한 레퍼런스예요.
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);
테이블 함수 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);
테이블 함수 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);
테이블 함수
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
테이블 함수의 bind 함수를 설정해요.
문법
void duckdb_table_function_set_bind(
duckdb_table_function table_function,
duckdb_table_function_bind_t bind
);
파라미터
table_function: 테이블 함수bind: bind 함수
duckdb_table_function_set_init
테이블 함수의 init 함수를 설정해요.
문법
void duckdb_table_function_set_init(
duckdb_table_function table_function,
duckdb_table_function_init_t init
);
파라미터
table_function: 테이블 함수init: init 함수
duckdb_table_function_set_local_init
테이블 함수의 스레드 로컬 init 함수를 설정해요.
문법
void duckdb_table_function_set_local_init(
duckdb_table_function table_function,
duckdb_table_function_init_t init
);
파라미터
table_function: 테이블 함수init: 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
주어진 테이블 함수가 프로젝션 푸시다운을 지원하는지 여부를 설정해요.
true로 설정하면 시스템이 init 단계에서 duckdb_init_get_column_count와 duckdb_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
주어진 연결 내에 테이블 함수 객체를 등록해요.
이 함수는 최소한 이름, bind 함수, init 함수, 메인 함수가 필요해요.
함수가 불완전하거나 이 이름의 함수가 이미 존재하면 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: info 객체
반환값
추가 정보
duckdb_table_function_get_client_context
테이블 함수의 bind info의 클라이언트 컨텍스트를 검색해요.
문법
void duckdb_table_function_get_client_context(
duckdb_bind_info info,
duckdb_client_context *out_context
);
파라미터
info: 테이블 함수의 bind info 객체.out_context: bind info의 클라이언트 컨텍스트.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: 테이블 함수의 bind info.name: 컬럼 이름.type: 논리 컬럼 타입.
duckdb_bind_get_parameter_count
함수의 일반(비-명명) 파라미터 수를 검색해요.
문법
idx_t duckdb_bind_get_parameter_count(
duckdb_bind_info info
);
파라미터
info: info 객체
반환값
파라미터 수
duckdb_bind_get_parameter
주어진 인덱스의 파라미터를 검색해요.
결과는 duckdb_destroy_value로 파괴해야 해요.
문법
duckdb_value duckdb_bind_get_parameter(
duckdb_bind_info info,
idx_t index
);
파라미터
info: 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: info 객체name: 파라미터 이름
반환값
파라미터의 값. duckdb_destroy_value로 파괴해야 해요.
duckdb_bind_set_bind_data
테이블 함수의 bind 객체에 사용자 제공 bind 데이터를 설정해요. 이 객체는 실행 중에 다시 검색할 수 있어요.
문법
void duckdb_bind_set_bind_data(
duckdb_bind_info info,
void *bind_data,
duckdb_delete_callback_t destroy
);
파라미터
info: 테이블 함수의 bind info.bind_data: bind 데이터 객체.destroy: bind 데이터를 파괴할 콜백 (있을 경우).
duckdb_bind_set_cardinality
최적화에 사용되는 테이블 함수의 카디널리티 추정치를 설정해요.
문법
void duckdb_bind_set_cardinality(
duckdb_bind_info info,
idx_t cardinality,
bool is_exact
);
파라미터
info: bind 데이터 객체.is_exact: 카디널리티 추정치가 정확한지, 아니면 근사치인지 여부
duckdb_bind_set_error
테이블 함수에 bind를 호출하는 동안 오류가 발생했음을 보고해요.
문법
void duckdb_bind_set_error(
duckdb_bind_info info,
const char *error
);
파라미터
info: info 객체error: 오류 메시지
duckdb_init_get_extra_info
duckdb_table_function_set_extra_info에서 설정한 함수의 추가 정보를 검색해요.
문법
void *duckdb_init_get_extra_info(
duckdb_init_info info
);
파라미터
info: info 객체
반환값
추가 정보
duckdb_init_get_bind_data
bind 중에 duckdb_bind_set_bind_data가 설정한 bind 데이터를 가져와요.
bind 데이터는 읽기 전용으로 간주해야 한다는 점에 주의하세요. 상태 추적에는 대신 init 데이터를 사용하세요.
문법
void *duckdb_init_get_bind_data(
duckdb_init_info info
);
파라미터
info: info 객체
반환값
bind 데이터 객체
duckdb_init_set_init_data
init 객체에 사용자 제공 init 데이터를 설정해요. 이 객체는 실행 중에 다시 검색할 수 있어요.
문법
void duckdb_init_set_init_data(
duckdb_init_info info,
void *init_data,
duckdb_delete_callback_t destroy
);
파라미터
info: info 객체init_data: init 데이터 객체.destroy: init 데이터를 파괴하기 위해 호출될 콜백 (있을 경우)
duckdb_init_get_column_count
투영된 컬럼 수를 반환해요.
이 함수는 프로젝션 푸시다운이 활성화된 경우 어떤 컬럼을 내보낼지 알아내기 위해 사용해야 해요.
문법
idx_t duckdb_init_get_column_count(
duckdb_init_info info
);
파라미터
info: info 객체
반환값
투영된 컬럼 수.
duckdb_init_get_column_index
지정된 위치의 투영된 컬럼의 컬럼 인덱스를 반환해요.
이 함수는 프로젝션 푸시다운이 활성화된 경우 어떤 컬럼을 내보낼지 알아내기 위해 사용해야 해요.
문법
idx_t duckdb_init_get_column_index(
duckdb_init_info info,
idx_t column_index
);
파라미터
info: 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: info 객체max_threads: 이 테이블 함수를 처리할 수 있는 최대 스레드 수
duckdb_init_set_error
init 호출 중에 오류가 발생했음을 보고해요.
문법
void duckdb_init_set_error(
duckdb_init_info info,
const char *error
);
파라미터
info: info 객체error: 오류 메시지
duckdb_function_get_extra_info
duckdb_table_function_set_extra_info에서 설정한 함수의 추가 정보를 검색해요.
문법
void *duckdb_function_get_extra_info(
duckdb_function_info info
);
파라미터
info: info 객체
반환값
추가 정보
duckdb_function_get_bind_data
duckdb_bind_set_bind_data가 설정한 테이블 함수의 bind 데이터를 가져와요.
bind 데이터는 읽기 전용이라는 점에 주의하세요. 상태 추적에는 대신 init 데이터를 사용하세요.
문법
void *duckdb_function_get_bind_data(
duckdb_function_info info
);
파라미터
info: 함수 info 객체.
반환값
bind 데이터 객체.
duckdb_function_get_init_data
init 중에 duckdb_init_set_init_data가 설정한 init 데이터를 가져와요.
문법
void *duckdb_function_get_init_data(
duckdb_function_info info
);
파라미터
info: info 객체
반환값
init 데이터 객체
duckdb_function_get_local_init_data
local_init 중에 duckdb_init_set_init_data가 설정한 스레드 로컬 init 데이터를 가져와요.
문법
void *duckdb_function_get_local_init_data(
duckdb_function_info info
);
파라미터
info: info 객체
반환값
init 데이터 객체
duckdb_function_set_error
함수를 실행하는 동안 오류가 발생했음을 보고해요.
문법
void duckdb_function_set_error(
duckdb_function_info info,
const char *error
);
파라미터
info: info 객체error: 오류 메시지
더 알아보기 (Learn more)
- C 클라이언트 전반은
clients/c/overview문서를 참고해 주세요.