2026-03-16 11:55:10 INF Sling CLI | https://slingdata.io
2026-03-16 11:55:10 DBG Sling version: 1.5.12 (linux amd64)
2026-03-16 11:55:10 DBG type is db-db
2026-03-16 11:55:10 DBG using: {"columns":null,"mode":"full-refresh","select":null,"transforms":null}
2026-03-16 11:55:10 DBG using source options: {"empty_as_null":false,"datetime_format":"AUTO","max_decimals":-1}
2026-03-16 11:55:10 DBG using target options: {"datetime_format":"auto","file_max_rows":0,"max_decimals":-1,"use_bulk":true,"add_new_columns":true,"adjust_column_type":false,"column_casing":"target","column_typing":{"decimal":{"min_precision":1,"min_scale":0}},"table_tmp":"\"SLING_TEST\".\"ALL_DTYPES_MSSQL_TMP\""}
2026-03-16 11:55:10 INF connecting to source database (sqlserver)
2026-03-16 11:55:10 DBG opened "sqlserver" connection (conn-sqlserver-test_mssql-NiT)
2026-03-16 11:55:10 INF connecting to target database (snowflake)
2026-03-16 11:55:11 DBG opened "snowflake" connection (conn-snowflake-snowflake-dDA)
2026-03-16 11:55:11 INF reading from source database
2026-03-16 11:55:11 DBG select convert(money, 1234.56) as col_money, convert(decimal(10, 2), 1234.56) as col_decimal, convert(decimal(28, 8), 1234.12345678) as col_decimal2, convert(decimal(16, 8), 1234.56) as col_decimal3 [test_mssql-NiT]
2026-03-16 11:55:11 DBG applying column casing (target) for target type (snowflake)
2026-03-16 11:55:11 DBG col_money => COL_MONEY
2026-03-16 11:55:11 DBG col_decimal => COL_DECIMAL
2026-03-16 11:55:11 DBG col_decimal2 => COL_DECIMAL2
2026-03-16 11:55:11 DBG col_decimal3 => COL_DECIMAL3
2026-03-16 11:55:11 INF writing to target database [mode: full-refresh]
2026-03-16 11:55:11 DBG drop table if exists "SLING_TEST"."ALL_DTYPES_MSSQL_TMP" [snowflake-dDA]
2026-03-16 11:55:11 DBG table "SLING_TEST"."ALL_DTYPES_MSSQL_TMP" dropped
2026-03-16 11:55:11 DBG create transient table "SLING_TEST"."ALL_DTYPES_MSSQL_TMP" ("COL_MONEY" decimal(24,6),
"COL_DECIMAL" decimal(24,2),
"COL_DECIMAL2" decimal(28,8),
"COL_DECIMAL3" decimal(26,8),
"_SLING_LOADED_AT" timestamp_tz) [snowflake-dDA]
2026-03-16 11:55:11 INF created table "SLING_TEST"."ALL_DTYPES_MSSQL_TMP"
2026-03-16 11:55:11 INF streaming data
2026-03-16 11:55:11 DBG CREATE STAGE IF NOT EXISTS "SLING_TEST"."SLING_STAGING" [snowflake-dDA]
2026-03-16 11:55:11 DBG USE SCHEMA SLING_TEST [snowflake-dDA]
2026-03-16 11:55:11 DBG opened "file" connection (conn-file-old)
2026-03-16 11:55:11 DBG writing to file:///home/tim/gitbox/eds-warehouse.git/edwh-2317-sling-upgrade/orchestrate/sling/tmp/8a1b9fdc/snowflake/put/sling_test.all_dtypes_mssql_tmp/2026-03-16T115511.818/part.01 [fileRowLimit=500000 fileBytesLimit=300000000 compression=zstd concurrency=7 useBufferedStream=false fileFormat=csv singleFile=false]
2026-03-16 11:55:11 DBG REMOVE @"SLING_TEST"."SLING_STAGING"/sling_test.all_dtypes_mssql_tmp/2026-03-16T115511.818 [snowflake-dDA]
2026-03-16 11:55:11 DBG PUT 'file:///home/tim/gitbox/eds-warehouse.git/edwh-2317-sling-upgrade/orchestrate/sling/tmp/8a1b9fdc/snowflake/put/sling_test.all_dtypes_mssql_tmp/2026-03-16T115511.818/part.01.0001.csv.zst' @"SLING_TEST"."SLING_STAGING"/sling_test.all_dtypes_mssql_tmp/2026-03-16T115511.818 PARALLEL=8 AUTO_COMPRESS=FALSE [snowflake-dDA]
2026-03-16 11:55:12 DBG COPY INTO "SLING_TEST"."ALL_DTYPES_MSSQL_TMP" ("COL_MONEY", "COL_DECIMAL", "COL_DECIMAL2", "COL_DECIMAL3", "_SLING_LOADED_AT")
from (
select T.$1, T.$2, T.$3, T.$4, T.$5
from @"SLING_TEST"."SLING_STAGING"/sling_test.all_dtypes_mssql_tmp/2026-03-16T115511.818 as T
)
FILE_FORMAT = (
TYPE = CSV
RECORD_DELIMITER = '\n'
ESCAPE_UNENCLOSED_FIELD = NONE
FIELD_OPTIONALLY_ENCLOSED_BY = '0x22'
EMPTY_FIELD_AS_NULL = FALSE
NULL_IF = '\\N'
SKIP_HEADER = 1
REPLACE_INVALID_CHARACTERS = TRUE
)
ON_ERROR = ABORT_STATEMENT [snowflake-dDA]
2026-03-16 11:55:12 DBG
+------------------------------------------------------------------------------------------+--------+-------------+-------------+
| FILE | STATUS | ROWS_LOADED | ERRORS_SEEN |
+------------------------------------------------------------------------------------------+--------+-------------+-------------+
| sling_staging/sling_test.all_dtypes_mssql_tmp/2026-03-16T115511.818/part.01.0001.csv.zst | LOADED | 1 | 0 |
+------------------------------------------------------------------------------------------+--------+-------------+-------------+
2026-03-16 11:55:12 DBG REMOVE @"SLING_TEST"."SLING_STAGING"/sling_test.all_dtypes_mssql_tmp/2026-03-16T115511.818 [snowflake-dDA]
2026-03-16 11:55:12 DBG select count(*) cnt from "SLING_TEST"."ALL_DTYPES_MSSQL_TMP" [snowflake-dDA]
2026-03-16 11:55:12 DBG drop table if exists "SLING_TEST"."ALL_DTYPES_MSSQL" [snowflake-dDA]
2026-03-16 11:55:12 DBG table "SLING_TEST"."ALL_DTYPES_MSSQL" dropped
2026-03-16 11:55:13 DBG create table "SLING_TEST"."ALL_DTYPES_MSSQL" ("COL_MONEY" decimal(24,6),
"COL_DECIMAL" decimal(24,2),
"COL_DECIMAL2" decimal(28,8),
"COL_DECIMAL3" decimal(28,8),
"_SLING_LOADED_AT" timestamp_tz) [snowflake-dDA]
2026-03-16 11:55:13 INF created table "SLING_TEST"."ALL_DTYPES_MSSQL"
2026-03-16 11:55:13 DBG insert into "SLING_TEST"."ALL_DTYPES_MSSQL" ("COL_MONEY", "COL_DECIMAL", "COL_DECIMAL2", "COL_DECIMAL3", "_SLING_LOADED_AT") select "COL_MONEY" as "COL_MONEY", "COL_DECIMAL" as "COL_DECIMAL", "COL_DECIMAL2" as "COL_DECIMAL2", "COL_DECIMAL3" as "COL_DECIMAL3", "_SLING_LOADED_AT" as "_SLING_LOADED_AT" from "SLING_TEST"."ALL_DTYPES_MSSQL_TMP" [snowflake-dDA]
2026-03-16 11:55:13 DBG inserted rows into "SLING_TEST"."ALL_DTYPES_MSSQL" from temp table "SLING_TEST"."ALL_DTYPES_MSSQL_TMP"
2026-03-16 11:55:13 INF inserted 1 rows into "SLING_TEST"."ALL_DTYPES_MSSQL" in 2 secs [0 r/s] [77 B]
2026-03-16 11:55:13 DBG drop table if exists "SLING_TEST"."ALL_DTYPES_MSSQL_TMP" [snowflake-dDA]
2026-03-16 11:55:13 DBG table "SLING_TEST"."ALL_DTYPES_MSSQL_TMP" dropped
2026-03-16 11:55:13 DBG closed "snowflake" connection (conn-snowflake-snowflake-dDA)
2026-03-16 11:55:13 DBG closed "sqlserver" connection (conn-sqlserver-test_mssql-NiT)
2026-03-16 11:55:13 INF execution succeeded
Sling version:
1.5.12
What is the Operating System?
Linux
Do you have a CLI Pro/Platform subscription?
No
Description of the issue
When loading data from SQL Server to Snowflake using Sling, decimal columns appear to be created by default as decimal(24,6) or larger, even when the source column explicitly defines a smaller scale (e.g., decimal(10,2)).
Based on the the metadata available by the source database, I would expect Sling to preserve the exact precision and scale from the source types where possible.
I found that extending the sling run with explicit
column_typingdelivers a somewhat more expected DDL.Running the first command with sling v1.3.4 resulted also in a different DLL:
Replication Configuration
sling run -d \ --src-conn test_mssql \ --src-stream 'select convert(money, 1234.56) as col_money, convert(decimal(10, 2), 1234.56) as col_decimal, convert(decimal(28, 8), 1234.12345678) as col_decimal2, convert(decimal(16, 8), 1234.56) as col_decimal3' \ --tgt-conn snowflake \ --tgt-object 'sling_test.all_dtypes_mssql' \ --tgt-options '{"column_casing": "target"}' \ --mode full-refreshsling run -d \ --src-conn test_mssql \ --src-stream 'select convert(money, 1234.56) as col_money, convert(decimal(10, 2), 1234.56) as col_decimal, convert(decimal(28, 8), 1234.12345678) as col_decimal2, convert(decimal(16, 8), 1234.56) as col_decimal3' \ --tgt-conn snowflake \ --tgt-object 'sling_test.all_dtypes_mssql' \ --tgt-options '{"column_casing": "target", "column_typing": {"decimal": {"min_precision": 1, "min_scale": 0}}}' \ --mode full-refreshLog Output
Log 1
Log 2