Appender
Appender sind der effizienteste Weg, Daten aus der C-Schnittstelle in DuckDB zu laden, und werden für
schnelles Datenladen empfohlen. Der Appender ist deutlich schneller als Prepared Statements oder einzelne INSERT INTO-Anweisungen.
Anhängen erfolgt im zeilenweisen Format. Für jede Spalte sollte ein Aufruf duckdb_append_[type] erfolgen, danach
sollte die Zeile mit duckdb_appender_end_row abgeschlossen werden. Nachdem alle Zeilen angehängt wurden,
sollte duckdb_appender_destroy verwendet werden, um den Appender abzuschließen und den resultierenden Speicher aufzuräumen.
Beachten Sie, dass duckdb_appender_destroy immer für den resultierenden Appender aufgerufen werden sollte, auch wenn die Funktion
DuckDBError zurückgibt.
Beispiel
duckdb_query(con, "CREATE TABLE people (id INTEGER, name VARCHAR)", NULL);
duckdb_appender appender;if (duckdb_appender_create(con, NULL, "people", &appender) == DuckDBError) { // handle error}// append the first row (1, Mark)duckdb_append_int32(appender, 1);duckdb_append_varchar(appender, "Mark");duckdb_appender_end_row(appender);
// append the second row (2, Hannes)duckdb_append_int32(appender, 2);duckdb_append_varchar(appender, "Hannes");duckdb_appender_end_row(appender);
// finish appending and flush all the rows to the tableduckdb_appender_destroy(&appender);API-Referenz im Überblick
duckdb_state duckdb_appender_create(duckdb_connection connection, const char *schema, const char *table, duckdb_appender *out_appender);
duckdb_state duckdb_appender_create_ext(duckdb_connection connection, const char *catalog, const char *schema, const char *table, duckdb_appender *out_appender);
duckdb_state duckdb_appender_create_query(duckdb_connection connection, const char *query, idx_t column_count, duckdb_logical_type *types, const char *table_name, const char **column_names, duckdb_appender *out_appender);
idx_t duckdb_appender_column_count(duckdb_appender appender);
duckdb_logical_type duckdb_appender_column_type(duckdb_appender appender, idx_t col_idx);
const char *duckdb_appender_error(duckdb_appender appender);
duckdb_error_data duckdb_appender_error_data(duckdb_appender appender);
duckdb_state duckdb_appender_flush(duckdb_appender appender);
duckdb_state duckdb_appender_close(duckdb_appender appender);
duckdb_state duckdb_appender_destroy(duckdb_appender *appender);
duckdb_state duckdb_appender_add_column(duckdb_appender appender, const char *name);
duckdb_state duckdb_appender_clear_columns(duckdb_appender appender);
duckdb_state duckdb_appender_begin_row(duckdb_appender appender);
duckdb_state duckdb_appender_end_row(duckdb_appender appender);
duckdb_state duckdb_append_default(duckdb_appender appender);
duckdb_state duckdb_append_default_to_chunk(duckdb_appender appender, duckdb_data_chunk chunk, idx_t col, idx_t row);
duckdb_state duckdb_append_bool(duckdb_appender appender, bool value);
duckdb_state duckdb_append_int8(duckdb_appender appender, int8_t value);
duckdb_state duckdb_append_int16(duckdb_appender appender, int16_t value);
duckdb_state duckdb_append_int32(duckdb_appender appender, int32_t value);
duckdb_state duckdb_append_int64(duckdb_appender appender, int64_t value);
duckdb_state duckdb_append_hugeint(duckdb_appender appender, duckdb_hugeint value);
duckdb_state duckdb_append_uint8(duckdb_appender appender, uint8_t value);
duckdb_state duckdb_append_uint16(duckdb_appender appender, uint16_t value);
duckdb_state duckdb_append_uint32(duckdb_appender appender, uint32_t value);
duckdb_state duckdb_append_uint64(duckdb_appender appender, uint64_t value);
duckdb_state duckdb_append_uhugeint(duckdb_appender appender, duckdb_uhugeint value);
duckdb_state duckdb_append_float(duckdb_appender appender, float value);
duckdb_state duckdb_append_double(duckdb_appender appender, double value);
duckdb_state duckdb_append_date(duckdb_appender appender, duckdb_date value);
duckdb_state duckdb_append_time(duckdb_appender appender, duckdb_time value);
duckdb_state duckdb_append_timestamp(duckdb_appender appender, duckdb_timestamp value);
duckdb_state duckdb_append_interval(duckdb_appender appender, duckdb_interval value);
duckdb_state duckdb_append_varchar(duckdb_appender appender, const char *val);
duckdb_state duckdb_append_varchar_length(duckdb_appender appender, const char *val, idx_t length);
duckdb_state duckdb_append_blob(duckdb_appender appender, const void *data, idx_t length);
duckdb_state duckdb_append_null(duckdb_appender appender);
duckdb_state duckdb_append_value(duckdb_appender appender, duckdb_value value);
duckdb_state duckdb_append_data_chunk(duckdb_appender appender, duckdb_data_chunk chunk);
duckdb_appender_create
Erzeugt ein Appender-Objekt.
Beachten Sie, dass das Objekt mit duckdb_appender_destroy zerstört werden muss.
Syntax
duckdb_state duckdb_appender_create(
duckdb_connection connection,
const char *schema,
const char *table,
duckdb_appender *out_appender
);
Parameter
connection: Der Verbindungskontext, in dem der Appender erzeugt wird.schema: Das Schema der Tabelle, an die angehängt wird, odernullptrfür das Standardschema.table: Der Tabellenname, an den angehängt wird.out_appender: Das resultierende Appender-Objekt.
Rückgabewert
DuckDBSuccess bei Erfolg oder DuckDBError bei Fehler.
duckdb_appender_create_ext
Erzeugt ein Appender-Objekt.
Beachten Sie, dass das Objekt mit duckdb_appender_destroy zerstört werden muss.
Syntax
duckdb_state duckdb_appender_create_ext(
duckdb_connection connection,
const char *catalog,
const char *schema,
const char *table,
duckdb_appender *out_appender
);
Parameter
connection: Der Verbindungskontext, in dem der Appender erzeugt wird.catalog: Der Katalog der Tabelle, an die angehängt wird, odernullptrfür den Standardkatalog.schema: Das Schema der Tabelle, an die angehängt wird, odernullptrfür das Standardschema.table: Der Tabellenname, an den angehängt wird.out_appender: Das resultierende Appender-Objekt.
Rückgabewert
DuckDBSuccess bei Erfolg oder DuckDBError bei Fehler.
duckdb_appender_create_query
Erzeugt ein Appender-Objekt, das die angegebene Abfrage mit allen daran angehängten Daten ausführt.
Beachten Sie, dass das Objekt mit duckdb_appender_destroy zerstört werden muss.
Syntax
duckdb_state duckdb_appender_create_query(
duckdb_connection connection,
const char *query,
idx_t column_count,
duckdb_logical_type *types,
const char *table_name,
const char **column_names,
duckdb_appender *out_appender
);
Parameter
connection: Der Verbindungskontext, in dem der Appender erzeugt wird.query: Die auszuführende Abfrage, kann eine INSERT-, DELETE-, UPDATE- oder MERGE INTO-Anweisung sein.column_count: Die Anzahl der anzuhängenden Spalten.types: Die Typen der anzuhängenden Spalten.table_name: (optional) der Tabellenname, der für die angehängten Daten verwendet wird, Standard ist “appended_data”.column_names: (optional) die Liste der Spaltennamen, Standard ist “col1”, “col2”, …out_appender: Das resultierende Appender-Objekt.
Rückgabewert
DuckDBSuccess bei Erfolg oder DuckDBError bei Fehler.
duckdb_appender_column_count
Gibt die Anzahl der Spalten zurück, die zum Appender gehören. Wenn keine aktive Spaltenliste vorhanden ist, entspricht dies den physischen Spalten der Tabelle.
Syntax
idx_t duckdb_appender_column_count(
duckdb_appender appender
);
Parameter
appender: Der Appender, von dem die Spaltenanzahl geholt wird.
Rückgabewert
Die Anzahl der Spalten in den Data Chunks.
duckdb_appender_column_type
Gibt den Typ der Spalte am angegebenen Index zurück. Dies ist entweder ein Typ in der aktiven Spaltenliste oder derselbe Typ wie eine Spalte in der Empfängertabelle.
Hinweis: Der resultierende Typ muss mit duckdb_destroy_logical_type zerstört werden.
Syntax
duckdb_logical_type duckdb_appender_column_type(
duckdb_appender appender,
idx_t col_idx
);
Parameter
appender: Der Appender, von dem der Spaltentyp geholt wird.col_idx: Der Index der Spalte, deren Typ geholt wird.
Rückgabewert
Der duckdb_logical_type der Spalte.
duckdb_appender_error
Warnung Hinweis zur Veraltung. Diese Methode ist zur Entfernung in einer zukünftigen Version vorgesehen. Verwenden Sie stattdessen duckdb_appender_error_data.
Gibt die mit dem Appender verbundene Fehlermeldung zurück.
Wenn der Appender keine Fehlermeldung hat, wird stattdessen nullptr zurückgegeben.
Die Fehlermeldung sollte nicht freigegeben werden. Sie wird freigegeben, wenn duckdb_appender_destroy aufgerufen wird.
Syntax
const char *duckdb_appender_error(
duckdb_appender appender
);
Parameter
appender: Der Appender, von dem der Fehler geholt wird.
Rückgabewert
Die Fehlermeldung oder nullptr, wenn keine vorhanden ist.
duckdb_appender_error_data
Gibt die mit dem Appender verbundenen Fehlerdaten zurück. Muss mit duckdb_destroy_error_data zerstört werden.
Syntax
duckdb_error_data duckdb_appender_error_data(
duckdb_appender appender
);
Parameter
appender: Der Appender, von dem die Fehlerdaten geholt werden.
Rückgabewert
Die Fehlerdaten.
duckdb_appender_flush
Leert den Appender in die Tabelle und erzwingt das Leeren des Caches des Appenders. Wenn das Leeren der Daten eine Constraint-Verletzung oder einen anderen Fehler auslöst, werden alle Daten ungültig und diese Funktion gibt DuckDBError zurück. Es ist nicht möglich, weitere Werte anzuhängen. Rufen Sie duckdb_appender_error_data auf, um die Fehlerdaten zu holen, gefolgt von duckdb_appender_destroy, um den ungültigen Appender zu zerstören.
Syntax
duckdb_state duckdb_appender_flush(
duckdb_appender appender
);
Parameter
appender: Der zu leerende Appender.
Rückgabewert
DuckDBSuccess bei Erfolg oder DuckDBError bei Fehler.
duckdb_appender_close
Schließt den Appender, indem alle Zwischenzustände geleert und er für weitere Anhängungen geschlossen wird. Wenn das Leeren der Daten eine Constraint-Verletzung oder einen anderen Fehler auslöst, werden alle Daten ungültig und diese Funktion gibt DuckDBError zurück. Rufen Sie duckdb_appender_error_data auf, um die Fehlerdaten zu holen, gefolgt von duckdb_appender_destroy, um den ungültigen Appender zu zerstören.
Syntax
duckdb_state duckdb_appender_close(
duckdb_appender appender
);
Parameter
appender: Der zu leerende und zu schließende Appender.
Rückgabewert
DuckDBSuccess bei Erfolg oder DuckDBError bei Fehler.
duckdb_appender_destroy
Schließt den Appender, indem alle Zwischenzustände in die Tabelle geleert werden, und zerstört ihn. Durch das Zerstören gibt diese Funktion den gesamten mit dem Appender verbundenen Speicher frei. Wenn das Leeren der Daten eine Constraint-Verletzung auslöst, werden alle Daten ungültig und diese Funktion gibt DuckDBError zurück. Durch die Zerstörung des Appenders ist es nicht mehr möglich, die spezifische Fehlermeldung mit duckdb_appender_error zu holen. Rufen Sie daher duckdb_appender_close vor dem Zerstören des Appenders auf, wenn Sie Einblick in den spezifischen Fehler benötigen.
Syntax
duckdb_state duckdb_appender_destroy(
duckdb_appender *appender
);
Parameter
appender: Der zu leerende, zu schließende und zu zerstörende Appender.
Rückgabewert
DuckDBSuccess bei Erfolg oder DuckDBError bei Fehler.
duckdb_appender_add_column
Hängt eine Spalte an die aktive Spaltenliste des Appenders an. Leert sofort alle vorherigen Daten.
Die aktive Spaltenliste gibt alle Spalten an, die beim Leeren der Daten erwartet werden. Alle nicht aktiven Spalten werden mit ihren Standardwerten oder NULL gefüllt.
Syntax
duckdb_state duckdb_appender_add_column(
duckdb_appender appender,
const char *name
);
Parameter
appender: Der Appender, dem die Spalte hinzugefügt wird.
Rückgabewert
DuckDBSuccess bei Erfolg oder DuckDBError bei Fehler.
duckdb_appender_clear_columns
Entfernt alle Spalten aus der aktiven Spaltenliste des Appenders und setzt den Appender so zurück, dass alle Spalten als aktiv behandelt werden. Leert sofort alle vorherigen Daten.
Syntax
duckdb_state duckdb_appender_clear_columns(
duckdb_appender appender
);
Parameter
appender: Der Appender, von dem die Spalten geleert werden.
Rückgabewert
DuckDBSuccess bei Erfolg oder DuckDBError bei Fehler.
duckdb_appender_begin_row
Eine nop-Funktion, aus Gründen der Abwärtskompatibilität bereitgestellt. Tut nichts. Nur duckdb_appender_end_row ist erforderlich.
Syntax
duckdb_state duckdb_appender_begin_row(
duckdb_appender appender
);
duckdb_appender_end_row
Schließt die aktuelle Zeile von Anhängungen ab. Nach dem Aufruf von end_row kann die nächste Zeile angehängt werden.
Syntax
duckdb_state duckdb_appender_end_row(
duckdb_appender appender
);
Parameter
appender: Der Appender.
Rückgabewert
DuckDBSuccess bei Erfolg oder DuckDBError bei Fehler.
duckdb_append_default
Hängt einen DEFAULT-Wert (NULL, wenn DEFAULT für die Spalte nicht verfügbar ist) an den Appender an.
Syntax
duckdb_state duckdb_append_default(
duckdb_appender appender
);
duckdb_append_default_to_chunk
Hängt einen DEFAULT-Wert an der angegebenen Zeile und Spalte (NULL, wenn DEFAULT für die Spalte nicht verfügbar ist) an den aus dem angegebenen Appender erzeugten Chunk an. Der Standardwert der Spalte muss ein konstanter Wert sein. Nichtdeterministische Ausdrücke wie nextval(‘seq’) oder random() werden nicht unterstützt.
Syntax
duckdb_state duckdb_append_default_to_chunk(
duckdb_appender appender,
duckdb_data_chunk chunk,
idx_t col,
idx_t row
);
Parameter
appender: Der Appender, von dem der Standardwert geholt wird.chunk: Der Data Chunk, an den der Standardwert angehängt wird.col: Der Chunk-Spaltenindex, an den der Standardwert angehängt wird.row: Der Chunk-Zeilenindex, an den der Standardwert angehängt wird.
Rückgabewert
DuckDBSuccess bei Erfolg oder DuckDBError bei Fehler.
duckdb_append_bool
Hängt einen bool-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_bool(
duckdb_appender appender,
bool value
);
duckdb_append_int8
Hängt einen int8_t-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_int8(
duckdb_appender appender,
int8_t value
);
duckdb_append_int16
Hängt einen int16_t-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_int16(
duckdb_appender appender,
int16_t value
);
duckdb_append_int32
Hängt einen int32_t-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_int32(
duckdb_appender appender,
int32_t value
);
duckdb_append_int64
Hängt einen int64_t-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_int64(
duckdb_appender appender,
int64_t value
);
duckdb_append_hugeint
Hängt einen duckdb_hugeint-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_hugeint(
duckdb_appender appender,
duckdb_hugeint value
);
duckdb_append_uint8
Hängt einen uint8_t-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_uint8(
duckdb_appender appender,
uint8_t value
);
duckdb_append_uint16
Hängt einen uint16_t-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_uint16(
duckdb_appender appender,
uint16_t value
);
duckdb_append_uint32
Hängt einen uint32_t-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_uint32(
duckdb_appender appender,
uint32_t value
);
duckdb_append_uint64
Hängt einen uint64_t-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_uint64(
duckdb_appender appender,
uint64_t value
);
duckdb_append_uhugeint
Hängt einen duckdb_uhugeint-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_uhugeint(
duckdb_appender appender,
duckdb_uhugeint value
);
duckdb_append_float
Hängt einen float-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_float(
duckdb_appender appender,
float value
);
duckdb_append_double
Hängt einen double-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_double(
duckdb_appender appender,
double value
);
duckdb_append_date
Hängt einen duckdb_date-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_date(
duckdb_appender appender,
duckdb_date value
);
duckdb_append_time
Hängt einen duckdb_time-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_time(
duckdb_appender appender,
duckdb_time value
);
duckdb_append_timestamp
Hängt einen duckdb_timestamp-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_timestamp(
duckdb_appender appender,
duckdb_timestamp value
);
duckdb_append_interval
Hängt einen duckdb_interval-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_interval(
duckdb_appender appender,
duckdb_interval value
);
duckdb_append_varchar
Hängt einen varchar-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_varchar(
duckdb_appender appender,
const char *val
);
duckdb_append_varchar_length
Hängt einen varchar-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_varchar_length(
duckdb_appender appender,
const char *val,
idx_t length
);
duckdb_append_blob
Hängt einen blob-Wert an den Appender an.
Syntax
duckdb_state duckdb_append_blob(
duckdb_appender appender,
const void *data,
idx_t length
);
duckdb_append_null
Hängt einen NULL-Wert an den Appender an (von beliebigem Typ).
Syntax
duckdb_state duckdb_append_null(
duckdb_appender appender
);
duckdb_append_value
Hängt einen duckdb_value an den Appender an.
Syntax
duckdb_state duckdb_append_value(
duckdb_appender appender,
duckdb_value value
);
duckdb_append_data_chunk
Hängt einen vorausgefüllten Data Chunk an den angegebenen Appender an. Versucht ein Casting, wenn die Data-Chunk-Typen nicht mit den aktiven Appender-Typen übereinstimmen.
Syntax
duckdb_state duckdb_append_data_chunk(
duckdb_appender appender,
duckdb_data_chunk chunk
);
Parameter
appender: Der Appender, an den angehängt wird.chunk: Der anzuhängende Data Chunk.
Rückgabewert
DuckDBSuccess bei Erfolg oder DuckDBError bei Fehler.