数据类型

SQL 数据类型定义了列可以存储的数据类型。当您运行 DESC TABLE 命令时,你可以看到每列的数据类型。

字符串和二进制数据类型

类型名称描述大小
StringUTF-8 编码的字符串。最多可容纳 2,147,483,647 字节的数据字符串的长度
Binary变长二进制值。最多可容纳 2,147,483,647 字节的数据数据的长度 + 2 字节

StringBinary 的最大容量取决于它们的编码方式以及存储引擎如何处理它们。例如,String 值被编码为 UTF-8,如果所有字符的长度为 3 个字节,该字段最多可以存储 715,827,882 个字符。对于 Binary 类型,它们最多可以存储 2,147,483,647 字节。

数值数据类型

类型名称描述大小
Int8-128 ~ 1271 字节
Int16-32768 ~ 327672 字节
Int32-2147483648 ~ 21474836474 字节
Int64-9223372036854775808 ~ 92233720368547758078 字节
UInt80 ~ 2551 字节
UInt160 ~ 655352 字节
UInt320 ~ 42949672954 字节
UInt640 ~ 184467440737095516158 字节
Float3232 位 IEEE 754 浮点数4 字节
Float64双精度 IEEE 754 浮点数8 字节

Decimal 类型

GreptimeDB 支持 decimal 类型,这是一种定点类型,表示为 decimal(precision, scale),其中 precision 是总位数,scale 是小数部分的位数。例如,123.45 的总位数为 5,小数位数为 2。

  • precision 可以在 [1, 38] 范围内。
  • scale 可以在 [0, precision] 范围内。

如果未指定总位数和比例,则默认的十进制数是 decimal(38, 10)

  1. CREATE TABLE decimals(
  2. d DECIMAL(3, 2),
  3. ts TIMESTAMP TIME INDEX,
  4. );
  5. INSERT INTO decimals VALUES ('0.1',1000), ('0.2',2000);
  6. SELECT * FROM decimals;
  1. +------+---------------------+
  2. | d | ts |
  3. +------+---------------------+
  4. | 0.10 | 1970-01-01T00:00:01 |
  5. | 0.20 | 1970-01-01T00:00:02 |
  6. +------+---------------------+

日期和时间类型

类型名称描述大小
TimestampSecond64 位时间戳值,精度为秒8 字节
TimestampMillisecond64 位时间戳值,毫秒精度8 字节
TimestampMicroSecond64 位时间戳值,微秒精度8 字节
TimestampNanosecond64 位时间戳值,纳秒精度8 字节

布尔类型

类型名称描述大小
Boolean布尔值1 字节

在 SQL 语句中使用 TRUEFALSE 表示布尔值。例如:

  1. CREATE TABLE bools(
  2. b BOOLEAN,
  3. ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP() TIME INDEX,
  4. );
  1. INSERT INTO bools(b) VALUES (TRUE), (FALSE);

与 MySQL 和 PostgreSQL 兼容的数据类型

类型别名

对于从 MySQL 或 PostgreSQL 迁移到 GreptimeDB 的用户,GreptimeDB 支持以下类型别名。

数据类型别名
StringText, Varchar, Char
BinaryVarbinary
Int8TinyInt
Int16SmallInt
Int32Int
Int64BigInt
UInt8UnsignedInt
UInt16UnsignedTinyInt
UInt32UnsignedSmallInt
UInt64UnsignedBigInt
Float32Float
Float64Double
TimestampSecondTimestamp_s, Timestamp_sec, Timestamp(0)
TimestampMillisecondTimestamp, Timestamp_ms , Timestamp(3)
TimestampMicroSecondTimestamp_us, Timestamp(6)
TimestampNanosecondTimestamp_ns, Timestamp(9)

在创建表时也可以使用这些别名类型。 例如,使用 Varchar 代替 String,使用 Double 代替 Float64,使用 Timestamp(0) 代替 TimestampSecond

  1. CREATE TABLE alias_types (
  2. s TEXT,
  3. i Double,
  4. ts0 Timestamp(0) DEFAULT CURRENT_TIMESTAMP() TIME INDEX,
  5. PRIMARY KEY(s)
  6. );

日期和时间类型

除了在 GreptimeDB 中用作默认时间类型的 Timestamp 类型之外 GreptimeDB 还支持与 MySQL 和 PostgreSQL 兼容的 DateDateTime 类型。

类型名称描述大小
Date32 位日期值,表示自 UNIX Epoch 以来的天数4 字节
DateTime64 位日期时间值,表示自 UNIX Epoch 以来的毫秒数8 字节

示例

创建表

  1. CREATE TABLE data_types (
  2. s STRING,
  3. vbi BINARY,
  4. b BOOLEAN,
  5. tint INT8,
  6. sint INT16,
  7. i INT32,
  8. bint INT64,
  9. utint UINT8,
  10. usint UINT16,
  11. ui UINT32,
  12. ubint UINT64,
  13. f FLOAT32,
  14. d FLOAT64,
  15. dm DECIMAL(3, 2),
  16. dt DATE,
  17. dtt DATETIME,
  18. ts0 TIMESTAMPSECOND,
  19. ts3 TIMESTAMPMILLISECOND,
  20. ts6 TIMESTAMPMICROSECOND,
  21. ts9 TIMESTAMPNANOSECOND DEFAULT CURRENT_TIMESTAMP() TIME INDEX,
  22. PRIMARY KEY(s));

描述表结构

  1. DESC TABLE data_types;
  1. +--------+----------------------+------+------+---------------------+---------------+
  2. | Column | Type | Key | Null | Default | Semantic Type |
  3. +--------+----------------------+------+------+---------------------+---------------+
  4. | s | String | PRI | YES | | TAG |
  5. | vbi | Binary | | YES | | FIELD |
  6. | b | Boolean | | YES | | FIELD |
  7. | tint | Int8 | | YES | | FIELD |
  8. | sint | Int16 | | YES | | FIELD |
  9. | i | Int32 | | YES | | FIELD |
  10. | bint | Int64 | | YES | | FIELD |
  11. | utint | UInt8 | | YES | | FIELD |
  12. | usint | UInt16 | | YES | | FIELD |
  13. | ui | UInt32 | | YES | | FIELD |
  14. | ubint | UInt64 | | YES | | FIELD |
  15. | f | Float32 | | YES | | FIELD |
  16. | d | Float64 | | YES | | FIELD |
  17. | dm | Decimal(3, 2) | | YES | | FIELD |
  18. | dt | Date | | YES | | FIELD |
  19. | dtt | DateTime | | YES | | FIELD |
  20. | ts0 | TimestampSecond | | YES | | FIELD |
  21. | ts3 | TimestampMillisecond | | YES | | FIELD |
  22. | ts6 | TimestampMicrosecond | | YES | | FIELD |
  23. | ts9 | TimestampNanosecond | PRI | NO | current_timestamp() | TIMESTAMP |
  24. +--------+----------------------+------+------+---------------------+---------------+