Zum Inhalt springen

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 table
duckdb_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, oder nullptr fü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, oder nullptr für den Standardkatalog.
  • schema: Das Schema der Tabelle, an die angehängt wird, oder nullptr fü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.