Releases for RepoDb.ClickHouse.BulkOperations
View the NuGet package here or download it directly here.
RepoDb.ClickHouse.BulkOperations - Preview
Released: TBA
New
First release of the bulk operations extension for RepoDb.ClickHouse, providing BulkInsert, BulkMerge, BulkUpdate, BulkDelete, and BulkDeleteByKey, each with an Async overload, callable against a ClickHouseConnection, a table name, or a DataTable. #1242
What’s included
- BulkInsert, BulkMerge, BulkUpdate, BulkDelete, and BulkDeleteByKey — matched by qualifiers or primary key; see Operations (ClickHouse) for the full SQL generated by each.
- An internal
ClickHouseBulkCopyclass, adapting ClickHouse.Driver’s own nativeCopy.ClickHouseBulkCopyto theColumnMappings-based API the rest of the library expects. - ClickHouseBulkImportIdentityBehavior (
KeepIdentitydefault;ReturnIdentityalways throwsNotSupportedException, since ClickHouse has no identity/scope-identity mechanism). - ClickHouseBulkImportPseudoTableType (
Auto,Memory,Physical) — selects the staging-table strategy backingBulkMerge/BulkUpdate/BulkDelete/BulkDeleteByKey.BulkInsertnever uses a pseudo table. ClickHouseBulkInsertMapItem— explicit source-to-destination column mapping forBulkInsert/BulkMerge/BulkUpdate, with an optional explicit ClickHouse type name override.- Referenced the
RepoDbpackage. - Referenced the
RepoDb.ClickHousepackage. - Referenced the
ClickHouse.Driverpackagev1.3.0.
Known limitations (v1)
- ClickHouseBulkImportPseudoTableType.Auto and
Memoryboth currently resolve toPhysicalregardless of row count — the internal resolution logic returnsPhysicalon every outcome, so the session-privateMemory-engine staging path is implemented but not yet exercised. BulkMerge,BulkUpdate,BulkDeleteandBulkDeleteByKeyreport the number of rows staged into the pseudo table, not a confirmed post-mutation count —ALTER TABLE ... UPDATE/DELETEare asynchronous mutations, and neither they nor a plainINSERTreport a reliable affected-row figure throughClickHouse.Driver.- Every bulk call against
BulkMerge/BulkUpdate/BulkDelete/BulkDeleteByKeycreates its own physical staging table (DROP TABLE IF EXISTS+CREATE TABLE ... ENGINE = MergeTree ORDER BY tuple() AS SELECT ... WHERE (1 = 0)) and drops it once the call completes, rather than reusing one across calls. BulkInsert/BulkMergenever return generated identity values —identityBehavior: ReturnIdentityalways throwsNotSupportedException.