Appender
Appender — самый эффективный способ загрузки данных в DuckDB из C интерфейса, и рекомендуется для быстрой загрузки данных. Appender намного быстрее, чем использование подготовленных запросов или отдельных INSERT INTO заявлений.
Добавление выполняется в строчном формате. Для каждого столбца необходимо выполнить вызов duckdb_append_[type], после чего строка должна быть завершена вызовом duckdb_appender_end_row. После добавления всех строк следует использовать duckdb_appender_destroy, чтобы завершить appender и очистить полученную память.
Обратите внимание, что duckdb_appender_destroy всегда должен вызываться для полученного объекта appender, даже если функция возвращает DuckDBError.
Пример
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
duckdb_state duckdb_appender_create(duckdb_connection connection, const char *schema, const char *table, 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_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_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_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_data_chunk(duckdb_appender appender, duckdb_data_chunk chunk);
duckdb_appender_create
Создаёт объект appender.
Обратите внимание, что объект необходимо уничтожить с помощью duckdb_appender_destroy.
Синтаксис
duckdb_state duckdb_appender_create( duckdb_connection connection, const char *schema, const char *table, duckdb_appender *out_appender );
Параметры
-
connection: Контекст подключения для создания appender. -
schema: Схема таблицы, в которую производится добавление, илиnullptrдля схемы по умолчанию. -
table: Имя таблицы, в которую производится добавление. -
out_appender: Результирующий объект appender.
Значение возврата
DuckDBSuccess при успехе или DuckDBError при ошибке.
duckdb_appender_column_count
Возвращает количество столбцов в таблице, связанной с appender.
Синтаксис
idx_t duckdb_appender_column_count( duckdb_appender appender );
Параметры
-
appender: Appender, для получения количества столбцов.
Значение возврата
Количество столбцов в таблице.
duckdb_appender_column_type
Возвращает тип столбца по указанному индексу.
Примечание: Результирующий тип необходимо уничтожить с помощью duckdb_destroy_logical_type.
Синтаксис
duckdb_logical_type duckdb_appender_column_type( duckdb_appender appender, idx_t col_idx );
Параметры
-
appender: Appender, для получения типа столбца. -
col_idx: Индекс столбца, для получения его типа.
Значение возврата
duckdb_logical_type столбца.
duckdb_appender_error
Возвращает сообщение об ошибке, связанное с заданным appender. Если appender не содержит сообщения об ошибке, возвращается nullptr.
Сообщение об ошибке не нужно освобождать. Оно будет освобождено при вызове duckdb_appender_destroy.
Синтаксис
const char *duckdb_appender_error( duckdb_appender appender );
Параметры
-
appender: Appender, для получения сообщения об ошибке.
Значение возврата
Сообщение об ошибке, или nullptr если его нет.
duckdb_appender_flush
Очищает appender в таблицу, принудительно очищая кеш appender. Если очистка данных приводит к нарушению ограничения или любой другой ошибке, все данные аннулируются, и функция возвращает DuckDBError. Больше невозможно добавлять значения. Вызовите duckdb_appender_error для получения сообщения об ошибке, а затем duckdb_appender_destroy для уничтожения недействительного appender.
Синтаксис
duckdb_state duckdb_appender_flush( duckdb_appender appender );
Параметры
-
appender: Appender, который нужно очистить.
Значение возврата
DuckDBSuccess при успехе или DuckDBError при ошибке.
duckdb_appender_close
Закрывает appender, очищая все промежуточные состояния и закрывая его для дальнейшего добавления. Если очистка данных приводит к нарушению ограничения или любой другой ошибке, все данные аннулируются, и функция возвращает DuckDBError. Вызовите duckdb_appender_error для получения сообщения об ошибке, а затем duckdb_appender_destroy для уничтожения недействительного appender.
Синтаксис
duckdb_state duckdb_appender_close( duckdb_appender appender );
Параметры
-
appender: Appender, который нужно очистить и закрыть.
Значение возврата
DuckDBSuccess при успехе или DuckDBError при ошибке.
duckdb_appender_destroy
Закрывает appender, очищая все промежуточные состояния в таблицу и уничтожая его. Уничтожив его, эта функция освобождает всю память, связанную с appender. Если очистка данных приводит к нарушению ограничения, все данные аннулируются, и функция возвращает DuckDBError. Из-за уничтожения appender, больше невозможно получить конкретное сообщение об ошибке с помощью duckdb_appender_error. Поэтому, вызовите duckdb_appender_close перед уничтожением appender, если вам нужны сведения о конкретной ошибке.
Синтаксис
duckdb_state duckdb_appender_destroy( duckdb_appender *appender );
Параметры
-
appender: Appender, который нужно очистить, закрыть и уничтожить.
Значение возврата
DuckDBSuccess при успехе или DuckDBError при ошибке.
duckdb_appender_begin_row
Функция-nop, предоставляемая для обратной совместимости. Не делает ничего. Требуется только duckdb_appender_end_row.
Синтаксис
duckdb_state duckdb_appender_begin_row( duckdb_appender appender );
duckdb_appender_end_row
Завершает текущую строку добавлений. После вызова end_row можно добавить следующую строку.
Синтаксис
duckdb_state duckdb_appender_end_row( duckdb_appender appender );
Параметры
-
appender: Appender.
Значение возврата
DuckDBSuccess при успехе или DuckDBError при ошибке.
duckdb_append_default
Добавляет значение DEFAULT (NULL, если DEFAULT недоступен для столбца) в appender.
Синтаксис
duckdb_state duckdb_append_default( duckdb_appender appender );
duckdb_append_bool
Добавляет значение bool в appender.
Синтаксис
duckdb_state duckdb_append_bool( duckdb_appender appender, bool value );
duckdb_append_int8
Добавляет значение int8_t в appender.
Синтаксис
duckdb_state duckdb_append_int8( duckdb_appender appender, int8_t value );
duckdb_append_int16
Добавляет значение int16_t в appender.
Синтаксис
duckdb_state duckdb_append_int16( duckdb_appender appender, int16_t value );
duckdb_append_int32
Добавляет значение int32_t в appender.
Синтаксис
duckdb_state duckdb_append_int32( duckdb_appender appender, int32_t value );
duckdb_append_int64
Добавляет значение int64_t в appender.
Синтаксис
duckdb_state duckdb_append_int64( duckdb_appender appender, int64_t value );
duckdb_append_hugeint
Добавляет значение duckdb_hugeint в appender.
Синтаксис
duckdb_state duckdb_append_hugeint( duckdb_appender appender, duckdb_hugeint value );
duckdb_append_uint8
Добавляет значение uint8_t в appender.
Синтаксис
duckdb_state duckdb_append_uint8( duckdb_appender appender, uint8_t value );
duckdb_append_uint16
Добавляет значение uint16_t в appender.
Синтаксис
duckdb_state duckdb_append_uint16( duckdb_appender appender, uint16_t value );
duckdb_append_uint32
Добавляет значение uint32_t в appender.
Синтаксис
duckdb_state duckdb_append_uint32( duckdb_appender appender, uint32_t value );
duckdb_append_uint64
Добавляет значение uint64_t в appender.
Синтаксис
duckdb_state duckdb_append_uint64( duckdb_appender appender, uint64_t value );
duckdb_append_uhugeint
Добавить значение duckdb_uhugeint в аппендер.
Синтаксис
duckdb_state duckdb_append_uhugeint( duckdb_appender appender, duckdb_uhugeint value );
duckdb_append_float
Добавить значение типа float в аппендер.
Синтаксис
duckdb_state duckdb_append_float( duckdb_appender appender, float value );
duckdb_append_double
Добавить значение типа double в аппендер.
Синтаксис
duckdb_state duckdb_append_double( duckdb_appender appender, double value );
duckdb_append_date
Добавить значение duckdb_date в аппендер.
Синтаксис
duckdb_state duckdb_append_date( duckdb_appender appender, duckdb_date value );
duckdb_append_time
Добавить значение duckdb_time в аппендер.
Синтаксис
duckdb_state duckdb_append_time( duckdb_appender appender, duckdb_time value );
duckdb_append_timestamp
Добавить значение duckdb_timestamp в аппендер.
Синтаксис
duckdb_state duckdb_append_timestamp( duckdb_appender appender, duckdb_timestamp value );
duckdb_append_interval
Добавить значение duckdb_interval в аппендер.
Синтаксис
duckdb_state duckdb_append_interval( duckdb_appender appender, duckdb_interval value );
duckdb_append_varchar
Добавить значение varchar в аппендер.
Синтаксис
duckdb_state duckdb_append_varchar( duckdb_appender appender, const char *val );
duckdb_append_varchar_length
Добавить значение varchar в аппендер.
Синтаксис
duckdb_state duckdb_append_varchar_length( duckdb_appender appender, const char *val, idx_t length );
duckdb_append_blob
Добавить значение blob в аппендер.
Синтаксис
duckdb_state duckdb_append_blob( duckdb_appender appender, const void *data, idx_t length );
duckdb_append_null
Добавить значение NULL в аппендер (любого типа).
Синтаксис
duckdb_state duckdb_append_null( duckdb_appender appender );
duckdb_append_data_chunk
Добавляет предварительно заполненный фрагмент данных в указанный аппендер.
Типы фрагмента данных должны точно совпадать с типами таблицы, преобразования не выполняются. Если типы не совпадают или аппендер находится в недопустимом состоянии, возвращается DuckDBError. Если добавление прошло успешно, возвращается DuckDBSuccess.
Синтаксис
duckdb_state duckdb_append_data_chunk( duckdb_appender appender, duckdb_data_chunk chunk );
Параметры
-
appender: Аппендер для добавления. -
chunk: Фрагмент данных для добавления.
Возвращаемое значение
Состояние возврата.
© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/api/c/appender.html