Skip to content

Commit 9e1c2eb

Browse files
committed
fallback in duckdb merge selector if duckdb not installed
1 parent 6265d62 commit 9e1c2eb

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

dlt/destinations/impl/duckdb/factory.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,18 @@ def duckdb_merge_strategies_selector(
132132
*,
133133
table_schema: TTableSchema,
134134
) -> Sequence[TLoaderMergeStrategy]:
135-
import duckdb as _duckdb
135+
try:
136+
import duckdb as _duckdb
136137

137-
if semver.Version.parse(_duckdb.__version__) < semver.Version.parse("1.4.0"):
138-
return supported_merge_strategies
139-
else:
140-
return list(supported_merge_strategies) + ["upsert"]
138+
if semver.Version.parse(_duckdb.__version__) < semver.Version.parse("1.4.0"):
139+
legacy_strategies = list(supported_merge_strategies)
140+
legacy_strategies.remove("upsert")
141+
supported_merge_strategies = legacy_strategies
142+
except ImportError:
143+
# return default if duckdb not installed
144+
pass
145+
146+
return supported_merge_strategies
141147

142148

143149
def _set_duckdb_raw_capabilities(
@@ -163,7 +169,7 @@ def _set_duckdb_raw_capabilities(
163169
caps.supports_ddl_transactions = True
164170
caps.alter_add_multi_column = False
165171
caps.supports_truncate_command = False
166-
caps.supported_merge_strategies = ["delete-insert", "scd2"]
172+
caps.supported_merge_strategies = ["delete-insert", "upsert", "scd2"]
167173
caps.supported_replace_strategies = ["truncate-and-insert", "insert-from-staging"]
168174
caps.merge_strategies_selector = duckdb_merge_strategies_selector
169175
caps.sqlglot_dialect = "duckdb"

docs/website/docs/dlt-ecosystem/destinations/ducklake.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ As mentioned above, `filesystem` and `ducklake` share the same configuration obj
167167

168168
# `filesystem` below is a pipeline with configured filesystem destination
169169

170-
destination = ducklake(
170+
destination = dlt.destinations.ducklake(
171171
credentials=DuckLakeCredentials(
172172
"lake_catalog",
173173
storage=filesystem.destination_client().config

0 commit comments

Comments
 (0)