数据类型

    注意

    连接器不需要支持所有的数据类型。连接器支持的数据类型,请参见连接器文档。

    整数类型

    TINYINT

    一个8比特带符号的2补码整数,最小值为-2^7,最大值为2^7 - 1

    SMALLINT

    一个16比特带符号的2补码整数,最小值为-2^15,最大值为2^15 - 1

    INTEGER

    一个32比特带符号的2补码整数,最小值为-2^31,最大值为2^31 - 1。该类型也被称为INT

    BIGINT

    一个64比特带符号的2补码整数,最小值为-2^63,最大值为2^63 - 1

    浮点类型

    一种不精确的可变精度的32比特的数据类型,实现IEEE 754标准定义的二进制浮点运算。

    此类型也被称为FLOAT

    例如: REAL ‘10.3’, REAL ‘10.3e0’, REAL ‘1.03e1’

    DOUBLE

    一种不精确的可变精度的64比特的数据类型,它实现了IEEE 754标准定义的二进制浮点运算。

    该类型也被称为DOUBLE PRECISION

    DECIMAL

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

    该类型也被称为NUMERICDEC

    此数据类型有两个参数:

    • precision - 表示总位数。
    • scale - 小数位数。Scale可选,默认为0。

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

    文本示例:DECIMAL '10.3', DECIMAL '1234567890', 1.1

    注意

    由于兼容性原因,没有显式类型说明符的十进制文字(例如 1.2)默认作为DOUBLE类型的值处理。但在以后的版本中也可能会有变化。此行为受以下控制:

    • 系统属性: parse-decimal-literals-as-double
    • 会话属性: parse_decimal_literals_as_double

    字符串类型

    VARCHAR

    可变长度字符数据,最大长度可选。

    该类型也被称为STRING。请注意,STRING定义的是一个无限长的字符数据,您不能指定长度,否则它就成为VARCHAR(length)类型了。

    SQL语句支持简单文字和Unicode使用:

    • 文本字符串: 'Hello winter !'
    • 含默认转义字符的Unicode字符串:U&'Hello winter \2603 !'

    Unicode字符串以U&为前缀,任何4位Unicode字符前都需要转义符。 在上例中,\2603#2603代表雪人符号。 对于6位的Unicode长编码,需要在代码前使用一个加号。例如,您需要在笑脸表情前使用\+01F600

    VARBINARY

    可变长度二进制数据。

    注意

    目前仍不支持带长度的二进制字符:

    JSON

    JSON数值类型,可以是JSON对象、JSON数组、JSON数字、JSON字符串、truefalsenull

    日期和时间类型

    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

    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))

    已命名的行字段通过字段引用运算符.访问。

    例如: CAST(ROW(1, 2.0) AS ROW(x BIGINT, y DOUBLE)).x

    已命名或未命名的行字段通过下标运算符[]按位置访问。位置从1开始且必须是常量。

    例如: ROW(1, 2.0)[1]

    网络地址

    IPADDRESS

    可表示IPv4地址或IPv6地址。对内为纯IPv6地址。可通过IPv4-mapped IPv6 address range (RFC 4291#section-2.5.5.2)来支持对IPv4地址的处理。在创建IPADDRESS时,IPv4地址将映射到指定的范围。格式化IPADDRESS时,在映射范围内的任何地址都会被格式化为IPv4地址。其他地址将使用 中定义的规范格式格式化为IPv6地址。

    例如: IPADDRESS '10.0.0.1', IPADDRESS '2001:db8::1'

    UUID

    UUID

    此类型表示UUID(通用唯一标识符),也称为GUID(全局唯一标识符),使用RFC 4122 中定义的格式。

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

    计算近似的非重复计数比使用 数据草图进行精确计数成本低得多。 请参见 HyperLogLog 函数

    HyperLogLog

    HyperLogLog 草图可高效地计算 approx_distinct()。它开始时是稀疏表示,当效率提高时,就切换到密集表示。

    P4HyperLogLog

    P4HyperLogLog草图类似于hyperloglog_type,但它从始至终都采用密集表示形式。

    分位点摘要

    QDigest

    分位点摘要(qdigest)是一种摘要结构,它捕捉指定输入集的数据的近似分布,并且可以通过查询从分布中检索近似分位点值。 qdigest的准确程度是可调的,使更精确的结果会占用更多空间。

    对于在某一分位数处属于什么值的查询,可用qdigest提供近似回答。qdigest的一个有用的特性是它们是可加的,这意味着它们可以合并在一起而不损失精度。

    approx_percentile的部分结果可以重用时,qdigest就会发挥更大作用。例如,人们可能对在一周内每天读取的第99百分位数值感兴趣。 这种情况下,与其使用approx_percentile计算过去一周的数据,不如使用。qdigest可以每天存储,并快速合并以检索第99个百分位值。