> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kinetica.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Column Concepts

*Kinetica* supports the basic notion of SQL *tables* as containers of one or
more *columns* of data.

Table & column names must adhere to the supported
[naming criteria](/content/sql/naming#sql-naming-criteria).

A *column definition* consists of a *column type* and optional *column size*,
*column properties*, and nullability.  *Column properties* are used to optimize
data storage & speed.

The format of a defined *column* is *column name*, followed by
*column definition*.  A *column definition* is *column type* optionally followed
by any *column size* limit or *column properties* all enclosed in parentheses,
followed by an optional nullability statement:

```sql title="Column Definition Syntax" theme={null}
<column name> <column type> [(<column size / property list>)] [[NOT] NULL]
```

This format applies to any DDL statement requiring the definition of *columns*,
like [CREATE TABLE](/content/sql/ddl/create-table#sql-create-table) and [ALTER TABLE](/content/sql/ddl/alter-table#sql-alter-table) (when
adding/modifying a column).

For example, the following are valid defined *columns*:

```sql Column Definition Examples theme={null}
id INTEGER(SHARD_KEY)            -- id is an integer and the table's shard key
name VARCHAR(64, TEXT_SEARCH)    -- name is a 64-byte limited string and text-searchable
ip IPV4                          -- ip is a string in IPv4 format
cost DECIMAL(10, 2)              -- cost is able to hold an 8.2 decimal
```
