数据类型
openLooKeng有一组内置的数据类型,如下所述。可能通过插件提供更多的类型。
注意
连接器不需要支持所有的数据类型。连接器支持的数据类型,请参见连接器文档。
布尔类型
BOOLEAN
捕获布尔值
true
和false
。
整数类型
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
。
浮点类型
REAL
一种不精确的可变精度的32比特的数据类型,实现IEEE 754标准定义的二进制浮点运算。
此类型也被称为
FLOAT
。例如: REAL ‘10.3’, REAL ‘10.3e0’, REAL ‘1.03e1’
DOUBLE
一种不精确的可变精度的64比特的数据类型,它实现了IEEE 754标准定义的二进制浮点运算。
该类型也被称为
DOUBLE PRECISION
。
固定精度类型
DECIMAL
固定精度的十进制数。精度最高可达38位,但性能最高可达18位。
该类型也被称为
NUMERIC
和DEC
。此数据类型有两个参数:
- 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)
类型了。类型定义示例:
varchar
,varchar(20)
,string
SQL语句支持简单文字和Unicode使用:
- 文本字符串:
'Hello winter !'
- 含默认转义字符的Unicode字符串:
U&'Hello winter \2603 !'
- 含自定义转义字符的Unicode字符串:
U&'Hello winter #2603 !'UESCAPE '#'
Unicode字符串以
U&
为前缀,任何4位Unicode字符前都需要转义符。 在上例中,\2603
和#2603
代表雪人符号。 对于6位的Unicode长编码,需要在代码前使用一个加号。例如,您需要在笑脸表情前使用\+01F600
。
CHAR
固定长度字符。对于不指定长度的
CHAR
类型,默认长度为1。一个CHAR(x)
包含x
个字符。例如,将dog
转换为CHAR(7)
会增加4个隐式尾部空格。在比较CHAR
值时包括前导和尾部空格。因此,两个不同长度的字符值(CHAR(x)
和CHAR(y)
,其中x != y
)永远不会相等。类型定义示例:
char
,char(20)
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))
已命名的行字段通过字段引用运算符
.
访问。例如:
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地址。其他地址将使用RFC 5929中定义的规范格式格式化为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 函数。
HyperLogLog
HyperLogLog 草图可高效地计算 approx_distinct()。它开始时是稀疏表示,当效率提高时,就切换到密集表示。
P4HyperLogLog
P4HyperLogLog草图类似于
hyperloglog_type
,但它从始至终都采用密集表示形式。
分位点摘要
QDigest
分位点摘要(qdigest)是一种摘要结构,它捕捉指定输入集的数据的近似分布,并且可以通过查询从分布中检索近似分位点值。 qdigest的准确程度是可调的,使更精确的结果会占用更多空间。
对于在某一分位数处属于什么值的查询,可用qdigest提供近似回答。qdigest的一个有用的特性是它们是可加的,这意味着它们可以合并在一起而不损失精度。
当
approx_percentile
的部分结果可以重用时,qdigest就会发挥更大作用。例如,人们可能对在一周内每天读取的第99百分位数值感兴趣。 这种情况下,与其使用approx_percentile
计算过去一周的数据,不如使用qdigest
。qdigest
可以每天存储,并快速合并以检索第99个百分位值。