数据类型¶
Presto 有一组内置的数据类型,如下所述。插件可以提供其他类型。
注意
连接器不需要支持所有类型。有关支持的类型的详细信息,请参阅连接器文档。
布尔值¶
BOOLEAN
¶
此类型捕获布尔值 true
和 false
。
整数¶
注意
在将字符串转换为 TINYINT
、SMALLINT
、INTEGER
或 BIGINT
时,强制转换函数允许前导和尾随空格。
TINYINT
¶
8 位有符号二进制补码整数,最小值为 -2^7
,最大值为 2^7 - 1
。
SMALLINT
¶
16 位有符号二进制补码整数,最小值为 -2^15
,最大值为 2^15 - 1
。
INTEGER
¶
32 位有符号二进制补码整数,最小值为 -2^31
,最大值为 2^31 - 1
。名称 INT
也可用于此类型。
BIGINT
¶
64 位有符号二进制补码整数,最小值为 -2^63
,最大值为 2^63 - 1
。
浮点数¶
REAL
¶
实数是 32 位不精确的,可变精度的,实现 IEEE 标准 754 用于二进制浮点运算。
Presto 在处理 NaN 时偏离了 IEEE 标准。在 Presto 中,NaN 被认为大于所有其他值,用于所有比较和排序操作。此外,NaN=NaN 对于所有相等性和不同性目的将为真。
DOUBLE
¶
双精度是 64 位不精确的,可变精度的,实现 IEEE 标准 754 用于二进制浮点运算。
Presto 在处理 NaN 时偏离了 IEEE 标准。在 Presto 中,NaN 被认为大于所有其他值,用于所有比较和排序操作。此外,NaN=NaN 对于所有相等性和不同性目的将为真。
定点¶
DECIMAL
¶
定点小数。支持高达 38 位的精度,但性能在高达 18 位时最佳。
小数类型采用两个文字参数
precision - 总位数
scale - 小数部分的位数。scale 是可选的,默认值为 0。
示例类型定义:DECIMAL(10,3)
、DECIMAL(20)
示例文字:DECIMAL '10.3'
、DECIMAL '1234567890'
、1.1
注意
出于兼容性原因,没有显式类型说明符的小数文字(例如 1.2
)在版本 0.198 之前默认被视为 DOUBLE
类型的值。在 0.198 之后,它们被解析为 DECIMAL。
系统范围属性:
parse-decimal-literals-as-double
会话范围属性:
parse_decimal_literals_as_double
字符串¶
VARCHAR
¶
可变长度字符数据,带有可选的最大长度。
示例类型定义:varchar
、varchar(20)
。
- SQL 支持简单和 Unicode 字符串文字
文字字符串:
'Hello winter !'
使用默认转义字符的 Unicode 字符串:
U&'Hello winter \2603 !'
使用自定义转义字符的 Unicode 字符串:
U&'Hello winter #2603 !' UESCAPE '#'
Unicode 字符串以 U&
为前缀,需要在使用任何 Unicode 字符时在其之前使用 4 位数字的转义字符。在这些示例中,\2603
和 #2603
表示雪人字符。具有 6 位数字的长 Unicode 代码需要在代码之前使用加号符号 +
。例如,对于咧嘴笑的 emoji,请使用 \+01F600
。
字符串文字中的单引号可以使用另一个单引号来转义:'It''s a beautiful day!'
CHAR
¶
固定长度字符数据。没有指定长度的 CHAR 类型具有默认长度 1。 CHAR(x) 值始终具有 x 个字符。例如,将 dog 转换为 CHAR(7) 会添加 4 个隐式尾随空格。前导和尾随空格包含在 CHAR 值的比较中。因此,具有不同长度的两个字符值(CHAR(x) 和 CHAR(y),其中 x != y)永远不会相等,但此类值的比较会隐式地将类型转换为相同的长度并用空格填充,以便以下查询返回 true
SELECT cast('example' AS char(20)) = cast('example ' AS char(25));
与 VARCHAR 一样,CHAR 文字中的单引号可以使用另一个单引号来转义
SELECT CHAR 'All right, Mr. DeMille, I''m ready for my close-up.'
VARBINARY
¶
可变长度二进制数据。
注意
尚不支持具有长度的二进制字符串:varbinary(n)
JSON
¶
JSON 值类型,可以是 JSON 对象、JSON 数组、JSON 数字、JSON 字符串、true
、false
或 null
。
日期和时间¶
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-22 03: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
INTERVAL DAY TO SECOND
¶
天、小时、分钟、秒和毫秒的跨度。
示例:INTERVAL '2' DAY
结构化¶
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))
网络地址¶
IPADDRESS
¶
可以表示 IPv4 或 IPv6 地址的 IP 地址。
在内部,该类型是纯 IPv6 地址。对 IPv4 的支持是使用 _IPv4 映射的 IPv6 地址_ 范围 (RFC 4291#section-2.5.5.2) 进行处理。在创建 IPADDRESS
时,IPv4 地址将被映射到该范围内。
在格式化 IPADDRESS
时,映射范围内任何地址都将被格式化为 IPv4 地址。其他地址将使用 RFC 5952 中定义的规范格式格式化为 IPv6。
示例:IPADDRESS '10.0.0.1'
, IPADDRESS '2001:db8::1'
IPPREFIX
¶
可以表示 IPv4 或 IPv6 地址的 IP 路由前缀。
在内部,地址是纯 IPv6 地址。对 IPv4 的支持是使用 _IPv4 映射的 IPv6 地址_ 范围 (RFC 4291#section-2.5.5.2) 进行处理。在创建 IPPREFIX
时,IPv4 地址将被映射到该范围内。此外,地址将被缩减到网络的第一个地址。
IPPREFIX
值将以 CIDR 表示法格式化,写成 IP 地址、斜杠(‘/’)字符和前缀的位长度。IPv4 映射的 IPv6 地址范围内的任何地址都将被格式化为 IPv4 地址。其他地址将使用 RFC 5952 中定义的规范格式格式化为 IPv6。
示例:IPPREFIX '10.0.1.0/24'
, IPPREFIX '2001:db8::/48'
UUID¶
UUID
¶
此类型表示 UUID(通用唯一标识符),也称为 GUID(全局唯一标识符),使用 RFC 4122 中定义的格式。
示例:UUID '12151fd2-7586-11e9-8f9e-2a86e4085a59'
HyperLogLog¶
使用 HyperLogLog 数据草图,可以比精确计数更便宜地计算近似不同的计数。参见 HyperLogLog 函数。
HyperLogLog
¶
HyperLogLog 草图允许有效地计算 approx_distinct()
。它从稀疏表示开始,当它变得更有效时切换到密集表示。
P4HyperLogLog
¶
P4HyperLogLog 草图类似于 HyperLogLog,但它从(并且保持)密集表示开始。
KHyperLogLog¶
KHyperLogLog
¶
KHyperLogLog 是一种数据草图,可用于紧凑地表示两列的关联。参见 KHyperLogLog 函数。
SetDigest¶
SetDigest
¶
SetDigest(setdigest)是一种数据草图结构,用于计算两个集合之间的 Jaccard 相似系数。
SetDigest 包含以下组件
HyperLogLog 结构用于近似原始集合中不同的元素。
MinHash 结构用于存储原始集合的低内存占用签名。通过比较两个集合的签名来估计任何两个集合的相似度。
SetDigest 是可加的,这意味着它们可以合并在一起。
SFM 草图¶
SfmSketch
¶
Sketch-Flip-Merge(SFM)数据草图是一种类似于 HyperLogLog 的噪声随机不同计数草图。参见 noisy_approx_set_sfm()
。
分位数摘要¶
QDigest
¶
分位数摘要 (qdigest) 是一种摘要结构,它捕获给定输入集的数据的近似分布,并且可以查询以从分布中检索近似分位数。qdigest 的准确度级别是可调的,允许以空间为代价获得更精确的结果。
qdigest 可用于对询问特定分位数上属于哪个值的查询给出近似答案。qdigest 的一个有用属性是它们是可加的,这意味着它们可以合并在一起而不会损失精度。
当 approx_percentile
的部分结果可以重用时,qdigest 可能会有所帮助。例如,人们可能对一周内每天读取的第 99 个百分位数的值感兴趣。不是用 approx_percentile
计算过去一周的数据,而是可以每天存储 qdigest
,然后快速合并以检索第 99 个百分位数的值。
参见 分位数摘要函数。
T-Digest¶
TDigest
¶
T-digest 类似于 qdigest,但它使用 不同的算法 来表示一组数字的近似分布。T-digest 比分位数摘要性能更好,但只支持 DOUBLE
类型。参见 T-Digest 函数。
KLL 草图¶
KLL Sketch
¶
KLL 草图类似于 qdigest,但与 T-Digest 一样,它使用 不同的算法 来表示一组值的近似分布。Presto 中的 KLL 草图支持 int、bigint、double、varchar 和 boolean 类型。有关更多信息,请参见 草图函数。在序列化形式中,Presto 存储的 kllsketch
类型可以直接被任何其他使用 Apache DataSketches 库来读取 KLL 草图的应用程序读取。
地理空间¶
Geospatial
¶
Presto 中的地理空间类型旨在高效地处理和分析空间数据,符合 SQL/MM 规范和开放地理空间联盟标准。这些类型包括 POINT
、LINESTRING
、POLYGON
、MULTIPOINT
、MULTILINESTRING
、MULTIPOLYGON
和 GEOMETRYCOLLECTION
,它们可以用 Well-Known Text (WKT) 和 Well-Known Binary (WKB) 格式表示。这些类型支持空间测量和关系检查等操作,对于地理信息系统 (GIS) 和其他需要空间数据操作的应用程序至关重要。地理空间类型确保数据完整性,并为复杂的空间查询和分析提供强大的工具。
请参见 地理空间函数。