DataZen Documentation
DataZen User Guide

Data Type Mapping

Values flow source native type → DataZen → target GetColumnTypeSQL. Azure SQL Database uses the SQL Server script builder (same mappings). Databricks and Oracle are not included in these tables. Self-mapping is also via DataZen, so a round-trip does not recreate the original native type.

Target cells are the type DataZen emits when creating or sinking a table, based on the DataZen type produced by the source driver. Sizes such as nvarchar(n) use the source column length when the driver reports it; max/LOB types use the engine’s unbounded mapping.

1. SQL Server as source

Azure SQL Database is identical. Native types listed from the LIVE covering table plus other types GetColumnTypeSQL accepts from DataZen.

SQL Server type DataZen SQL Server (via DataZen) Fabric Warehouse Snowflake MySQL Postgres
bigintInt64bigintbigintNUMBER(38, 0)bigintBIGINT
binary(n)Byte[]varbinary(n)varbinary(n)BINARY(67,108,864) 1varbinary(n) / blob 1BYTEA 1
bitBooleanbitbitBOOLEANtinyint 2BOOLEAN
char(n)Stringnvarchar(n)varchar(2n) 3VARCHAR(134217728) 4VARCHAR(n) / TEXTTEXT 5
dateDateTimedatetime2datetime2(6) 6TIMESTAMP(3)datetimeTIMESTAMP
datetimeDateTimedatetime2datetime2(6) 6TIMESTAMP(3)datetimeTIMESTAMP
datetime2DateTimedatetime2datetime2(6) 6TIMESTAMP(3)datetimeTIMESTAMP
datetimeoffsetDateTimeOffsetdatetimeoffsetdatetime2(6) 7TIMESTAMP_TZ(3)datetime(6) 7TIMESTAMPTZ
decimal(p,s)Decimaldecimal(p,s)decimal(p,s)DECIMAL(p,s)decimal(p,s)decimal(p,s)
floatDoublefloatfloatREALdoubleFLOAT
imageByte[]varbinary(max)varbinary(max)BINARY(67108864) 1blob 1BYTEA 1
intInt32intintNUMBER(38, 0)intINTEGER
moneyDecimaldecimal(19,4) 8decimal(19,4) 8DECIMAL(19,4) 8decimal(19,4) 8decimal(19,4) 8
nchar(n)Stringnvarchar(n)varchar(2n) 3VARCHAR(134217728) 4VARCHAR(n) / TEXTTEXT 5
ntextStringnvarchar(max)varchar(max)VARCHAR(134217728) 4TEXT / LONGTEXTTEXT
numeric(p,s)Decimaldecimal(p,s)decimal(p,s)DECIMAL(p,s)decimal(p,s)decimal(p,s)
nvarchar(n)Stringnvarchar(n)varchar(2n) 3VARCHAR(134217728) 4VARCHAR(n) / TEXTTEXT
nvarchar(max)Stringnvarchar(max)varchar(max) 3VARCHAR(134217728) 4TEXT / LONGTEXTTEXT
realSinglefloatrealREALdoubleREAL
rowversion / timestampByte[]varbinary(n) 9varbinary(n) 9BINARY(67108864) 19varbinary(n) / blob 9BYTEA 9
smalldatetimeDateTimedatetime2datetime2(6) 6TIMESTAMP(3)datetimeTIMESTAMP
smallintInt16smallintsmallintNUMBER(38, 0)smallintSMALLINT
smallmoneyDecimaldecimal(p,s)decimal(p,s)DECIMAL(p,s)decimal(p,s)decimal(p,s)
textStringnvarchar(max)varchar(max)VARCHAR(134217728) 4TEXT / LONGTEXTTEXT
timeTimeSpantime(7)time(6) 6TIME(9) 10time(6)INTERVAL 10
tinyintBytetinyintsmallint 11NUMBER(3, 0)smallint 11SMALLINT
uniqueidentifierGuiduniqueidentifieruniqueidentifierVARCHARvarchar(36)TEXT
varbinary(n)Byte[]varbinary(n)varbinary(n)BINARY(67108864) 1varbinary(n) / blobBYTEA 1
varbinary(max)Byte[]varbinary(max)varbinary(max)BINARY(67108864) 1blobBYTEA
varchar(n)Stringnvarchar(n)varchar(2n) 3VARCHAR(134217728) 4VARCHAR(n) / TEXTTEXT
varchar(max)Stringnvarchar(max)varchar(max)VARCHAR(134217728) 4TEXT / LONGTEXTTEXT
xmlStringnvarchar(max)varchar(max)VARCHAR(134217728) 4TEXT / LONGTEXTTEXT
  1. Binary MERGE/SINK literals: Snowflake wraps Base64 as TO_BINARY(..., 'BASE64') (NULL must not pass a format argument). Postgres uses decode(..., 'base64'). MySQL/Fabric emit quoted or X'hex' style literals depending on the builder.
  2. MySQL has no BOOLEAN persist type here; bool maps to tinyint (0/1).
  3. Fabric does not persist NVARCHAR. Character count is doubled into VARCHAR (UTF-8). varchar(max) is 16 MB per cell.
  4. Snowflake VARCHAR ignores source length and uses the 128 MB maximum. Unquoted identifiers fold to UPPER CASE.
  5. Postgres maps all strings to TEXT (PostgreSQL guidance: no performance benefit to VARCHAR(n)).
  6. Fabric datetime2 and time are limited to 6 fractional digits (not 7).
  7. Offset is dropped on Fabric (CAST(... AS DATETIME2(6))) and MySQL (UTC clock into DATETIME(6)).
  8. SQL Server MONEY arrives as Decimal with precision 19 / scale 255; builders coerce scale to 4.
  9. ROWVERSION/TIMESTAMP is not recreated as rowversion on any target; it becomes a byte array. SQL Server omits it from INSERT (engine-generated).
  10. Time-of-day TimeSpan maps to TIME on SQL Server/Fabric/MySQL/Snowflake. Postgres maps TimeSpan to INTERVAL. Values ≥ 24 hours are not valid TIME.
  11. DataZen byte is 0..255. Fabric has no TINYINT; MySQL signed TINYINT is −128..127, so DataZen uses SMALLINT.

2. Azure Fabric Warehouse as source

Persisted Warehouse types only. tinyint, nvarchar, datetime, datetimeoffset, money, xml, and image are not native Fabric types.

Fabric type DataZen SQL Server Fabric (via DataZen) Snowflake MySQL Postgres
bigintInt64bigintbigintNUMBER(38, 0)bigintBIGINT
binary(n) / varbinary(n)Byte[]varbinary(n)varbinary(n)BINARY(67108864) 1varbinary(n) / blobBYTEA
varbinary(max)Byte[]varbinary(max)varbinary(max) 2BINARY(67108864) 1blobBYTEA
bitBooleanbitbitBOOLEANtinyintBOOLEAN
char(n)Stringnvarchar(n)char(2n) / varcharVARCHAR(134217728)VARCHAR(n) / TEXTTEXT
dateDateTimedatetime2datetime2(6)TIMESTAMP(3)datetimeTIMESTAMP
datetime2(6)DateTimedatetime2datetime2(6) 3TIMESTAMP(3)datetimeTIMESTAMP
decimal(p,s)Decimaldecimal(p,s)decimal(p,s)DECIMAL(p,s)decimal(p,s)decimal(p,s)
floatDoublefloatfloatREALdoubleFLOAT
intInt32intintNUMBER(38, 0)intINTEGER
realSinglefloatrealREALdoubleREAL
smallintInt16smallintsmallintNUMBER(38, 0)smallintSMALLINT
time(6)TimeSpantime(7)time(6) 3TIME(9)time(6)INTERVAL
uniqueidentifierGuiduniqueidentifieruniqueidentifierVARCHARvarchar(36)TEXT
varchar(n)Stringnvarchar(n)varchar(2n)VARCHAR(134217728)VARCHAR(n) / TEXTTEXT
varchar(max)Stringnvarchar(max)varchar(max) 2VARCHAR(134217728)TEXT / LONGTEXTTEXT
  1. Same binary literal rules as the SQL Server table (Base64 / decode / blob).
  2. Warehouse VARCHAR(MAX) / VARBINARY(MAX) cap is 16 MB per cell.
  3. Fractional seconds max is 6. Writing DateTimeOffset into Fabric always drops the offset.

3. Snowflake as source

Unquoted identifiers are stored UPPER CASE. NUMBER variants all travel as integer/decimal DataZen types; TIMESTAMP_LTZ/TZ become DateTimeOffset.

Snowflake type DataZen SQL Server Fabric Snowflake (via DataZen) MySQL Postgres
BINARYByte[]varbinary(n/max)varbinary(n/max)BINARY(67108864) 1blob / varbinaryBYTEA
BOOLEANBooleanbitbitBOOLEANtinyintBOOLEAN
CHAR(n)Stringnvarchar(n)varchar(2n)VARCHAR(134217728) 2VARCHAR(n) / TEXTTEXT
DATEDateTimedatetime2datetime2(6)TIMESTAMP(3)datetimeTIMESTAMP
DECIMAL(p,s)Decimaldecimal(p,s)decimal(p,s)DECIMAL(p,s)decimal(p,s)decimal(p,s)
FLOATDoublefloatfloatREALdoubleFLOAT
NUMBER (integer)Int32 / Int64 / Decimalint / bigint / decimalint / bigint / decimalNUMBER(38, 0) or NUMBER(20, 0)int / bigintINTEGER / BIGINT / NUMERIC
REALDouble / Singlefloatfloat / realREALdoubleFLOAT / REAL
TIMETimeSpan / DateTimetime(7)time(6)TIME(9) 3time(6)INTERVAL / TIME
TIMESTAMP / TIMESTAMP_NTZDateTimedatetime2datetime2(6)TIMESTAMP(3)datetimeTIMESTAMP
TIMESTAMP_LTZDateTimeOffsetdatetimeoffsetdatetime2(6) 4TIMESTAMP_TZ(3) 4datetime(6) 4TIMESTAMPTZ
TIMESTAMP_TZDateTimeOffsetdatetimeoffsetdatetime2(6) 4TIMESTAMP_TZ(3)datetime(6) 4TIMESTAMPTZ
VARIANTStringnvarchar(max)varchar(max)VARCHAR(134217728) 5TEXT / LONGTEXTTEXT
VARCHARStringnvarchar(n/max)varchar(n/max)VARCHAR(134217728) 2VARCHAR / TEXTTEXT
  1. SINK MERGE must quote binary as Base64 inside TO_BINARY. TO_BINARY(NULL, 'BASE64') is invalid; NULL is emitted bare.
  2. Length is not preserved. Table/column names must be UPPER CASE or quoted; temp @pipelinedata() objects need "@pipelinedata()".
  3. TimeSpan is TIME(9), not TIMESTAMP. A clock string such as '00:00:01' is invalid as TIMESTAMP.
  4. DateTimeOffset is formatted invariantly with offset (yyyy-MM-dd HH:mm:ss.fff zzz) and CAST to TIMESTAMP_TZ. Fabric/MySQL drop the zone.
  5. VARIANT is not a DataZen type DataZen recreates; it is stored as text after the connector materializes it.

4. MySQL as source

Connector mappings from MySQLScriptBuilder comments. JSON is read as string. BIT(n>1) is typically Int64, not Boolean.

MySQL type DataZen SQL Server Fabric Snowflake MySQL (via DataZen) Postgres
bigintInt64bigintbigintNUMBER(38, 0)bigintBIGINT
binary / varbinaryByte[]varbinary(n)varbinary(n)BINARY(67108864)varbinary(n) / blobBYTEA
bit(1)BooleanbitbitBOOLEANtinyintBOOLEAN
bit(n) n>1Int64bigintbigintNUMBER(38, 0)bigintBIGINT
blob / tinyblob / mediumblob / longblobByte[]varbinary(max)varbinary(max)BINARY(67108864) 1blobBYTEA
char / varchar / text familyStringnvarchar(n/max)varchar(n/max)VARCHAR(134217728)VARCHAR / TEXT / LONGTEXT 2TEXT
dateDateTimedatetime2datetime2(6)TIMESTAMP(3)datetimeTIMESTAMP
datetimeDateTimedatetime2datetime2(6)TIMESTAMP(3)datetimeTIMESTAMP
decimal / numericDecimaldecimal(p,s)decimal(p,s)DECIMAL(p,s)decimal(p,s)decimal(p,s)
doubleDoublefloatfloatREALdoubleFLOAT
enum / setStringnvarchar(n)varchar(n)VARCHAR(134217728)VARCHAR(n) 3TEXT
floatSinglefloatrealREALdoubleREAL
int / integerInt32intintNUMBER(38, 0)intINTEGER
jsonStringnvarchar(max)varchar(max)VARCHAR(134217728)TEXT / LONGTEXT 4TEXT
mediumintInt32intintNUMBER(38, 0)intINTEGER
smallintInt16smallintsmallintNUMBER(38, 0)smallintSMALLINT
timeTimeSpantime(7)time(6)TIME(9)time(6)INTERVAL
timestampDateTimedatetime2datetime2(6)TIMESTAMP(3)datetimeTIMESTAMP
tinyint (signed)SBytesmallintsmallintNUMBER(3, 0)tinyintSMALLINT
tinyint unsignedBytetinyintsmallintNUMBER(3, 0)smallintSMALLINT
yearInt16smallintsmallintNUMBER(38, 0)smallint 5SMALLINT
  1. MySQL CAST AS LONGBLOB is not valid in seed/SELECT; blobs travel as Byte[] and are Base64-quoted for Snowflake.
  2. String length: n < 2000 → VARCHAR(n); 2000..65535 → TEXT; larger or unknown → TEXT/LONGTEXT.
  3. ENUM/SET are not recreated as ENUM/SET; they become ordinary strings.
  4. The MySQL builder notes JSON as a source type, but GetColumnTypeSQL does not emit JSON — round-trip is TEXT.
  5. YEAR is not recreated as YEAR.

5. PostgreSQL as source

Npgsql types. BIT(n) is BitArray (normalized to a 0/1 string for XML/SINK). INTERVAL is TimeSpan.

Postgres type DataZen SQL Server Fabric Snowflake MySQL Postgres (via DataZen)
bigintInt64bigintbigintNUMBER(38, 0)bigintBIGINT
bit(n)BitArraynvarchar / not native 1varchar 1VARCHAR 1VARCHAR / TEXT 1TEXT 1
booleanBooleanbitbitBOOLEANtinyintBOOLEAN
byteaByte[]varbinary(n/max)varbinary(n/max)BINARY(67108864)blobBYTEA 2
char / varchar / textStringnvarchar(n/max)varchar(n/max)VARCHAR(134217728)VARCHAR / TEXTTEXT
dateDateTimedatetime2datetime2(6)TIMESTAMP(3)datetimeTIMESTAMP
double precisionDoublefloatfloatREALdoubleFLOAT
integerInt32intintNUMBER(38, 0)intINTEGER
intervalTimeSpantime(7) 3time(6) 3TIME(9) 3time(6) 3INTERVAL
json / jsonbStringnvarchar(max)varchar(max)VARCHAR(134217728)TEXTTEXT 4
moneyDecimaldecimal(p,s)decimal(p,s)DECIMAL(p,s)decimal(p,s)decimal(p,s)
numeric(p,s)Decimaldecimal(p,s)decimal(p,s)DECIMAL(p,s)decimal(p,s)decimal(p,s)
realSinglefloatrealREALdoubleREAL
smallintInt16smallintsmallintNUMBER(38, 0)smallintSMALLINT
timeTimeSpantime(7)time(6)TIME(9)time(6)INTERVAL
timetzDateTimeOffset / TimeSpandatetimeoffset / time(7)datetime2(6) / time(6)TIMESTAMP_TZ(3) / TIME(9)datetime(6) / time(6)TIMESTAMPTZ / INTERVAL
timestampDateTimedatetime2datetime2(6)TIMESTAMP(3)datetimeTIMESTAMP
timestamptzDateTimeOffsetdatetimeoffsetdatetime2(6)TIMESTAMP_TZ(3)datetime(6)TIMESTAMPTZ
uuidGuiduniqueidentifieruniqueidentifierVARCHARvarchar(36)TEXT 5
xmlStringnvarchar(max)varchar(max)VARCHAR(134217728)TEXTTEXT
xminUInt32 / Stringbigint / nvarcharbigint / varcharNUMBER / VARCHARbigint / VARCHARNUMERIC / TEXT 6
  1. BIT is kept native on the Postgres source table. BitArray is not XML-serializable; PostgresOperations normalizes cells to a 0/1 string, and SINK wraps as CAST('…' AS TEXT). GetColumnTypeSQL does not emit BIT.
  2. Byte[] SINK uses decode('…', 'base64').
  3. INTERVAL → TimeSpan → TIME on non-Postgres targets; day-long intervals will not fit TIME.
  4. JSON/JSONB round-trip as TEXT, not json/jsonb.
  5. UUID round-trip as TEXT, not uuid.
  6. xmin is a system column (used in HWM/order tests). It is not created by GetColumnTypeSQL; include it only in SELECT lists.