Zum Inhalt springen

Tabellenfunktionen

Die Tabellenfunktions-API kann verwendet werden, um eine Tabellenfunktion zu definieren, die dann innerhalb von DuckDB in der FROM-Klausel einer Abfrage aufgerufen werden kann.

API-Referenz im Überblick

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);

Tabellenfunktion 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);

Tabellenfunktion 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);

Tabellenfunktion

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

Erzeugt eine neue leere Tabellenfunktion.

Der Rückgabewert sollte mit duckdb_destroy_table_function zerstört werden.

Rückgabewert

Das Tabellenfunktionsobjekt.

Syntax
duckdb_table_function duckdb_create_table_function(
  
);

duckdb_destroy_table_function

Zerstört das angegebene Tabellenfunktionsobjekt.

Syntax
void duckdb_destroy_table_function(
  duckdb_table_function *table_function
);
Parameter
  • table_function: Die zu zerstörende Tabellenfunktion

duckdb_table_function_set_name

Setzt den Namen der angegebenen Tabellenfunktion.

Syntax
void duckdb_table_function_set_name(
  duckdb_table_function table_function,
  const char *name
);
Parameter
  • table_function: Die Tabellenfunktion
  • name: Der Name der Tabellenfunktion

duckdb_table_function_add_parameter

Fügt der Tabellenfunktion einen Parameter hinzu.

Syntax
void duckdb_table_function_add_parameter(
  duckdb_table_function table_function,
  duckdb_logical_type type
);
Parameter
  • table_function: Die Tabellenfunktion.
  • type: Der Parametertyp. Darf kein INVALID enthalten.

duckdb_table_function_add_named_parameter

Fügt der Tabellenfunktion einen benannten Parameter hinzu.

Syntax
void duckdb_table_function_add_named_parameter(
  duckdb_table_function table_function,
  const char *name,
  duckdb_logical_type type
);
Parameter
  • table_function: Die Tabellenfunktion.
  • name: Der Parametername.
  • type: Der Parametertyp. Darf kein INVALID enthalten.

duckdb_table_function_set_extra_info

Weist der Tabellenfunktion Extra-Informationen zu, die während des Bindens usw. geholt werden können.

Syntax
void duckdb_table_function_set_extra_info(
  duckdb_table_function table_function,
  void *extra_info,
  duckdb_delete_callback_t destroy
);
Parameter
  • table_function: Die Tabellenfunktion
  • extra_info: Die Extra-Informationen
  • destroy: Der Callback, der aufgerufen wird, um die Extra-Informationen zu zerstören (falls vorhanden)

duckdb_table_function_set_bind

Setzt die Bind-Funktion der Tabellenfunktion.

Syntax
void duckdb_table_function_set_bind(
  duckdb_table_function table_function,
  duckdb_table_function_bind_t bind
);
Parameter
  • table_function: Die Tabellenfunktion
  • bind: Die Bind-Funktion

duckdb_table_function_set_init

Setzt die Init-Funktion der Tabellenfunktion.

Syntax
void duckdb_table_function_set_init(
  duckdb_table_function table_function,
  duckdb_table_function_init_t init
);
Parameter
  • table_function: Die Tabellenfunktion
  • init: Die Init-Funktion

duckdb_table_function_set_local_init

Setzt die thread-lokale Init-Funktion der Tabellenfunktion.

Syntax
void duckdb_table_function_set_local_init(
  duckdb_table_function table_function,
  duckdb_table_function_init_t init
);
Parameter
  • table_function: Die Tabellenfunktion
  • init: Die Init-Funktion

duckdb_table_function_set_function

Setzt die Hauptfunktion der Tabellenfunktion.

Syntax
void duckdb_table_function_set_function(
  duckdb_table_function table_function,
  duckdb_table_function_t function
);
Parameter
  • table_function: Die Tabellenfunktion
  • function: Die Funktion

duckdb_table_function_supports_projection_pushdown

Setzt, ob die angegebene Tabellenfunktion Projection Pushdown unterstützt.

Wenn dies auf true gesetzt ist, stellt das System in der init-Phase eine Liste aller benötigten Spalten über die Funktionen duckdb_init_get_column_count und duckdb_init_get_column_index bereit. Wenn dies auf false gesetzt ist (der Standard), erwartet das System, dass alle Spalten projiziert werden.

Syntax
void duckdb_table_function_supports_projection_pushdown(
  duckdb_table_function table_function,
  bool pushdown
);
Parameter
  • table_function: Die Tabellenfunktion
  • pushdown: True, wenn die Tabellenfunktion Projection Pushdown unterstützt, andernfalls false.

duckdb_register_table_function

Registriert das Tabellenfunktionsobjekt innerhalb der angegebenen Verbindung.

Die Funktion benötigt mindestens einen Namen, eine Bind-Funktion, eine Init-Funktion und eine Hauptfunktion.

Wenn die Funktion unvollständig ist oder bereits eine Funktion mit diesem Namen existiert, wird DuckDBError zurückgegeben.

Syntax
duckdb_state duckdb_register_table_function(
  duckdb_connection con,
  duckdb_table_function function
);
Parameter
  • con: Die Verbindung, in der registriert wird.
  • function: Der Funktionszeiger
Rückgabewert

Ob die Registrierung erfolgreich war.


duckdb_bind_get_extra_info

Ermittelt die Extra-Infos der Funktion, wie in duckdb_table_function_set_extra_info gesetzt.

Syntax
void *duckdb_bind_get_extra_info(
  duckdb_bind_info info
);
Parameter
  • info: Das Info-Objekt
Rückgabewert

Die Extra-Infos


duckdb_table_function_get_client_context

Ermittelt den Client-Kontext der Bind-Infos einer Tabellenfunktion.

Syntax
void duckdb_table_function_get_client_context(
  duckdb_bind_info info,
  duckdb_client_context *out_context
);
Parameter
  • info: Das Bind-Info-Objekt der Tabellenfunktion.
  • out_context: Der Client-Kontext der Bind-Infos. Muss mit duckdb_destroy_client_context zerstört werden.

duckdb_bind_add_result_column

Fügt dem Output der Tabellenfunktion eine Ergebnisspalte hinzu.

Syntax
void duckdb_bind_add_result_column(
  duckdb_bind_info info,
  const char *name,
  duckdb_logical_type type
);
Parameter
  • info: Die Bind-Infos der Tabellenfunktion.
  • name: Der Spaltenname.
  • type: Der logische Spaltentyp.

duckdb_bind_get_parameter_count

Ermittelt die Anzahl der regulären (nicht benannten) Parameter der Funktion.

Syntax
idx_t duckdb_bind_get_parameter_count(
  duckdb_bind_info info
);
Parameter
  • info: Das Info-Objekt
Rückgabewert

Die Anzahl der Parameter


duckdb_bind_get_parameter

Ermittelt den Parameter am angegebenen Index.

Das Ergebnis muss mit duckdb_destroy_value zerstört werden.

Syntax
duckdb_value duckdb_bind_get_parameter(
  duckdb_bind_info info,
  idx_t index
);
Parameter
  • info: Das Info-Objekt
  • index: Der Index des zu holenden Parameters
Rückgabewert

Der Wert des Parameters. Muss mit duckdb_destroy_value zerstört werden.


duckdb_bind_get_named_parameter

Ermittelt einen benannten Parameter mit dem angegebenen Namen.

Das Ergebnis muss mit duckdb_destroy_value zerstört werden.

Syntax
duckdb_value duckdb_bind_get_named_parameter(
  duckdb_bind_info info,
  const char *name
);
Parameter
  • info: Das Info-Objekt
  • name: Der Name des Parameters
Rückgabewert

Der Wert des Parameters. Muss mit duckdb_destroy_value zerstört werden.


duckdb_bind_set_bind_data

Setzt die benutzerdefinierten Bind-Daten im Bind-Objekt der Tabellenfunktion. Dieses Objekt kann während der Ausführung erneut geholt werden.

Syntax
void duckdb_bind_set_bind_data(
  duckdb_bind_info info,
  void *bind_data,
  duckdb_delete_callback_t destroy
);
Parameter
  • info: Die Bind-Infos der Tabellenfunktion.
  • bind_data: Das Bind-Daten-Objekt.
  • destroy: Der Callback zum Zerstören der Bind-Daten (falls vorhanden).

duckdb_bind_set_cardinality

Setzt die Kardinalitätsschätzung für die Tabellenfunktion, verwendet zur Optimierung.

Syntax
void duckdb_bind_set_cardinality(
  duckdb_bind_info info,
  idx_t cardinality,
  bool is_exact
);
Parameter
  • info: Das Bind-Daten-Objekt.
  • is_exact: Ob die Kardinalitätsschätzung exakt oder eine Näherung ist

duckdb_bind_set_error

Meldet, dass beim Aufruf von Bind einer Tabellenfunktion ein Fehler aufgetreten ist.

Syntax
void duckdb_bind_set_error(
  duckdb_bind_info info,
  const char *error
);
Parameter
  • info: Das Info-Objekt
  • error: Die Fehlermeldung

duckdb_init_get_extra_info

Ermittelt die Extra-Infos der Funktion, wie in duckdb_table_function_set_extra_info gesetzt.

Syntax
void *duckdb_init_get_extra_info(
  duckdb_init_info info
);
Parameter
  • info: Das Info-Objekt
Rückgabewert

Die Extra-Infos


duckdb_init_get_bind_data

Holt die von duckdb_bind_set_bind_data während des Bindens gesetzten Bind-Daten.

Beachten Sie, dass die Bind-Daten als schreibgeschützt betrachtet werden sollten. Zum Verfolgen von Zustand verwenden Sie stattdessen die Init-Daten.

Syntax
void *duckdb_init_get_bind_data(
  duckdb_init_info info
);
Parameter
  • info: Das Info-Objekt
Rückgabewert

Das Bind-Daten-Objekt


duckdb_init_set_init_data

Setzt die benutzerdefinierten Init-Daten im Init-Objekt. Dieses Objekt kann während der Ausführung erneut geholt werden.

Syntax
void duckdb_init_set_init_data(
  duckdb_init_info info,
  void *init_data,
  duckdb_delete_callback_t destroy
);
Parameter
  • info: Das Info-Objekt
  • init_data: Das Init-Daten-Objekt.
  • destroy: Der Callback, der aufgerufen wird, um die Init-Daten zu zerstören (falls vorhanden)

duckdb_init_get_column_count

Gibt die Anzahl der projizierten Spalten zurück.

Diese Funktion muss verwendet werden, wenn Projection Pushdown aktiviert ist, um festzustellen, welche Spalten ausgegeben werden sollen.

Syntax
idx_t duckdb_init_get_column_count(
  duckdb_init_info info
);
Parameter
  • info: Das Info-Objekt
Rückgabewert

Die Anzahl der projizierten Spalten.


duckdb_init_get_column_index

Gibt den Spaltenindex der projizierten Spalte an der angegebenen Position zurück.

Diese Funktion muss verwendet werden, wenn Projection Pushdown aktiviert ist, um festzustellen, welche Spalten ausgegeben werden sollen.

Syntax
idx_t duckdb_init_get_column_index(
  duckdb_init_info info,
  idx_t column_index
);
Parameter
  • info: Das Info-Objekt
  • column_index: Der Index, an dem der projizierte Spaltenindex geholt wird, von 0..duckdb_init_get_column_count(info)
Rückgabewert

Der Spaltenindex der projizierten Spalte.


duckdb_init_set_max_threads

Setzt, wie viele Threads diese Tabellenfunktion parallel verarbeiten können (Standard: 1)

Syntax
void duckdb_init_set_max_threads(
  duckdb_init_info info,
  idx_t max_threads
);
Parameter
  • info: Das Info-Objekt
  • max_threads: Die maximale Anzahl von Threads, die diese Tabellenfunktion verarbeiten können

duckdb_init_set_error

Meldet, dass beim Aufruf von Init ein Fehler aufgetreten ist.

Syntax
void duckdb_init_set_error(
  duckdb_init_info info,
  const char *error
);
Parameter
  • info: Das Info-Objekt
  • error: Die Fehlermeldung

duckdb_function_get_extra_info

Ermittelt die Extra-Infos der Funktion, wie in duckdb_table_function_set_extra_info gesetzt.

Syntax
void *duckdb_function_get_extra_info(
  duckdb_function_info info
);
Parameter
  • info: Das Info-Objekt
Rückgabewert

Die Extra-Infos


duckdb_function_get_bind_data

Holt die von duckdb_bind_set_bind_data gesetzten Bind-Daten der Tabellenfunktion.

Beachten Sie, dass die Bind-Daten schreibgeschützt sind. Zum Verfolgen von Zustand verwenden Sie stattdessen die Init-Daten.

Syntax
void *duckdb_function_get_bind_data(
  duckdb_function_info info
);
Parameter
  • info: Das Funktions-Info-Objekt.
Rückgabewert

Das Bind-Daten-Objekt.


duckdb_function_get_init_data

Holt die von duckdb_init_set_init_data während des Init gesetzten Init-Daten.

Syntax
void *duckdb_function_get_init_data(
  duckdb_function_info info
);
Parameter
  • info: Das Info-Objekt
Rückgabewert

Das Init-Daten-Objekt


duckdb_function_get_local_init_data

Holt die thread-lokalen Init-Daten, die von duckdb_init_set_init_data während local_init gesetzt wurden.

Syntax
void *duckdb_function_get_local_init_data(
  duckdb_function_info info
);
Parameter
  • info: Das Info-Objekt
Rückgabewert

Das Init-Daten-Objekt


duckdb_function_set_error

Meldet, dass beim Ausführen der Funktion ein Fehler aufgetreten ist.

Syntax
void duckdb_function_set_error(
  duckdb_function_info info,
  const char *error
);
Parameter
  • info: Das Info-Objekt
  • error: Die Fehlermeldung