Skip to content
Beta · version 0.7.1 · commands and the JSON format may still change.

Native, inferred and semantic types

Tabalyst Scan records each field’s native types, infers a technical type from present values and chooses a primary interpretation only when one detector qualifies, then classifies the field in a family and a type (classification). Tabalyst Report calls the technical type the inferred type and displays the type of the classification in its Columns table.

native_types in a Scan field counts values as read, before technical inference. CSV cells start as strings; JSON and Excel can carry typed values. The native type alone does not decide the inferred type.

Native typeSource value
stringText, including text that may later parse as a number or date.
integer, numberA source number, with integer for whole numbers.
booleanA source true/false value.
nullAn explicit JSON null.
object, arrayJSON containers; they can form paths or stay whole at a flatten limit.

See native_types and missing in the Scan field to distinguish source representation from missing-value rules.

The technical type is chosen from present values, after missing values are removed. Native scalar types contribute directly. Strings are classified with date, boolean and number rules. Tabalyst chooses the first family that reaches scan.types.minimum_confidence: integer, number (which also accepts integers), date, boolean, then text. Otherwise it chooses mixed. The report records type_counts, type_confidence and type_error_count; its Analysis settings gives the effective threshold.

Inferred typeWhen it appearsImportant distinction
emptyNo present analyzable value.A missing-only field is not inferred as text.
complexJSON objects or arrays kept whole at the configured flatten depth.Their contents are not scalar columns at that depth.
booleanNative booleans or technical true/false strings meet the threshold.The separate boolean detector can recognize more configured word pairs.
integerWhole-number values meet the threshold.A leading-zero identifier stays text.
numberNumeric values, including integers and non-integers together, meet the threshold.Configured decimal conventions decide which strings parse.
dateCalendar dates, including ambiguous day/month forms, meet the threshold.Date-times and times can match the date detector without becoming calendar-date technical values.
textRemaining text values meet the threshold.Text can still have a semantic type such as email.
mixedNo family reaches the threshold.No type error count is available because no type was accepted.

Error in the report counts present values outside the accepted inferred type. Missing values are excluded from its denominator. mixed reports the largest family as confidence but has no type error count.

Each field also has a family and a type, such as Identifier / Unique ID, Categorical / Enum, Contact / Email or Text / Short. They start from the technical type and the interpretations below, add the length of a text and the name of the column, and are described with their evidence in the Scan format. The Report refines an identifier with the exact distinct count of the second pass when it holds one.

Detectors become candidate interpretations when their matched share of eligible values reaches scan.detection.minimum_share. A field gets a primary interpretation only when exactly one detector qualifies. The classification reads every qualifying detector, not only the primary one. Technical number and boolean are not repeated as semantic types.

Semantic typeMeaningScope or condition
dateDate, date-time or time syntax.A calendar-date inferred field is date; the date detector can also be primary for another field.
enumerationA bounded set of recurring values.Field-level rule: enough present values and no more than the configured distinct maximum.
emailBare email address syntax.Does not verify mailbox or domain ownership.
urlURL syntax and host.Does not visit the URL or resolve its host.
phoneSupported phone syntax.Does not check assigned numbers.
postal_codeCanadian or US postal-code syntax.Does not check an assigned address.
currencyNumber with currency symbol or code.A bare number is not currency evidence.
percentageNumber followed by %.The parsed value remains as written, such as 12 for 12%.
quantityNumber followed by a unit-shaped suffix.Units are not validated as physical units.
uuidUUID text form.Does not verify that an ID was issued.
ip_addressIPv4 or IPv6 text form.Does not check allocation or reachability.
pattern:<id>Full-value match to a configured regular expression.Exists only for a configured pattern.

Two qualifying detectors do not produce an arbitrary semantic type. Inspect all their evidence in Recognized patterns and in the report’s Detectors and formats table.

Scan retains measures independently of its final technical type. For example, a mixed field can still have numeric evidence for the values that parsed as numbers. Report shows its Numeric analysis table only for inferred integer and number fields with usable statistics, and its String analysis table only for inferred text fields. The --details column page also exposes a bounded selection of Scan measures. Always check the measure’s population and status before comparing it with a column’s total rows.

MeasurePopulation and meaningWhere to read it
Present and missingValues found at a field versus missing values or absent JSON members under a parent.Scan presence and missing; Report Columns → Missing.
Distinct valuesDifferent present analytical values after enabled Unicode composition, trim and whitespace collapse.Scan values.cardinality and normalization stages; Report Columns → Distinct.
Frequencies and examplesOccurrence counts for listed values and a bounded sample of distinct values.Scan values.frequencies and samples; Report Examples and its tooltip.
Type confidence and errorShare of present values in the accepted family and count outside it.Scan technical_type; Report Inferred type and Error.
Variant groupsRaw spellings that share a final comparison key after enabled case and accent stages.Scan normalization; Report Transformations.

Distinct counts and frequency lists can be limited; examples are a selection, not necessarily a complete distribution. A mixed field has no type error count because no family was accepted.

The Scan numeric block measures every accepted numeric value in the field, including native numbers and text parsed under the configured number rules. Its count, native_count and text_count identify this population. Report shows five summary measures for inferred numeric fields:

MeasureDefinitionAvailability
Minimum, MaximumSmallest and largest accepted numeric value.Scan and Report.
RangeMaximum minus minimum.Derived in Report from the two bounds.
MeanSum divided by numeric count.Scan and Report.
MedianMiddle numeric value, averaging the two middle values when needed.Scan measure; null in Report when its tracking limit was reached.
SumTotal of accepted numeric values.Scan and the standalone Report column page.
Population variance, standard deviationSpread around the mean, using the numeric population.Scan and the standalone Report column page.
Positive, negative, zeroCounts of numeric occurrences greater than, less than, or equal to zero. Missing and nonnumeric values are excluded.Scan and the standalone Report column page.
Integral decimalsDecimal values whose numeric value is whole.Scan and the standalone Report column page.

The numeric population can be smaller than the field’s present-value count if some values did not parse as numbers. In the Report table, Distinct and Examples describe normalized values, not the numeric calculation. When numeric statistics are complete, positive + negative + zero equals numeric.count. For example, 10, -2.5, 0, 4.5, and 1.0 yield 3 positive, 1 negative, and 1 zero value. A precision limit can make the numeric measure unavailable instead of showing partial sign counts.

Scan measures the length of each present analytical string after enabled Unicode composition, trim and internal whitespace collapse. Report’s string profile uses this measure only for an inferred text field.

MeasureDefinitionAvailability
Minimum, Maximum lengthShortest and longest observed analytical string, in characters.Scan string_lengths; Report Min and Max, or Fixed if equal.
Mean, Median lengthAverage and middle character count, weighted by occurrences.Scan and Report; Report leaves these cells blank when Fixed already gives the one length.
Fixed lengthMinimum equals maximum; the shared length is displayed.Derived in Report, not a claim about the field’s meaning.
Length distributionExact occurrence count for each observed length.Scan histogram; Report Lengths only when the maximum fits string_analysis.length_distribution_max_length.
Distinct lengthsNumber of different lengths observed.Report JSON profile even when the HTML length distribution is omitted.
Length classvery_short, short, medium, long or very_long, chosen from the maximum length and the scan.classification bounds. The Text type of the Scan classification uses the same bounds on the median length.Report Class.

Length examples come from bounded listed or sampled values. Distinct in the String analysis table counts values, not lengths. Scan also records string characteristics such as case, non-ASCII content, line breaks and whitespace.

The date detector separates unambiguous matches, ambiguous readings, invalid date-shaped values and other present values. Report’s Date analysis table appears when it finds date evidence, even if the field’s inferred type is not date.

MeasureDefinitionAvailability
Valid, ambiguous, invalid, otherCounts and percentages of eligible present values by outcome.Report Date analysis and detector coverage in Scan.
FormatsCounts for each recognized format, including numeric orders, date-times and times.Scan detector and Report Formats.
Ambiguity evidenceUnambiguous values per DMY and MDY order; evidence is shown but not applied to ambiguous values.Scan detector details and Report date profile.
Temporal rangeMinimum and maximum per kind: date, naive date-time, aware date-time or time. Aware and naive values are not compared together.Scan temporal and the standalone Report column page.
YearsCount per year when applicable to a temporal kind.Scan temporal and the standalone Report column page.

Only scan.detectors.date.ambiguous_order can explicitly resolve a supported ambiguous day/month order. Ambiguous values do not contribute to the temporal minimum and maximum.

Scan booleans counts native and recognized technical true/false values separately as true and false; the standalone Report column page displays those counts. The configurable boolean detector can additionally recognize word pairs such as yes/no and oui/non; its matched counts and formats are detector evidence, not the same as the technical boolean counts.

For email, phone, postal_code, url, currency, percentage, quantity, uuid, ip_address, enumeration and configured patterns, the shared measures are detector coverage, format counts and bounded examples. Some detectors add details such as domains, hosts, units or UUID versions. Those details are in Recognized patterns and the Scan detector result; they do not imply external verification.

Scan wraps measures with a status: complete, limited, not_applicable, disabled or failed. A limited measure is never estimated; a lower bound, when present, is only a proven minimum. Sensitive fields can have numeric or temporal measures disabled under masking or hiding, while counts remain available. See measure envelopes and exposure settings.