@@ -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
143149def _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"
0 commit comments