跳到主要内容
版本:2.3.x

数据类型

CnosDB 的 SQL 使用 Apache Arrow DataFusion 实现,DataFusion 使用 Arrow 类型来执行查询,存储在 CnosDB 中的数据类型在查询时会被映射成 SQL 数据类型。

您可以通过 arrow_typeof 函数查询字段的 Arrow 数据数据类型,如下所示:

SELECT arrow_typeof('Hello CnosDB!');
+-------------------------------------+
| arrow_typeof(Utf8("Hello CnosDB!")) |
+-------------------------------------+
| Utf8 |
+-------------------------------------+

也可以将 SQL 表达式中的内容转换为指定的 Arrow 类型,比如将 Timestamp 类型转换为 Date32

SELECT arrow_cast(now(), 'Date32');
+------------+
| now() |
+------------+
| 2024-03-05 |
+------------+

CnosDB 只能存储部分数据类型,详细内容请查看 CREATE DATABASE

字符类型

SQL 数据类型Arrow 数据类型
CHARUtf8
VARCHARUtf8
TEXTUtf8
STRINGUtf8

数值类型

SQL 数据类型Arrow 数据类型
TINYINTInt8
SMALLINTInt16
INTINTEGERInt32
BIGINTInt64
TINYINT UNSIGNEDUInt8
SMALLINT UNSIGNEDUInt16
INT UNSIGNEDINTEGER UNSIGNEDUInt32
BIGINT UNSIGNEDUInt64
FLOATFloat32
REALFloat32
DOUBLEFloat64

日期和时间

SQL 数据类型Arrow 数据类型
DATEDate32
TIMETime64(Nanosecond)
TIMESTAMPTimestamp(Nanosecond, None)
INTERVALInterval(MonthDayNano)

布尔类型

SQL 数据类型Arrow 数据类型
BOOLEANBoolean

二进制类型

SQL 数据类型Arrow 数据类型
BYTEABinary

不支持的 SQL 类型

SQL 数据类型Arrow 数据类型
UUID不支持
BLOB不支持
CLOB不支持
BINARY不支持
VARBINARY不支持
REGCLASS不支持
NVARCHAR不支持
CUSTOM不支持
ARRAY不支持
ENUM不支持
SET不支持
DATETIME不支持

支持的 Arrow 类型

The following types are supported by the ARROW_TYPEOF function:

Arrow 类型
Null
Boolean
Int8
Int16
Int32
Int64
UInt8
UInt16
UInt32
UInt64
Float16
Float32
Float64
Utf8
LargeUtf8
Binary
Timestamp(Second, None)
Timestamp(Millisecond, None)
Timestamp(Microsecond, None)
Timestamp(Nanosecond, None)
Time32
Time64
Duration(Second)
Duration(Millisecond)
Duration(Microsecond)
Duration(Nanosecond)
Interval(YearMonth)
Interval(DayTime)
Interval(MonthDayNano)
FixedSizeBinary(<len>) (e.g. FixedSizeBinary(16))
Decimal128(<precision>, <scale>) e.g. Decimal128(3, 10)
Decimal256(<precision>, <scale>) e.g. Decimal256(3, 10)