Snowflake support
Count supports importing and on-the-fly conversion of Snowflake YAML files into Count catalog views and datasets. This allows teams migrating from Snowflake, or maintaining a Snowflake-based semantic layer alongside Count, to reuse their existing Snowflake definitions. Not all Snowflake features are supported. See Limitations for details.
General support
Snowflake YAML files are just one type of third-party file that Count Metrics supports. This support includes:
- on-the-fly (or automatic) conversion for teams who want to continue maintaining their semantic layer definitions outside of Count;
- once-off (or manual) conversion for teams who want to fully migrate their existing semantic layer definitions into Count; and
- extending automatically converted views and definitions to adjust them without needing to change the third-party files.
See here for more details on how Count Metrics supports third-party files generally. This page will focus just on the specific details of this related to Snowflake YAML files.
Snowflake Conversion Details
Count supports two Snowflake YAML specifications:
- Semantic View YAML files: YAML files used to generate native Snowflake schema objects. Use
measuresfor row-level measures. Relationship types are auto-inferred rather than explicitly declared. Addsaccess_modifiersupport on fields and metrics. - Semantic Model YAML files (legacy): YAML files stored on a Snowflake stage, used with Cortex Analyst. Uses
factsfor row-level measures (equivalent tomeasures). Supports explicitjoin_typeandrelationship_typeon relationships.
See the Snowflake documentation for the full specification.
Both specs share the same underlying structure and are converted using the same process. Differences are handled transparently - for example, measures and facts are treated identically.
What Is Converted
- Snowflake semantic model or semantic view -> Count dataset
- Snowflake table with
base_table-> Count view with table source - Snowflake dimension -> Count field (no aggregate)
- Snowflake time dimension -> Count field with timeframes
- Snowflake fact / measure -> Count field, with aggregate if
default_aggregationis set - Snowflake metric -> Count field with aggregate (parsed from expression)
- Snowflake metric with
filter-> AggregateCASE WHENexpression - Snowflake model-level metric (single-table reference) -> Field on the referenced view (see Model-Level Metrics)
- Snowflake relationship -> Count join
- Snowflake
foreign_keys/unique_keys-> Inferred joins (when no explicit relationship covers the same table pair) - Snowflake
primary_key-> Primary key fields on view
Supported Types
varchar,nvarchar,char,nchar,character,text,string-> converted tostringnumber,decimal,numeric,fixed-> converted tointegerornumberdepending on the scaleint,integer,bigint,smallint,tinyint,byteint-> converted tointegerfloat,double,real,double precision,float4,float8-> converted tonumberboolean-> converted tobooleandate,datetime,timestamp-> converted todatetime-> converted tostring(notimetype in Count Metrics)
Unsupported Types
variant, array, object, binary, varbinary, geography, geometry. Fields with unsupported types are commented out in the converted output with an explanation.
Supported Aggregation Types
count, count_distinct, sum, sum_distinct (converted to sum), avg, average (converted to avg), average_distinct (converted to avg), median, mode, max, min, stddev_pop, stddev_samp, var_pop, var_samp.
Supported Timeframes
Time dimensions are converted with the following timeframes: year_trunc, quarter_trunc, month_trunc, week_trunc, day_trunc, hour_trunc, day_of_week, and the raw (untruncated) value.
Relationships and Joins
Snowflake relationships are converted to Count joins. The converter supports:
- Explicit relationships defined at the model level with
relationship_columnsorexpr - Implicit relationships inferred from
foreign_keyson tables (when no explicit relationship already covers the same table pair) relationship_typemapping:one_to_one,one_to_many,many_to_one,many_to_manyjoin_typemapping:inner,left/left_outer(default),right/right_outer,full/full_outer- For foreign key–derived joins, the relationship type is inferred based on whether the foreign key column(s) are declared as unique keys on the source table
Model-Level Metrics
Metrics defined at the semantic model level (outside of any table) are distributed to table views by analyzing tableName.fieldName references in the metric expression:
- Single-table reference: assigned to that table's view as a normal metric field
- Multi-table reference: assigned to the first referenced table's view but commented out (cross-view metric expressions are not supported)
- No table reference: assigned to the first table's view but commented out
Limitations
Certain Snowflake features do not have direct equivalents in Count. During conversion, unsupported definitions are included as commented sections with an inline explanation, so nothing is silently dropped.
Private Access Fields
Fields with access_modifier: private_access are commented out in the converted output, as Count does not have an equivalent access control concept for individual fields.
Cross-View Metric Expressions
Model-level metrics that reference fields from multiple tables are not supported. These are commented out with an explanation.
Snowflake-Specific Properties
Properties such as synonyms, sample_values, cortex_search_service, cortex_search_service_name, is_enum, and unique on fields are not converted. non_additive_dimensions on metrics is also not supported. These are noted as unsupported properties in comments on the generated output.
Verified Queries and Custom Instructions
verified_queries, custom_instructions, and module_custom_instructions at the model level are not converted, as Count does not have equivalent concepts.
Filters
Snowflake filters defined on tables are not converted, as Count does not have an equivalent filtering concept at the view level.
Cross Join Type
The cross join type is not supported. Relationships with this join type are commented out.
Field Expression SQL
Field expressions can only use a limited SQL dialect that Count uses in various places such as visuals and low-code cells (see here). Complex SQL constructs, warehouse-specific functions, or deeply nested subqueries may not convert successfully.