网站首页 > 技术文章 正文
QuestDB数据类型
1.数据类型
类型系统是从Java类型派生出来的。
Type Name | Storage bits | Nullable | Description |
boolean | 1 | No | 布尔值“true”或“false”。 |
ipv4 | 32 | Yes | 0.0.0.1 到 255.255.255.255 |
byte | 8 | No | 有符号整数 -128 到127. |
short | 16 | No | 有符号整数-32768 到32767. |
char | 16 | Yes | unicode 字符. |
int | 32 | Yes | 有符号整数 0x80000000 到0x7fffffff. |
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类型的预先存在的列中。
猜你喜欢
- 2024-11-04 从原理聊JVM(一):染色标记和垃圾回收算法
- 2024-11-04 一文读懂String类的基本数据类型 strings类型
- 2024-11-04 阿里&北大:深度哈希算法最新综述
- 2024-11-04 数据结构与算法之哈希表 数据结构哈希函数
- 2024-11-04 区块链中两个最重要的数据加密安全技术,非对称加密、哈希计算
- 2024-11-04 如何识别文件的真假 识别文件真实类型最有效的方式
- 2024-11-04 大厂必备技能:数据结构之哈希表 数据结构课程设计哈希表设计
- 2024-11-04 向量数据库-相似性搜索概述 向量相似度算法
- 2024-11-04 两个对象不相等,HashCode 有可能相等吗?
- 2024-11-04 JAVA教程——equals和hashCode java中hashcode的用法
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)