Data Types
MekaDB is a SQL database. Below is a list of data types supported or planned.
Character Types
| SQL DataType |
|---|
CHAR |
VARCHAR |
TEXT |
STRING |
Numeric Types
| SQL DataType |
|---|
TINYINT |
SMALLINT |
INT or INTEGER |
BIGINT |
TINYINT UNSIGNED |
SMALLINT UNSIGNED |
INT UNSIGNED or INTEGER UNSIGNED |
BIGINT UNSIGNED |
FLOAT |
REAL |
DOUBLE |
Date/Time Types
| SQL DataType |
|---|
TIMESTAMP |
Boolean Types
| SQL DataType |
|---|
BOOLEAN |
Binary Types
| SQL DataType |
|---|
BYTEA |
You can create binary literals using a hex string literal such as X'1234 to create a Binary value of two bytes, 0x12 and 0x34.
Unsupported SQL Types
| SQL Data Type | Arrow DataType |
|---|---|
UUID | Not yet supported |
BLOB | Not yet supported |
CLOB | Not yet supported |
BINARY | Not yet supported |
VARBINARY | Not yet supported |
REGCLASS | Not yet supported |
NVARCHAR | Not yet supported |
CUSTOM | Not yet supported |
ARRAY | Not yet supported |
ENUM | Not yet supported |
SET | Not yet supported |
DATETIME | Not yet supported |
Supported Arrow Types
MekaDB's SQL capability is built on top of Datafusion. As a result, its arrow_typeof function is also available.
The following types are supported by the arrow_typeof function:
| Arrow Type |
|---|
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) |
MekaDB uses Arrow, and thus the Arrow type system, for query execution. The SQL types from sqlparser-rs are mapped to Arrow data types according to the following table.
This mapping occurs when defining the schema in a CREATE EXTERNAL TABLE command or when performing a SQL CAST operation.
You can see the corresponding Arrow type for any SQL expression using the arrow_typeof function. For example:
❯ select arrow_typeof(interval '1 month');
+-------------------------------------+
| arrowtypeof(IntervalYearMonth("1")) |
+-------------------------------------+
| Interval(YearMonth) |
+-------------------------------------+
You can cast a SQL expression to a specific Arrow type using the arrow_cast function
For example, to cast the output of now() to a Timestamp with second precision:
❯ select arrow_cast(now(), 'Timestamp(Second, None)');
+---------------------+
| now() |
+---------------------+
| 2023-03-03T17:19:21 |
+---------------------+
Large portions of this page is copied from the Apache Datafusion documentation on January 26th 2024 - where there have been customisations to match Hypi's deployment this has been noted. Apache Datafusion and the Apache name are the property of the Apache Foundation and licensed under the Apache V2 license .