计算机系统应用教程网站

网站首页 > 技术文章 正文

2.QuestDB数据类型 queue类

btikc 2024-11-04 12:21:50 技术文章 4 ℃ 0 评论

QuestDB数据类型

1.数据类型

类型系统是从Java类型派生出来的。

Type Name

Storage bits

Nullable

Description

boolean

1

No

布尔值“true”或“false”。

ipv4

32

Yes

0.0.0.1255.255.255.255

byte

8

No

有符号整数 -128127.

short

16

No

有符号整数-3276832767.

char

16

Yes

unicode 字符.

int

32

Yes

有符号整数 0x800000000x7fffffff.

float

32

Yes

单精度IEEE 754浮点值。

symbol

32

Yes

符号存储为符号表中的32位带符号索引。每个索引都有一个相应的“字符串”值。当写入或读取数据时,从索引到字符串值的转换会自动完成。符号表与列分开存储。

varchar

128 + utf8Len

Yes

UTF-8编码字符的长度前缀序列使用128位标头和UTF-8编码数据存储。小于9字节的序列完全内联在标头中,不占用任何额外的数据空间。

string

96+n*16

Yes

UTF-16编码字符的长度前缀序列,其长度存储为带符号的32位整数,最大值为“0x7ffffff”。

long

64

Yes

有符号整数 0x8000000000000000L to 0x7fffffffffffffffL.

date

64

Yes

从[Unix纪元]开始的带符号偏移量(以毫秒为单位)。 虽然“date”数据类型可用,但我们强烈建议使用“timestamp”数据类型代替它。日期的唯一实质性优势是时间范围更广;然而,时间戳在几乎所有情况下都是足够的。Date支持的函数较少,使用毫秒而不是微秒。

timestamp

64

Yes

[Unix纪元]的符号偏移量(以微秒为单位)

double

64

Yes

双精度IEEE 754浮点值。

uuid

128

Yes

UUID 值

binary

64+n*8

Yes

长度前缀的字节序列,其长度存储为带符号的64位整数,最大值为“0x7ffffffffFFFFFL”。

long256

256

Yes

无符号256位整数。不支持任意算术运算,只支持相等性检查。适用于存储哈希码,如加密公共地址。

geohash(<size>)

8-64

Yes

地理哈希 Geohash,精度指定为数字,后跟“b”表示位,“c”表示字符。

2.VARCHAR和STRING注意事项

QuestDB支持两种存储字符串的类型:VARCHAR和STRING。

大多数用户应该使用VARCHAR。VARCHAR采用UTF-8编码。相比之下,STRING存储在UTF-16中,UTF-16的效率低于UTF-8,但保留了与旧版本QuestDB的兼容性。

此外,VARCHAR还包括一些针对快速访问和存储的优化。

3.可变大小的类型限制

单个VARCHAR字段大小的最大值为268 MB。单个分区中VARCHAR列的大小受 218 TB或磁盘大小的限制,以较小者为准。

BINARY字段大小受64位有符号整数(8388608 peta字节)或磁盘大小的限制,以较小者为准。

STRING字段大小受32位带符号整数(1073741824个字符)或磁盘大小的限制,以较小者为准。

4.类型可为空

可为NULL的类型使用特定的值来标记NULL值:

Type Name

Null value

Description

float

NaN

如IEEE 754所定义(java.lang.Float.NaN).

double

NaN

如IEEE 754所定义(java.lang.Double.NaN).

long256

0x8000000000000000800000000000000080000000000000008000000000000000

该值等于四个连续的“长”空文本。

long

0x8000000000000000L

最小可能值为-2^63。

date

0x8000000000000000L

最小可能值为-2^63。

timestamp

0x8000000000000000L

最小可能值为-2^63。

int

0x80000000

最小可能值为-2^31。

uuid

80000000-0000-0000-8000-000000000000

64个最高位和64个最低位都设置为-2^63。

char

0x0000

0.

geohash(byte)

0xff

Geohash“从1到包含7位”。

geohash(short)

0xffff

Geohash“从8位到包含15位”。

geohash(int)

0xffffffff

Geohash“从16位到包含31位”。

geohash(long)

0xffffffffffffffff

Geohash从32位到60位不等。

symbol

0x80000000

符号以“int”偏移量存储在查找文件中。

varchar

N/A

Varchar列在标头中有一个显式的“NULL”标记。

string

0xffffffff

字符串以长度为前缀,长度为“int”,“-1”标记为“NULL”(不使用其他存储)。

binary

0xffffffffffffffff

二进制列也有长度前缀,长度为“long”,“-1”标记为“NULL”(不使用进一步的存储)。

ipv4

null

IPv4地址存储为“int”。

要过滤包含或不包含NULL值的列,请使用以下过滤器:

SELECT * FROM <table> WHERE <column> = NULL;
SELECT * FROM <table> WHERE <column> != NULL;

或者,从版本6.3开始,使用NULL相等运算符别名:

SELECT * FROM <table> WHERE <column> IS NULL;
SELECT * FROM <table> WHERE <column> IS NOT NULL;

注:NULL值仍占用磁盘空间。

5.UUID类型

QuestDB本机支持UUID类型,该类型应用于UUID列,而不是将UUID存储为字符串。UUID列在内部存储为128位整数,可以提高性能,特别是在过滤和排序方面。允许在UUID列中插入字符串,但数据将被转换为UUID类型。

插入字符串:

CREATE TABLE my_table (
    id UUID
);
[...]
INSERT INTO my_table VALUES ('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');
[...]
SELECT * FROM my_table WHERE id = 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11';

如果你使用PostgreSQL Wire协议,那么你可以在查询中使用uuid类型。JDBC API不区分UUID类型,但Postgres JDBC驱动程序在准备好的语句中支持它:

UUID uuid = UUID.randomUUID();
PreparedStatement ps = connection.prepareStatement("INSERT INTO my_table VALUES (?)");
ps.setObject(1, uuid);

QuestDB客户端库可以将UUID作为字符串发送,以便服务器将其转换为UUID。

6.IPv4

QuestDB支持IPv4数据类型。数据类型添加了有效性检查和特定类型的函数。正如人们所想象的那样,它们在处理IP地址时非常有用。

IPv4地址存在于0.0.0.1-255.255.255.255的范围内。

一个完整的零地址-0.0.0.0.0被解释为null。

可以使用IPv4数据类型创建列,如下所示:

-- Creating a table named traffic with two ipv4 columns: src and dst.
CREATE TABLE traffic (ts timestamp, src ipv4, dst ipv4) timestamp(ts) PARTITION BY DAY;

IPv4地址还支持各种现有的SQL函数,并包含自己的运算符。

局限性:

无法通过InfluxDB线路协议创建IPv4列类型,因为该协议缺乏对IPv4的支持。因此,服务器无法区分字符串和IPv4数据。但是,InfluxDB线路协议仍然可以将字符串数据插入到IPv4类型的预先存在的列中。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表