Hologres的資料類型與PostgreSQL的資料類型相容。本文為您介紹Hologres支援的資料類型及數群組類型。
資料類型
當前Hologres版本支援的資料類型是PostgreSQL的一個子集。Hologres已支援的資料類型列表如下。
|
名稱 |
支援的版本 |
儲存大小 |
說明 |
取值範圍 |
樣本 |
|
INTEGER(別名INT或INT4) |
Hologres所有版本 |
4位元組 |
常用的整數 |
-2147483648~+2147483647 |
2147483647 |
|
BIGINT(別名INT8) |
Hologres所有版本 |
8位元組 |
大範圍整數 |
-9223372036854775808~+9223372036854775807 |
9223372036854775807 |
|
BOOLEAN(別名BOOL) |
Hologres所有版本 |
1位元組 |
布爾類型 |
|
True |
|
REAL(別名FLOAT4) |
Hologres所有版本 |
4位元組 |
可變精度,不精確。 說明
在PostgreSQL生態中FLOAT不設定精度預設對應的是DOUBLE PRECISION(FLOAT8)。 |
精度為6位的十進位數字。 |
123.123 |
|
DOUBLE PRECISION(別名FLOAT8) |
Hologres所有版本 |
8位元組 |
可變精度,不精確。 |
精度為15位的十進位數字。 |
123.123456789123 |
|
TEXT |
Hologres所有版本 |
可變長 |
可變長度字串。TEXT類型相比VARCHAR(n)、CHAR(n)具備更高的靈活性,建議使用TEXT類型,而不是VARCHAR(n)、CHAR(n)。 |
無 |
abcdefg |
|
TIMESTAMP WITH TIME ZONE(別名TIMESTAMPTZ) |
Hologres所有版本 |
8位元組 |
帶時區的時間戳記。儲存精度為毫秒。 說明
標準PostgreSQL使用 |
4713 BC~294276 AD |
2004-10-19 10:23:54+02 |
|
DECIMAL(別名NUMERIC) |
Hologres所有版本 |
可變長 |
需要指定PRECISION和SCALE:
|
共可以指定38位元字(包含整數位和小數位)。 |
DECIMAL(38, 10) |
|
DATE |
Hologres V0.8版本新增 |
4位元組 |
單位為一天。 |
4713 BC ~ 5874897 AD |
2004-10-19 |
|
TIMESTAMP |
Hologres V0.8版本新增 |
8位元組 |
不包含時區的時間戳記,儲存精度為微秒。 |
4713 BC ~ 5874897 AD |
2020-01-01 01:01:01.123456 |
|
CHAR(n) |
Hologres V0.8版本新增 |
固定字元長度,最長n個字元。 |
儲存位元組不大於1 GB。 |
固定字元長度的字串。 |
|
|
VARCHAR(n) |
Hologres V0.8版本新增 |
可變長,不超過n個字元。 |
儲存位元組不大於1 GB。 |
有限字元長度的可變字串。 |
abcdefg |
|
SERIAL(自增序列) |
Hologres V0.8版本新增 |
詳情請參見 自增序列。 |
無 |
無 |
無 |
|
SMALLINT |
Hologres V0.9版本新增 |
2位元組 |
小範圍整數 |
-32768~+32767 |
32767 |
|
JSON和JSONB |
Hologres V0.9版本新增 |
詳情請參見JSON類型。 |
無 |
無 |
無 |
|
BYTEA |
Hologres V0.9版本新增 |
可變長,詳情請參見Binary Data Types。 |
可變長的二進位串。 |
儲存位元組不超過1 GB。 |
無 |
|
RoaringBitmap |
Hologres V0.10版本新增 |
可變長,詳情請參見RoaringBitmap函數。 |
高效的INT類型數組,支援常量數組位元影像計算。 |
無 |
無 |
|
RoaringBitmap64 |
Hologres V3.1版本新增 |
可變長,詳情請參見RoaringBitmap函數。 |
高效的BIGINT類型數組,支援常量數組位元影像計算。 |
無 |
無 |
|
BIT(n) |
Hologres V0.9版本新增 |
長度為n個bit的二進位串 |
固定長度的二進位串。 |
儲存位元組不超過1 GB。 |
無 |
|
VARBIT(n) |
Hologres V0.9版本 |
可變長,長度不超過n個bit的二進位串 |
有限bit長度的二進位串 |
儲存位元組不超過1 GB。 |
無 |
|
INTERVAL |
Hologres 所有版本 |
16位元組 |
無 |
-178000000 years~178000000 years |
interval '1 year' |
|
TIMETZ |
Hologres V0.9版本新增 |
12位元組 |
一天中的時間(帶時區),解析度為微秒。 |
00:00:00~24:00:00 |
12:00:00+08 |
|
TIME |
Hologres V0.9版本新增 |
8位元組 |
一天中的時間(不帶時區),解析度為微秒。 |
00:00:00~24:00:00 |
12:00:00 |
|
INET |
Hologres V0.9版本新增 |
詳情請參見網路地址類型。 |
INE在一個資料域裡儲存一個IPv4 或IPv6主機地址。 |
無 |
192.168.100.128/25 |
|
MONEY |
Hologres V0.9版本新增 |
8位元組,詳情請參見貨幣類型。 |
money類型儲存固定小數精度的貨幣數字。 |
-92233720368547758.08~+92233720368547758.07 |
12.34美元 |
|
OID |
Hologres V0.9版本新增 |
4位元組 |
數字形式的物件識別碼。 |
無 |
1024 |
|
UUID |
Hologres V0.9版本新增 |
16位元組 |
通用唯一識別碼,定長128位。 說明
目前還不支援uuid-ossp中實現的演算法。 |
00000000-0000-0000-0000-000000000000~ffffffff-ffff-ffff-ffff-ffffffffffff |
a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 |
TIMESTAMP WITH TIME ZONE、DATE和DECIMAL的樣本SQL語句如下。
CREATE TABLE test_data_type (
tswtz_column TIMESTAMP WITH TIME ZONE,
date_column date,
decimal_column decimal(38, 10),
char_column char(20),
varchar_volumn varchar(225)
);
INSERT INTO test_data_type
VALUES ('2004-10-19 08:08:08', '2004-10-19', 123.456, 'abcd', 'a');
SELECT * FROM test_data_type;
tswtz_column | date_column | decimal_column | char_column | varchar_volumn
------------------------+-------------+----------------+----------------------+----------------
2004-10-19 08:08:08+08 | 2004-10-19 | 123.4560000000 | abcd | a
(1 row)
BIT、VARBIT和BYTEA的樣本SQL語句如下。
//BIT、VARBIT
CREATE TABLE test (a BIT(3), b BIT VARYING(5));
INSERT INTO test VALUES (B'101', B'00');
INSERT INTO test VALUES (B'10', B'101');
ERROR: bit string length 2 does not match type bit(3)
INSERT INTO test VALUES (B'10'::bit(3), B'101');
SELECT * FROM test;
a | b
-----+-----
101 | 00
100 | 101
//BYTEA
SET bytea_output = 'escape';
SELECT 'abc \153\154\155 \052\251\124'::bytea;
bytea
----------------
abc klm *\251T
RESET bytea_output; -- 'hex' by default
SELECT 'abc \153\154\155 \052\251\124'::bytea;
bytea
--------------------------
\x616263206b6c6d202aa954
(1 row)
數群組類型
Hologres目前的版本僅支援如下一維數組:
-
int4[]
-
int8[]
-
float4[]
-
float8[]
-
boolean[]
-
text[]
使用樣本:
-
聲明數組。
CREATE TABLE array_example( int4_array int4[], int8_array int8[], float4_array float4[], float8_array float8[], boolean_array boolean[], text_array text[]); -
插入數組。
-
使用ARRAY關鍵字。
INSERT INTO array_example( int4_array, int8_array, float4_array, float8_array, boolean_array, text_array) VALUES (ARRAY[1, 2, 3, 4], ARRAY[1, 2, 3, 4], ARRAY[1.0, 2.0], ARRAY[1.0, 2.0, 3.0], ARRAY[true, true, false], ARRAY['foo1', 'foo2', 'foo3']); -
使用
{}運算式。INSERT INTO array_example( int4_array, int8_array, float4_array, float8_array, boolean_array, text_array) VALUES ('{1, 2, 3, 4}', '{1, 2, 3, 4}', '{1.0, 2.0}', '{1.0, 2.0, 3.0}', '{true, true, false}', '{"foo1", "foo2", "foo3"}');
-
-
查詢數組。
-
查詢數組中單個元素。
SELECT int4_array[3] FROM array_example; -
查詢數組中多個元素。
SELECT int4_array[1:2] FROM array_example;
-
MaxCompute與Hologres的資料類型映射
建立MaxCompute外部表格時,MaxCompute與Hologres的資料類型映射如下表所示。
|
MaxCompute資料類型 |
Hologres資料類型 |
支援映射的版本 |
說明 |
|
JSON |
JSONB |
Hologres V4.1新增 |
|
|
TEXT |
Hologres所有版本 |
無 |
|
BIGINT |
INT8 |
Hologres所有版本 |
無 |
|
INT |
|
Hologres所有版本 |
無 |
|
FLOAT |
|
Hologres所有版本 |
無 |
|
DOUBLE |
|
Hologres所有版本 |
無 |
|
BOOLEAN |
BOOL |
Hologres所有版本 |
無 |
|
DATETIME |
TIMESTAMP WITH TIME ZONE |
Hologres所有版本 |
MaxCompute的DATETIME是日期時間類型,使用東八區時間作為系統標準時間。範圍從0000年1月1日到9999年12月31日,精確到毫秒 。 |
|
DECIMAL |
NUMERIC |
Hologres所有版本 |
MaxCompute的DECIMAL如果未指定精度,則預設為(38,18),使用IMPORT FOREIGN SCHEMA建立表時系統會自動轉換精度。 |
|
TIMESTAMP |
TIMESTAMP WITH TIME ZONE |
Hologres V0.8新增 |
|
|
CHAR(n) |
預設為CHAR(n)。 Hologres也支援映射MaxCompute的CHAR(n)為TEXT類型。您需要設定參數 |
Hologres V0.8新增 |
MaxCompute的CHAR(n)為固定長度字元類型,n為長度。最大取值為255。長度不足則使用空格填充。 |
|
VARCHAR(n) |
預設為VARCHAR(n)。 Hologres也支援映射MaxCompute的VARCHAR(n)為TEXT類型。您需要設定參數 |
Hologres V0.8新增 |
MaxCompute的VARCHAR(n)為變長字元類型,n為長度。取值範圍為1~65535。 |
|
DATE |
DATE |
Hologres V0.8新增 |
無 |
|
SMALLINT |
預設為INT2。 Hologres也支援映射MaxCompute的SMALLINT為INT8類型。您需要設定參數 |
Hologres所有版本(0.8版本為 int4, 0.9版本為int2) |
無 |
|
TINYINT |
預設為INT2。 Hologres也支援映射MaxCompute的TINYINT為INT8類型。您需要設定參數 |
Hologres所有版本(0.8版本為 int4, 0.9版本為int2) |
無 |
|
CHAR |
不支援 |
不支援 |
無 |
|
ARRAY<INT> |
INT4[] |
Hologres V0.8新增 |
無 |
|
ARRAY<BIGINT> |
INT8[] |
Hologres V0.8新增 |
無 |
|
ARRAY<FLOAT> |
FLOAT4[] |
Hologres V0.8新增 |
無 |
|
ARRAY<DOUBLE> |
FLOAT8[] |
Hologres V0.8新增 |
無 |
|
ARRAY<BOOLEAN> |
BOOLEAN[] |
Hologres V0.8新增 |
無 |
|
ARRAY<STRING> |
TEXT[] |
Hologres V0.8新增 |
無 |
|
BINARY |
BYTEA |
Hologres V0.9新增 |
無 |
|
ARRAY<TINYINT> |
不支援 |
不支援 |
無 |
|
ARRAY<SMALLINT> |
不支援 |
不支援 |
無 |
當MaxCompute資料表中含有Hologres不支援的類型欄位時,如果Hologres不訪問該欄位,則可以正常查詢所支援的類型欄位。
Blink/Flink與Hologres的資料類型映射
Blink/Flink與Hologres的資料類型映射如下表所示。
Binlog源表目前只支援部分資料類型,詳情請參見Flink/Blink即時消費Hologres Binlog。
|
Flink資料類型 |
Hologres資料類型 |
支援映射的Hologres版本 |
支援映射的Flink版本 |
|
INT |
|
Hologres所有版本 |
所有版本 |
|
BIGINT |
INT8 |
Hologres所有版本 |
所有版本 |
|
VARCHAR |
TEXT |
Hologres所有版本 |
所有版本 |
|
DOUBLE |
|
Hologres所有版本 |
所有版本 |
|
BOOLEAN |
BOOL |
Hologres所有版本 |
所有版本 |
|
DECIMAL |
NUMERIC 說明
在使用CTAS同步資料至Hologres時:
更多詳細介紹,請參見為什麼主鍵為bigint unsigned的MySQL表註冊Flink Catalog,主鍵會變為decimal?但是使用CTAS同步到Hologres後,主鍵又變為text?。 |
Hologres所有版本 |
所有版本 |
|
DATE |
DATE |
Hologres V0.8新增 |
所有版本 |
|
TIMESTAMP |
TIMESTAMP WITH TIME ZONE |
Hologres所有版本 |
所有版本 |
|
FLOAT |
|
Hologres所有版本 |
所有版本 |
|
TIME |
TIME和TIMETZ |
Hologres所有版本 說明
Hologres V2.1.24版本起,Fixed Plan加速SQL執行支援TIME和TIMETZ類型。 |
|
|
VARCHAR |
JSONB |
Hologres V0.10新增 |
|
|
VARCHAR |
JSON |
Hologres V0.9新增 |
|
|
BYTES |
RoaringBitmap |
Hologres V0.10新增 |
|
|
VARCHAR |
GEOMETRY和GEOGRAPHY |
Hologres所有版本 說明
Hologres V2.1版本起,Fixed Plan加速SQL執行支援TGEOMETRY和GEOGRAPHY類型的資料寫入。 |
|
|
TINYINT |
SMALLINT |
Hologres所有版本 |
|
|
SMALLINT |
SMALLINT |
Hologres所有版本 |
|
|
ARRAY<INT> |
int4[] |
Hologres V0.8新增 |
|
|
ARRAY<BIGINT> |
int8[] |
Hologres V0.8新增 |
|
|
ARRAY<FLOAT> |
float4[] |
Hologres V0.8新增 |
|
|
ARRAY<DOUBLE> |
float8[] |
Hologres V0.8新增 |
|
|
ARRAY<BOOLEAN> |
boolean[] |
Hologres V0.8新增 |
|
|
ARRAY<VARCHAR> |
TEXT[] |
Hologres V0.8新增 |
|
|
ARRAY<VARCHAR> |
VARCHAR[] |
Hologres V0.8新增 |
|
|
CHAR |
不支援 |
不支援 |
不支援 |
|
BINARY |
不支援 |
不支援 |
不支援 |
MySQL與Hologres資料類型映射
MySQL與Hologres資料類型映射如下表所示,關於MySQL遷移至Hologres的詳情請參見遷移MySQL至Hologres。
|
MySQL資料類型 |
Hologres資料類型 |
|
BIGINT |
BIGINT |
|
BINARY(n) |
BYTEA |
|
BIT |
BOOLEAN |
|
|
|
DATE |
DATE |
|
DATETIME |
TIMESTAMP [WITHOUT TIME ZONE] |
|
|
|
DOUBLE |
DOUBLE PRECISION |
|
FLOAT |
REAL |
|
|
|
MEDIUMINT |
INTEGER |
|
NUMERIC(p,s) |
NUMERIC(p,s) |
|
SMALLINT |
SMALLINT |
|
BYTEA |
|
TINYINT |
SMALLINT |
|
TEXT |
|
TIME |
TIME [WITHOUT TIME ZONE] |
|
TIMESTAMP |
TIMESTAMP [WITH TIME ZONE] |
|
BYTEA |
|
VARCHAR(n) |
VARCHAR(n) |
|
VARCHAR(max) |
TEXT |
DLF與Hologres的資料類型映射
|
DLF資料類型 |
Hologres資料類型 |
|
TINYINT |
SMALLINT |
|
SMALLINT |
SMALLINT |
|
INT |
INT |
|
BIGINT |
BIGINT |
|
BOOLEAN |
BOOLEAN |
|
FLOAT |
REAL |
|
DOUBLE |
DOUBLE PRECISION |
|
DATE |
DATE |
|
TIMESTAMP |
TIMESTAMP WITHOUT TIME ZONE |
|
STRING |
TEXT |
|
BINARY |
BYTEA |
|
DECIMAL(m,n) |
NUMERIC(m,n) |
|
VARCHAR(n) |
CHARACTER VARYING(n) |
|
CHAR(n) |
CHARACTOR(n) |
|
ARRAY<type> |
ARRAY<hologres_data_type> 支援的類型如下:
|
Hive資料類型與Hologres的資料類型映射
|
Hive資料類型 |
Hologres資料類型 |
|
TINYINT |
SMALLINT |
|
SMALLINT |
SMALLINT |
|
INT |
INT |
|
BIGINT |
BIGINT |
|
FLOAT |
REAL |
|
DOUBLE |
DOUBLE PRECISION |
|
DECIMAL |
NUMERIC |
|
NUMERIC |
NUMERIC |
|
DATE |
DATE |
|
TIMESTAMP |
TIMESTAMP WITHOUT TIME ZONE |
|
STRING |
TEXT |
|
VARCHAR |
VARCHAR |
|
CHAR |
CHAR |
|
BINARY |
BYTEA |
|
BOOL |
BOOLEAN |
|
ARRAY<type> |
ARRAY<hologres_data_type> 支援的類型如下:
|
Hudi資料類型與Hologres的資料類型映射
Hologres從V1.3版本開始支援。
|
Hudi資料類型 |
Hologres資料類型 |
|
IntegerType |
INT |
|
LongType |
BIGINT |
|
FloatType |
REAL |
|
DoubleType |
DOUBLE PRECISION |
|
DecimalType |
NUMERIC |
|
TimestampType |
TIMESTAMP WITHOUT TIME ZONE |
|
DateType |
DATE |
|
YearMonthIntervalType |
不支援 |
|
DayTimeIntervalType |
不支援 |
|
StringType |
TEXT |
|
VarcharType |
不支援 |
|
CharType |
不支援 |
|
BooleanType |
BOOL |
|
BinaryType |
BYTEA |
|
ByteType |
不支援 |
|
ShortType |
不支援 |
|
ArrayType(elementType, containsNull) |
ARRAY<hologres_data_type> 支援類型如下:
|
Delta資料類型與Hologres的資料類型映射
Hologres從V1.3版本開始支援。
|
Delta Lake資料類型 |
Hologres資料類型 |
|
TINYINT |
SMALLINT |
|
SMALLINT |
SMALLINT |
|
INT |
INT |
|
BIGINT |
BIGINT |
|
FLOAT |
REAL |
|
DOUBLE |
DOUBLE PRECISION |
|
DECIMAL(p,s) |
NUMERIC |
|
TIMESTAMP |
TIMESTAMP WITHOUT TIME ZONE |
|
DATE |
DATE |
|
INTERVAL intervalQualifier |
不支援 |
|
STRING |
TEXT |
|
BOOLEAN |
BOOLEAN |
|
BINARY |
BYTEA |
|
ARRAY<elementType> |
ARRAY<hologres_data_type> 支援類型如下:
|
Paimon資料類型與Hologres資料類型映射
|
Paimon資料類型 |
Hologres資料類型 |
|
TINYINT |
SMALLINT |
|
SMALLINT |
SMALLINT |
|
INT |
INT |
|
BIGINT |
BIGINT |
|
FLOAT |
REAL |
|
DOUBLE |
DOUBLE PRECISION |
|
DECIMAL(p,s) |
DECIMAL |
|
TIMESTAMP |
TIMESTAMP WITHOUT TIME ZONE |
|
DATE |
DATE |
|
CHAR |
CHAR |
|
VARCHAR |
VARCHAR |
|
BINARY |
BYTEA |
|
ARRAY |
ARRAY<hologres_data_type> 支援類型如下:
|
Iceberg與Hologres資料類型映射
|
Iceberg資料類型 |
Hologres資料類型 |
|
BOOLEAN |
BOOLEAN |
|
INT |
INTEGER |
|
LONG |
BIGINT |
|
FLOAT |
REAL |
|
DOUBLE |
DOUBLE PRECISION |
|
DECIMAL(P,S) |
NUMERIC(P,S) |
|
DATE |
DATE |
|
TIME |
TEXT(Spark不支援TIME類型,Flink的TIME類型寫入DLF中就變成STRING類型) |
|
TIMESTAMP |
TIMESTAMP WITHOUT TIME ZONE |
|
TIMESTAMPTZ |
暫不支援 |
|
STRING |
TEXT |
|
UUID |
暫不支援(Flink/Spark寫不出這種類型) |
|
FIXED(L) |
BYTEA |
|
BINARY |
BYTEA |
|
LIST |
ARRAY<hologres_data_type> 支援類型如下:
|
|
STRUCT |
不支援 |
|
MAP |
不支援 |