A data domain is the business meaning of a column, such as Amount, Email or Date. Each domain carries the ClickHouse data type and the suggested default values behind that meaning, and picking a domain for a column fills the column's Data Type with that type.
Domains are chosen in the Data Domain cell of the Columns step, where a table's columns are configured: see Define table columns and Set up a table's columns. For the Writeback mapping, see Map columns and Data types for columns.
Clicking outside the list closes it and clears the search box. When a search matches nothing, the list reads No domains found.
today() for Date or 'USD' for Currency.The list groups domains into six categories: Basic Types, Time Types, Identifiers, Specialized Types, Arrays and Complex Types and Custom. These tables show the domains, the ClickHouse type behind each one and what it is for.
Basic and time domains:
| Domain | Stored as | Use it for |
|---|---|---|
| Text | String | For general text data without length restrictions |
| ShortText | FixedString(50) | For fixed-length text where 50 is the maximum length |
| Code | String | For codes, symbols, identifiers (e.g., SWIFT, IBAN) |
| SingleCharacter | FixedString(1) | For single-character fields |
| Number | Int32 | For general integers (-2B to +2B) |
| SmallNumber | Int16 | For small integers (-32K to +32K) |
| LargeNumber | Int64 | For large integers |
| UnsignedNumber | UInt32 | For positive integers |
| Decimal | Decimal(18,2) | For decimal numbers (standard precision) |
| Amount | Decimal64(2) | For monetary amounts, 2 digits after decimal |
| LargeAmount | Decimal128(2) | For very large monetary amounts |
| HighPrecisionAmount | Decimal(18,6) | For high-precision numeric data |
| Percentage | Decimal(5,2) | For percentage values (0.00% - 100.00%) |
| Rate | Decimal(10,6) | For exchange rates and coefficients |
| Probability | Decimal(5,4) | Probability values (0.0000 to 1.0000) |
| Boolean | Bool | For true/false values |
| Date | Date32 | Date only, without time |
| DateTime | DateTime | Date and time, second precision |
| PreciseDateTime | DateTime64(3) | Date and time with millisecond precision |
| Time | DateTime64(0) | Time. Will be stored in Datetime, but you can use time functions. |
| Year | UInt16 | Year (e.g., 2025) |
| Month | UInt8 | Month number (1-12) |
| Quarter | UInt8 | Quarter (1-4) |
| DateRange | Tuple(Date, Date) | Date range with start and end dates |
| Duration | Int32 | Time duration in seconds |
Identifier, specialized and complex domains:
| Domain | Stored as | Use it for |
|---|---|---|
| ID | UInt32 | General ID fields |
| LargeID | UInt64 | Large ID fields |
| UUID | UUID | Universal unique identifiers |
| ExternalID | String | IDs from external systems |
| String | Email addresses | |
| URL | String | Web addresses |
| PhoneNumber | String | Phone numbers |
| Address | String | Physical addresses |
| GeoPoint | Point | Geographic coordinates [latitude, longitude] |
| Longitude/Latitude | Tuple(Float64, Float64) | Geographic Longitude and Latitude Tuple |
| Latitude/Longitude | Tuple(Float64, Float64) | Geographic Latitude and Longitude Tuple |
| IPAddress | IPv4 | IP addresses |
| JSON | String | JSON format data |
| Status | LowCardinality(String) | Status codes (Active, Inactive, Pending, etc.) |
| Currency | LowCardinality(FixedString(3)) | Currency codes (USD, EUR, GEL) |
| CountryCode | LowCardinality(FixedString(3)) | Country ISO codes |
| Description | String | Long descriptive texts |
| Hash | String | Hash values |
| TextList | Array(String) | Array of text strings |
| NumberList | Array(Int32) | Array of numbers |
| DateList | Array(Date) | Array of dates |
| KeyValuePairs | Map(String, String) | Simple key-value pairs |
Custom is different: it carries no type of its own. The catalogue describes it as "You can choose ClickHouse datatype on your own", for when you want to set the type yourself.
Every domain also comes with ready-made default values for the column. A few examples:
today(), now(), yesterday(), toDateTime(0), toDateTime64(0, 3), toYear(now()), tuple(today(), today()).-1, 0, rand(), generateShortID(), generateSnowflakeID(), generateUUIDv4(), toIPv4(0).'N/ A', 'Unknown', 'UNK', 'USD', 'USA', 'unknown@example. com'.true, false, [], {}, (0, 0), tuple(0. 0, 0. 0).The domain cannot be changed on a locked row, or on a foreign key column (non-array): the list does not open there. For every lock in the grid and why a cell cannot be changed, see The table columns grid.
Some rows keep their domain fixed. The list does not open on a locked row, or on a foreign key column (non-array), so the domain stays as it is.
Amount carries Decimal64(2), for monetary amounts with 2 digits after the decimal point. LargeAmount carries Decimal128(2), for very large monetary amounts. For finer precision, use HighPrecisionAmount (Decimal(18,6)).
Pick by what the column holds: Date (Date32) for a day, DateTime for date and time to the second, PreciseDateTime (DateTime64(3)) for milliseconds, and Time (DateTime64(0)) for a time of day.
Pick Custom. It carries no type of its own, so you set the Data Type yourself.
The search checks domain names, their descriptions and their types, so a word outside those may find nothing. The list reads No domains found; clear the box, or try a word from the meaning you want, such as date, text or email.
Each domain comes with a short list. Date offers today(), now() and yesterday(); UUID offers generateUUIDv4(); Currency offers 'USD', 'EUR' and 'N/. See Suggested default values above for more examples.
Yes. Open the Data Domain cell again and pick another one; it always shows the domain the column has. A locked row keeps its domain.
Open the list: each domain shows its type next to its name, such as Decimal64(2) for Amount. The tables on this page list the type behind each domain.