Presto 有一套内置的数据类型,如下所述。其他类型可以由插件提供。

注意:连接器不需要支持所有类型。有关支持类型的详细信息,请参阅连接器文档。

Boolean 布尔型

BOOLEAN

此类型表示布尔值 true 和 false。

Integer 整数

TINYINT

存储空间为 8 位的有符号整数,可以存储的值的范围从 $-2^{(8-1)}$ 到 $2^{(8-1)}-1$,即最小值为 -128,最大值为 127。

SMALLINT

存储空间为 16 位的有符号整数,可以存储的值的范围从 $-2^{(16-1)}$ 到 $2^{(16-1)}-1$,即最小值为 -32768,最大值为 32767。

INTEGER

存储空间为 32 位的有符号整数,可以存储的值的范围从 $-2^{(32-1)}$ 到 $2^{(32-1)}-1$,即最小值为 -2147483648,最大值为2147483647。

INT 名称也可用于此类型。

BIGINT

存储空间为 64 位的有符号整数,可以存储的值的范围从 $-2^{(64-1)}$ 到 $2^{(64-1)}-1$,即最小值为 -9223372036854775808,最大值为9223372036854775807。

Floating-Point 浮点数

REAL

32 位不精确的、可变精度的 IEEE 754 标准双精度浮点数。

DOUBLE

Double 是一种64位不精确、可变精度的二进制浮点运算实现 IEEE 标准754。

64 位不精确的、可变精度的 IEEE 754 标准双精度浮点数。

Fixed-Precision 固定精度

DECIMAL

固定精度的十进制数。支持最多 38 位的精度,但性能最高可达 18 位。

十进制类型有两个参数:

精度 - 表示有效数字数的精度;

小数位数 - 小数部分的位数,即小数点后的位数。小数位数是可选的,默认为0。

类型定义示例:DECIMAL (10,3)DECIMAL (20)

值示例:DECIMAL '10.3'DECIMAL '1234567890'1.1

注意:由于兼容性的原因,在 0.198 版本之前,没有明确类型指定的十进制字词(例如1.2)默认被视为 DOUBLE 类型的值。0.198 之后,它们被解析为 DECIMAL。

  • 系统范围内的属性:parse-decal-Literals-as-double
  • 会话范围内的属性:parse_decal_Literals_as_double

String 字符串

VARCHAR

具有可选最大长度的可变长度字符串。

类型定义示例:varcharvarchar(20)

CHAR

固定长度字符串。没有指定长度的 CHAR 类型的默认长度为 1。CHAR(x) 值总是有 x 字符。例如,在 CHAR(7) 中加入了 4 个隐式的尾随空格。在 CHAR 值的比较中包括前导空格和尾随空格。因此,两个长度不同的字符值 CHAR(x) 和 CHAR(y),其中 x != y,永远不会相等。

类型定义示例:charchar(20)

VARBINARY

可变长度二进制数据。

注意:不支持具有长度的二进制字符串:varinary(n)

JSON

JSON 值类型,可以是 JSON 对象、 JSON 数组、 JSON 数字、 JSON 字符串、 true、 false 或 null。

Date and Time 日期及时间

DATE

日历日期(年、月、日)。

例如:DATE '2001-08-22'

TIME

一天中没有时区的时间(小时、分钟、秒、毫秒)。此类型的值将在会话时区中进行解析和呈现。

例如:TIME '01:02:03.456'

TIME WITH TIME ZONE

带时区的一天中的时间(小时、分钟、秒、毫秒)。此类型的值使用该值的时区呈现。

例如:TIME '01:02:03.456 America/Los_Angeles'

TIMESTAMP

即时时间,包括一天中没有时区的日期和时间。此类型的值将在会话时区中进行解析和呈现。

例如:TIMESTAMP '2001-08-2203:04:05.321'

TIMESTAMP WITH TIME ZONE

即时时间,包括一天中的日期和时间,带有时区。此类型的值会根据所在的时区来显示具体的时间。

例如:TIMESTAMP '2001-08-22 03:04:05.321 America/Los_Angeles'

INTERVAL YEAR TO MONTH

表示年月之间跨度。

例如:INTERVAL '3' MONTH 表示 3 个月的跨度。

INTERVAL DAY TO SECOND

天、小时、分钟、秒和毫秒之间的跨度。

例如:INTERVAL '2' DAY 表示两天的跨度。

Structural 结构

ARRAY

表示给定类型的数组。

例如:ARRAY[1, 2, 3] 是一个整型数组。

MAP

表示一个键值对映射。

例如:MAP(ARRAY['foo', 'bar'], ARRAY[1, 2])

ROW

表示一个由命名字段组成的结构体。这些字段可以是任何 SQL 类型,并且可以通过字段引用运算符访问。

例如:CAST(ROW(1, 2.0) AS ROW(x BIGINT, y DOUBLE)) 将一个匿名 ROW 类型转换为一个命名字段 ROW 类型。

Network Address 网络地址

IPADDRESS

表示 IPv4 或 IPv6 地址。

在内部,它使用 IPv6 地址格式来存储,而 IPv4 地址会被映射到 IPv4 映射的 IPv6 地址范围(RFC 4291#section-2.5.5.2)。
创建 IPADDRESS 类型值时,IPv4 地址会被映射到这个范围。
显示 IPADDRESS 类型值时,如果地址属于这个映射范围,会以 IPv4 的格式显示,否则会以 RFC 5952 中定义的 IPv6 标准格式显示。
例如:
IPADDRESS '10.0.0.1' 存储为 IPv6 映射地址,显示为 IPv4 地址 '10.0.0.1'

IPADDRESS '2001:db8::1' 存储并显示为 IPv6 地址 '2001:db8::1'

UUID

UUID

表示 UUID (全局唯一标识符) ,也称为 GUID。

它使用 RFC4122 标准定义的格式。

例如:UUID '12151fd2-7586-11e9-8f9e-2a86e4085a59'

IPPREFIX

表示 IPv4 或 IPv6 地址的前缀。

在内部,它使用 IPv6 地址格式存储,IPv4 地址会被映射到 IPv4 映射的 IPv6 地址范围(RFC 4291#section-2.5.5.2)。
创建 IPPREFIX 值时,IPv4 地址会被映射并截断到网络前缀。
显示 IPPREFIX 值时,如果地址属于 IPv4 映射范围,会以 IPv4 CIDR 格式显示,否则会以 IPv6 CIDR 格式显示。
例如:

IPPREFIX '10.0.1.0/24' 存储为 IPv6 前缀,显示为 IPv4 CIDR ‘10.0.1.0/24’

IPPREFIX '2001:db8::/48' 存储并显示为 IPv6 CIDR ‘2001:db8::/48’

HyperLogLog

HyperLogLog 算法是一种近似计算不同计数的算法,比精确计数的算法更高效。

HyperLogLog

实现了 HyperLogLog 算法。它开始采用稀疏表示,当变得更加紧凑时会转换为密集表示。

P4HyperLogLog

也实现了 HyperLogLog 算法,但是它一开始和后续都采用密集表示。

HyperLogLog VS P4HyperLogLog

HyperLogLog 算法和相关的数据类型被用来高效地计算数据集中的不同元素数量。相比于精确计数,它可以节省大量内存空间。

HyperLogLogP4HyperLogLog 类型实现了 HyperLogLog 算法,但是采用了不同的表示方法。HyperLogLog 类型在空间上更加高效,会根据数据转换表示方法。P4HyperLogLog 类型始终采用密集表示,空间消耗稍大但是计算效率高一点。

所以,这些 HyperLogLog 相关的数据类型为我们提供了一种非常高效的方式来计算近似的不同计数。相比精确算法,它们可以极大地节省内存空间和计算资源。这使其非常适合在超大数据集上进行相应的运算和分析。

简单来说,HyperLogLog 算法及其相关数据类型利用近似算法实现不同计数的高效计算,这在超大数据集场景下具有非常高的应用价值。

KHyperLogLog

KHyperLogLog

实现了一种用于紧凑地表示两列关联的数据结构。

Quantile Digest 分位数摘要

QDigest

分位数摘要(qdigest)是一种摘要结构,用于捕获给定输入数据集的近似分布,并可通过查询从分布中检索近似分位数值。qdigest 的精度是可配置的,允许以牺牲空间为代价获得更精确的结果。

可以使用 qdigest 来近似地查询某个分位数的值。qdigest 的一个有用特性是它们是可加的,这意味着多个 qdigest 可以合并在一起而不会失去精度

qdigest 可用于对询问某个分位数的值的查询给出近似答案。Qdigest的一个有用特性是它们是可加的,这意味着它们可以合并在一起而不会丢失精度。

只要近似的分位数结果可以重用,分位数摘要就很有帮助。例如,某人可能对过去一周每天第 99 个分位数感兴趣。不需要计算整周的数据的第 99 个分位数,可以每天存储一个分位数摘要,并快速合并来查询第 99 个分位数。

T-Digest

TDigest

T-Digest 类似于 Q-Digest,但它使用不同的算法来表示一组数字的近似分布。T-Digest 比 Q-Digest 具有更好的性能,但是只支持 DOUBLE 类型。

(END)