# FLOAT Data Type

A single precision floating-point data type used in `CREATE TABLE`

and ```
ALTER
TABLE
```

statements.

**Syntax:**

In the column definition of a `CREATE TABLE`

statement:

`column_name` FLOAT

**Range:** 1.40129846432481707e-45 .. 3.40282346638528860e+38, positive or negative

**Precision:** 6 to 9 significant digits, depending on usage. The number of significant digits does
not depend on the position of the decimal point.

**Representation:** The values are stored in 4 bytes, using
IEEE 754 Single Precision Binary Floating Point format.

**Conversions:** Impala automatically converts `FLOAT`

to more precise
`DOUBLE`

values, but not the other way around. You can use `CAST()`

to convert
`FLOAT`

values to `TINYINT`

, `SMALLINT`

, `INT`

,
`BIGINT`

, `STRING`

, `TIMESTAMP`

, or `BOOLEAN`

.
You can use exponential notation in `FLOAT`

literals or when casting from
`STRING`

, for example `1.0e6`

to represent one million.
Casting an integer or floating-point value
`N`

to `TIMESTAMP`

produces a value that is
`N`

seconds past the start of the epoch date (January 1, 1970). By
default, the result value represents a date and time in the UTC time zone. If the
setting `‑‑use_local_tz_for_unix_timestamp_conversions=true`

is in effect, the resulting `TIMESTAMP`

represents a date and time in the
local time zone.

**Usage notes:**

Impala does not evaluate NaN (not a number) as equal to any other numeric values,
including other NaN values. For example, the following statement, which evaluates
equality between two NaN values, returns `false`

:

```
SELECT CAST('nan' AS FLOAT)=CAST('nan' AS FLOAT);
```

**Examples:**

```
CREATE TABLE t1 (x FLOAT);
SELECT CAST(1000.5 AS FLOAT);
```

**Partitioning:** Because fractional values of this type are not always represented
precisely, when this type is used for a partition key column, the underlying HDFS
directories might not be named exactly as you expect. Prefer to partition on a
`DECIMAL`

column instead.

**HBase considerations:** This data type is fully compatible with HBase tables.

**Parquet considerations:** This type is fully compatible with Parquet tables.

**Text table considerations:** Values of this type are potentially larger in text
tables than in tables using Parquet or other binary formats.

**Internal details:** Represented in memory as a 4-byte value.

**Column statistics considerations:** Because this type has a fixed size, the maximum
and average size fields are always filled in for column statistics, even before you run
the `COMPUTE STATS`

statement.

**Restrictions:**

Due to the way arithmetic on `FLOAT`

and `DOUBLE`

columns
uses high-performance hardware instructions, and distributed queries can perform these
operations in different order for each query, results can vary slightly for aggregate
function calls such as `SUM()`

and `AVG()`

for
`FLOAT`

and `DOUBLE`

columns, particularly on large data
sets where millions or billions of values are summed or averaged. For perfect
consistency and repeatability, use the `DECIMAL`

data type for such
operations instead of `FLOAT`

or `DOUBLE`

.

The inability to exactly represent certain floating-point values means that
`DECIMAL`

is sometimes a better choice than `DOUBLE`

or
`FLOAT`

when precision is critical, particularly when transferring data
from other database systems that use different representations or file formats.

**Kudu considerations:**

Currently, the data types `BOOLEAN`

, `FLOAT`

, and
`DOUBLE`

cannot be used for primary key columns in Kudu tables.

**Related information:**

Numeric Literals, Impala Mathematical Functions, DOUBLE Data Type