7.1. Data Types
Presto has a set of built-in data types, described below.Additional types can be provided by plugins.
Note
Connectors are not required to support all types.See connector documentation for details on supported types.
Boolean
BOOLEAN
This type captures boolean valuestrue
andfalse
.
Integer
TINYINT
A 8-bit signed two’s complement integer with a minimum value of-2^7
and a maximum value of2^7 - 1
.
SMALLINT
A 16-bit signed two’s complement integer with a minimum value of-2^15
and a maximum value of2^15 - 1
.
INTEGER
A 32-bit signed two’s complement integer with a minimum value of-2^31
and a maximum value of2^31 - 1
. The nameINT
isalso available for this type.
BIGINT
A 64-bit signed two’s complement integer with a minimum value of-2^63
and a maximum value of2^63 - 1
.
Floating-Point
REAL
A real is a 32-bit inexact, variable-precision implementing theIEEE Standard 754 for Binary Floating-Point Arithmetic.
DOUBLE
A double is a 64-bit inexact, variable-precision implementing theIEEE Standard 754 for Binary Floating-Point Arithmetic.
Fixed-Precision
DECIMAL
A fixed precision decimal number. Precision up to 38 digits is supportedbut performance is best up to 18 digits.The decimal type takes two literal parameters:- precision - total number of digits- scale - number of digits in fractional part. Scale is optional and defaults to 0.Example type definitions:DECIMAL(10,3)
,DECIMAL(20)
Example literals:DECIMAL '10.3'
,DECIMAL '1234567890'
,1.1
NoteFor compatibility reasons decimal literals without explicit type specifier (e.g.1.2
)are treated as the values of theDOUBLE
type by default, but this is subject to changein future releases. This behavior is controlled by:- System wide property: parse-decimal-literals-as-double- Session wide property: parse_decimal_literals_as_double
String
VARCHAR
Variable length character data with an optional maximum length.Example type definitions:varchar
,varchar(20)
CHAR
Fixed length character data. ACHAR
type without length specified has a default length of 1.ACHAR(x)
value always hasx
characters. For instance, castingdog
toCHAR(7)
adds 4 implicit trailing spaces. Leading and trailing spaces are included in comparisons ofCHAR
values. As a result, two character values with different lengths (CHAR(x)
andCHAR(y)
wherex != y
) will never be equal.Example type definitions:char
,char(20)
VARBINARY
Variable length binary data.NoteBinary strings with length are not yet supported:varbinary(n)
JSON
JSON value type, which can be a JSON object, a JSON array, a JSON number, a JSON string,true
,false
ornull
.
Date and Time
DATE
Calendar date (year, month, day).Example:DATE '2001-08-22'
TIME
Time of day (hour, minute, second, millisecond) without a time zone.Values of this type are parsed and rendered in the session time zone.Example:TIME '01:02:03.456'
TIME WITH TIME ZONE
Time of day (hour, minute, second, millisecond) with a time zone.Values of this type are rendered using the time zone from the value.Example:TIME '01:02:03.456 America/Los_Angeles'
TIMESTAMP
Instant in time that includes the date and time of day without a time zone.Values of this type are parsed and rendered in the session time zone.Example:TIMESTAMP '2001-08-22 03:04:05.321'
TIMESTAMP WITH TIME ZONE
Instant in time that includes the date and time of day with a time zone.Values of this type are rendered using the time zone from the value.Example:TIMESTAMP '2001-08-22 03:04:05.321 America/Los_Angeles'
INTERVAL YEAR TO MONTH
Span of years and months.Example:INTERVAL '3' MONTH
INTERVAL DAY TO SECOND
Span of days, hours, minutes, seconds and milliseconds.Example:INTERVAL '2' DAY
Structural
ARRAY
An array of the given component type.Example:ARRAY[1, 2, 3]
MAP
A map between the given component types.Example:MAP(ARRAY['foo', 'bar'], ARRAY[1, 2])
ROW
A structure made up of named fields. The fields may be of any SQL type, and areaccessed with field reference operator.
Example:CAST(ROW(1, 2.0) AS ROW(x BIGINT, y DOUBLE))
Network Address
IPADDRESS
An IP address that can represent either an IPv4 or IPv6 address. Internally,the type is a pure IPv6 address. Support for IPv4 is handled using theIPv4-mapped IPv6 address range (RFC 4291#section-2.5.5.2).When creating anIPADDRESS
, IPv4 addresses will be mapped into that range.When formatting anIPADDRESS
, any address within the mapped range willbe formatted as an IPv4 address. Other addresses will be formatted as IPv6using the canonical format defined in RFC 5952.Examples:IPADDRESS '10.0.0.1'
,IPADDRESS '2001:db8::1'