Snowflake Data Type Support
How Simon maps Snowflake column types across the platform — Schema Builder, Datasets, Segments, and Content.
This page is a cross-feature reference. It describes how Snowflake column types are recognized and mapped throughout Simon — covering the Schema Builder, Datasets, Segment Builder, and Content personalization.
When you connect a Snowflake table or create a dataset, Simon inspects each column's type and maps it to one of Simon's internal data types. The mapped type determines how a field behaves everywhere in the product — what operators are available in the Segment Builder, what values can be personalized in templates, and so on.
Simon Data Types
Simon uses a small set of canonical data types internally. Every field in your data model is assigned one of these types, regardless of the specific Snowflake type the column was declared with.
| Simon Type | Description |
|---|---|
| Boolean | True/false indicator |
| Integer | Whole number |
| Float | Floating-point number |
| String | Text / character data |
| Timestamp | Date and/or time value |
| Array | Ordered list of values |
| Variant | Semi-structured JSON data |
Snowflake → Simon Type Mapping
The table below shows how every Snowflake column type is mapped to a Simon type. Types are grouped by the Simon type they produce.
| Simon Type | Snowflake Types |
|---|---|
| Boolean | BOOLEAN |
| Integer | INT, INTEGER, BIGINT, SMALLINT, TINYINT, BYTEINT, NUMBER, DECIMAL, DEC, NUMERIC, FIXED |
| Float | FLOAT, FLOAT4, FLOAT8, DOUBLE, DOUBLE PRECISION, REAL, DECFLOAT |
| String | VARCHAR, CHAR, CHARACTER, NCHAR, STRING, TEXT, BINARY, VARBINARY, OBJECT |
| Timestamp | TIMESTAMP, TIMESTAMP_NTZ, TIMESTAMP_LTZ, TIMESTAMP_TZ, DATETIME, DATE, TIME |
| Array | ARRAY |
| Variant | VARIANT |
Snowflake column types that are not in the table above — such as
GEOGRAPHYorGEOMETRY— will default to String. Any data in those columns will be handled as its string serialization.
A note on Integer vs. Float
Simon uses Integer for fixed-point numeric types (whole numbers, currencies, counts) and Float for floating-point types. Snowflake's NUMBER and DECIMAL families include both — Simon classifies them as Integer when they come from direct table mapping (Schema Builder) and Float when they come from view-based datasets (see View-Based Datasets below). In practice, both Integer and Float fields support the same numeric operators in the Segment Builder.
Feature Behavior
Schema Builder — Mapped Datasets
When you map a table or view using the Schema Builder, Simon reads column types from Snowflake's INFORMATION_SCHEMA.COLUMNS view and applies the mapping above. This happens:
- When you first connect a table
- Whenever a warehouse refresh runs and detects new columns
All Simon types are supported. If a column's type changes in Snowflake (for example, if a column is re-created with a different type), Simon will update the stored type automatically on the next refresh.
Tip: If a field appears with the wrong type in the Schema Builder, you can correct it in the Django admin and the fix will be preserved unless the underlying Snowflake column type also changes.
View-Based Datasets
When you create a dataset using a custom query, Simon creates a Snowflake view from your query and then inspects the view's column types using DESCRIBE VIEW. The same mapping table applies.
Snowflake's
DESCRIBE VIEWoutput for a timestamp column will typically include a precision suffix — for example,TIMESTAMP_NTZ(9). Simon strips the precision and maps on the base type name, soTIMESTAMP_NTZ(9)is treated identically toTIMESTAMP_NTZ.
All Simon types are supported. If your query selects a column with an unrecognized type, it will default to String.
Segment Builder
All Simon types are available as filter conditions in the Segment Builder. The available operators vary by type:
| Simon Type | Available Operators |
|---|---|
| Boolean | is true, is false, is null, is not null |
| Integer | equal to, not equal to, greater than, greater than or equal to, less than, less than or equal to, is between, in, is null, is not null |
| Float | equal to, not equal to, greater than, greater than or equal to, less than, less than or equal to, is null, is not null |
| String | is, is not, contains, does not contain, begins with, does not begin with, ends with, does not end with, in, like, is null, is not null |
| Timestamp | is, is before, is before date, is after, is after date, is between, is between dates, is null, is not null |
| Array | includes, does not include, is available, is not available |
| Variant | is null, is not null |
Variant fields have very limited support in the Segment Builder — only null checks are available. If you need to filter on values inside a Variant/JSON column, consider creating a view-based dataset to extract the relevant fields as typed columns.
For additional detail on segment operators, see Supported Data Types.
Content — Templates and Blocks
All Simon data types can be used for content personalization in email templates and blocks, including in Jinja template syntax. There are no type restrictions at the content layer — any field that is marked as a content field in the Schema Builder will be available for personalization, regardless of its type.
The runtime value passed to a template is the raw value stored in your Snowflake column:
| Simon Type | Template value |
|---|---|
| Boolean | true or false |
| Integer | Whole number |
| Float | Decimal number |
| String | Text string |
| Timestamp | ISO 8601 string (e.g. 2024-03-15T10:30:00Z) |
| Array | JSON array |
| Variant | JSON object or scalar |
Troubleshooting
A timestamp column is showing up as String
This most commonly occurs with view-based datasets when the Snowflake view column type resolves to a timestamp variant (TIMESTAMP_NTZ, TIMESTAMP_LTZ, or TIMESTAMP_TZ) rather than bare TIMESTAMP. Simon handles all Snowflake timestamp variants correctly. If you see this, try re-saving the dataset to trigger a fresh type introspection.
For mapped datasets, verify the column's type in INFORMATION_SCHEMA.COLUMNS — if Snowflake is reporting a non-standard type, Simon may have fallen back to String.
A numeric column is showing up as Float instead of Integer (or vice versa)
Snowflake's NUMBER type can represent both integers and decimals depending on its scale parameter (e.g. NUMBER(38,0) is integer-like, NUMBER(10,2) has decimals). Simon maps both to its own Integer or Float type based on the mapping table above. Both types support the same numeric operators in the Segment Builder, so in most cases this distinction does not affect functionality.
A field is missing from the Segment Builder
Only fields that are marked as content fields or join keys in the Schema Builder are surfaced in the Segment Builder. If a field is present in the data model but not appearing as a filter option, check its configuration in the Schema Builder.
Updated 20 days ago
