數(shù)據(jù)類型匯總
Hologres的數(shù)據(jù)類型與PostgreSQL的數(shù)據(jù)類型兼容。本文為您介紹Hologres支持的數(shù)據(jù)類型及數(shù)組類型。
數(shù)據(jù)類型
當(dāng)前Hologres版本支持的數(shù)據(jù)類型是PostgreSQL的一個(gè)子集。Hologres已支持的數(shù)據(jù)類型列表如下。
名稱 | 支持的版本 | 存儲大小 | 說明 | 取值范圍 | 示例 |
INTEGER(別名INT或INT4) | Hologres所有版本 | 4字節(jié) | 常用的整數(shù) | -2147483648~+2147483647 | 2147483647 |
BIGINT(別名INT8) | Hologres所有版本 | 8字節(jié) | 大范圍整數(shù) | -9223372036854775808~+9223372036854775807 | 9223372036854775807 |
BOOLEAN(別名BOOL) | Hologres所有版本 | 1字節(jié) | 布爾類型 |
| True |
REAL(別名FLOAT4) | Hologres所有版本 | 4字節(jié) | 可變精度,不精確。 說明 在PostgreSQL生態(tài)中FLOAT不設(shè)置精度默認(rèn)對應(yīng)的是DOUBLE PRECISION(FLOAT8)。 | 精度為6位的十進(jìn)制數(shù)字。 | 123.123 |
DOUBLE PRECISION(別名FLOAT8) | Hologres所有版本 | 8字節(jié) | 可變精度,不精確。 | 精度為15位的十進(jìn)制數(shù)字。 | 123.123456789123 |
TEXT | Hologres所有版本 | 可變長 | 可變長度字符串。TEXT類型相比VARCHAR(n)、CHAR(n)具備更高的靈活性,建議使用TEXT類型,而不是VARCHAR(n)、CHAR(n)。 | 無 | abcdefg |
TIMESTAMP WITH TIME ZONE(別名TIMESTAMPTZ) | Hologres所有版本 | 8字節(jié) | 帶時(shí)區(qū)的時(shí)間戳。存儲精度為毫秒。 說明 標(biāo)準(zhǔn)PostgreSQL使用 | 4713 BC~294276 AD | 2004-10-19 10:23:54+02 |
DECIMAL(別名NUMERIC) | Hologres所有版本 | 可變長 | 需要指定PRECISION和SCALE:
| 共可以指定38位數(shù)字(包含整數(shù)位和小數(shù)位)。 | DECIMAL(38, 10) |
DATE | Hologres 0.8版本新增 | 4字節(jié) | 單位為一天。 | 4713 BC ~ 5874897 AD | 2004-10-19 |
TIMESTAMP | Hologres 0.8版本新增 | 8字節(jié) | 不包含時(shí)區(qū)的時(shí)間戳,存儲精度為微秒。 | 4713 BC ~ 5874897 AD | 2020-01-01 01:01:01.123456 |
CHAR(n) | Hologres 0.8版本新增 | 固定字符長度,最長n個(gè)字符。 | 存儲字節(jié)不大于1 GB。 | 固定字符長度的字符串。 |
|
VARCHAR(n) | Hologres 0.8版本新增 | 可變長,不超過n個(gè)字符。 | 存儲字節(jié)不大于1 GB。 | 有限字符長度的可變字符串。 | abcdefg |
SERIAL(自增序列) | Hologres 0.8版本新增 | 詳情請參見 自增序列Serial(Beta)。 | 無 | 無 | 無 |
SMALLINT | Hologres 0.9版本新增 | 2字節(jié) | 小范圍整數(shù) | -32768~+32767 | 32767 |
JSON和JSONB | Hologres 0.9版本新增 | 詳情請參見JSON和JSONB類型。 | 無 | 無 | 無 |
BYTEA | Hologres 0.9版本新增 | 可變長,詳情請參見Binary Data Types。 | 可變長的二進(jìn)制串。 | 存儲字節(jié)不超過1 GB。 | 無 |
RoaringBitmap | Hologres 0.10版本新增 | 可變長,詳情請參見RoaringBitmap函數(shù)。 | 高效的INT類型數(shù)組,支持常量數(shù)組位圖計(jì)算。 | 無 | 無 |
BIT(n) | Hologres 0.9版本新增 | 長度為n個(gè)bit的二進(jìn)制串 | 固定長度的二進(jìn)制串。 | 存儲字節(jié)不超過1 GB。 | 無 |
VARBIT(n) | Hologres 0.9版本 | 可變長,長度不超過n個(gè)bit的二進(jìn)制串 | 有限bit長度的二進(jìn)制串 | 存儲字節(jié)不超過1 GB。 | 無 |
INTERVAL | Hologres 所有版本 | 16字節(jié) | 無 | -178000000 years~178000000 years | interval '1 year' |
TIMETZ | Hologres 0.9版本新增 | 12字節(jié) | 一天中的時(shí)間(帶時(shí)區(qū)),解析度為微秒。 | 00:00:00~24:00:00 | 12:00:00+08 |
TIME | Hologres 0.9版本新增 | 8字節(jié) | 一天中的時(shí)間(不帶時(shí)區(qū)),解析度為微秒。 | 00:00:00~24:00:00 | 12:00:00 |
INET | Hologres 0.9版本新增 | 詳情請參見網(wǎng)絡(luò)地址類型。 | INE在一個(gè)數(shù)據(jù)域里保存一個(gè)IPv4 或IPv6主機(jī)地址。 | 無 | 192.168.100.128/25 |
MONEY | Hologres 0.9版本新增 | 8字節(jié),詳情請參見貨幣類型。 | money類型存儲固定小數(shù)精度的貨幣數(shù)字。 | -92233720368547758.08~+92233720368547758.07 | 12.34美元 |
OID | Hologres 0.9版本新增 | 4字節(jié) | 數(shù)字形式的對象標(biāo)識符。 | 無 | 1024 |
UUID | Hologres 0.9版本新增 | 16字節(jié) | 通用唯一標(biāo)識符,定長128位。 說明 目前還不支持uuid-ossp中實(shí)現(xiàn)的算法。詳情請參見uuid。 | 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)
數(shù)組類型
Hologres當(dāng)前版本僅支持如下一維數(shù)組:
int4[]
int8[]
float4[]
float8[]
boolean[]
text[]
使用示例:
聲明數(shù)組。
CREATE TABLE array_example( int4_array int4[], int8_array int8[], float4_array float4[], float8_array float8[], boolean_array boolean[], text_array text[]);
插入數(shù)組。
使用ARRAY關(guān)鍵字。
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']);
使用
{}
表達(dá)式。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"}');
查詢數(shù)組。
查詢數(shù)組中單個(gè)元素。
SELECT int4_array[3] FROM array_example;
查詢數(shù)組中多個(gè)元素。
SELECT int4_array[1:2] FROM array_example;
MaxCompute與Hologres的數(shù)據(jù)類型映射
創(chuàng)建MaxCompute外部表時(shí),MaxCompute與Hologres的數(shù)據(jù)類型映射如下表所示。
MaxCompute數(shù)據(jù)類型 | Hologres數(shù)據(jù)類型 | 支持映射的版本 | 說明 |
| TEXT | Hologres所有版本 | 無 |
BIGINT | INT8 | Hologres所有版本 | 無 |
INT |
| Hologres所有版本 | 無 |
FLOAT |
| Hologres所有版本 | 無 |
DOUBLE |
| Hologres所有版本 | 無 |
BOOLEAN | BOOL | Hologres所有版本 | 無 |
DATETIME | TIMESTAMP WITH TIME ZONE | Hologres所有版本 | MaxCompute的DATETIME是日期時(shí)間類型,使用東八區(qū)時(shí)間作為系統(tǒng)標(biāo)準(zhǔn)時(shí)間。范圍從0000年1月1日到9999年12月31日,精確到毫秒 。 |
DECIMAL | NUMERIC | Hologres所有版本 | MaxCompute的DECIMAL如果未指定精度,則默認(rèn)為(38,18),使用IMPORT FOREIGN SCHEMA創(chuàng)建表時(shí)系統(tǒng)會自動轉(zhuǎn)換精度。 |
TIMESTAMP | TIMESTAMP WITH TIME ZONE | Hologres 0.8新增 |
|
CHAR(n) | 默認(rèn)為CHAR(n)。 Hologres也支持映射MaxCompute的CHAR(n)為TEXT類型。您需要設(shè)置參數(shù) | Hologres 0.8新增 | MaxCompute的CHAR(n)為固定長度字符類型,n為長度。最大取值為255。長度不足則使用空格填充。 |
VARCHAR(n) | 默認(rèn)為VARCHAR(n)。 Hologres也支持映射MaxCompute的VARCHAR(n)為TEXT類型。您需要設(shè)置參數(shù) | Hologres 0.8新增 | MaxCompute的VARCHAR(n)為變長字符類型,n為長度。取值范圍為1~65535。 |
DATE | DATE | Hologres 0.8新增 | 無 |
SMALLINT | 默認(rèn)為INT2。 Hologres也支持映射MaxCompute的SMALLINT為INT8類型。您需要設(shè)置參數(shù) | Hologres所有版本(0.8版本為 int4, 0.9版本為int2) | 無 |
TINYINT | 默認(rèn)為INT2。 Hologres也支持映射MaxCompute的TINYINT為INT8類型。您需要設(shè)置參數(shù) | Hologres所有版本(0.8版本為 int4, 0.9版本為int2) | 無 |
CHAR | 不支持 | 不支持 | 無 |
ARRAY<INT> | INT4[] | Hologres 0.8新增 | 無 |
ARRAY<BIGINT> | INT8[] | Hologres 0.8新增 | 無 |
ARRAY<FLOAT> | FLOAT4[] | Hologres 0.8新增 | 無 |
ARRAY<DOUBLE> | FLOAT8[] | Hologres 0.8新增 | 無 |
ARRAY<BOOLEAN> | BOOLEAN[] | Hologres 0.8新增 | 無 |
ARRAY<STRING> | TEXT[] | Hologres 0.8新增 | 無 |
BINARY | BYTEA | Hologres 0.9新增 | 無 |
ARRAY<TINYINT> | 不支持 | 不支持 | 無 |
ARRAY<SMALLINT> | 不支持 | 不支持 | 無 |
當(dāng)MaxCompute數(shù)據(jù)表中含有Hologres不支持的類型字段時(shí),如果Hologres不訪問該字段,則可以正常查詢所支持的類型字段。
Blink/Flink與Hologres的數(shù)據(jù)類型映射
Blink/Flink與Hologres的數(shù)據(jù)類型映射如下表所示。
Binlog源表目前只支持部分?jǐn)?shù)據(jù)類型,詳情請參見Flink/Blink實(shí)時(shí)消費(fèi)Hologres Binlog。
Flink數(shù)據(jù)類型 | Hologres數(shù)據(jù)類型 | 支持映射的Hologres版本 | 支持映射的Flink版本 |
INT |
| Hologres所有版本 | 所有版本 |
BIGINT | INT8 | Hologres所有版本 | 所有版本 |
VARCHAR | TEXT | Hologres所有版本 | 所有版本 |
DOUBLE |
| Hologres所有版本 | 所有版本 |
BOOLEAN | BOOL | Hologres所有版本 | 所有版本 |
DECIMAL | NUMERIC 說明 在使用CTAS同步數(shù)據(jù)至Hologres時(shí):
更多詳細(xì)介紹,請參見為什么主鍵為bigint unsigned的MySQL表注冊Flink Cataolg,主鍵會變?yōu)閐ecimal?但是使用CTAS同步到Hologres后,主鍵又變?yōu)閠ext?。 | Hologres所有版本 | 所有版本 |
DATE | DATE | Hologres 0.8新增 | 所有版本 |
TIMESTAMP | TIMESTAMP WITH TIME ZONE | Hologres所有版本 | 所有版本 |
FLOAT |
| Hologres所有版本 | 所有版本 |
TIME | TIME和TIMETZ | Hologres所有版本 說明 Hologres V2.1.24版本起,Fixed Plan加速SQL執(zhí)行支持TIME和TIMETZ類型。 |
|
VARCHAR | JSONB | Hologres 0.10新增 |
|
VARCHAR | JSON | Hologres 0.9新增 |
|
BYTES | RoaringBitmap | Hologres 0.10新增 |
|
VARCHAR | GEOMETRY和GEOGRAPHY | Hologres所有版本 說明 Hologres V2.1版本起,Fixed Plan加速SQL執(zhí)行支持TGEOMETRY和GEOGRAPHY類型的數(shù)據(jù)寫入。 |
|
TINYINT | SMALLINT | Hologres所有版本 |
|
SMALLINT | SMALLINT | Hologres所有版本 |
|
ARRAY<INT> | int4[] | Hologres 0.8新增 |
|
ARRAY<BIGINT> | int8[] | Hologres 0.8新增 |
|
ARRAY<FLOAT> | float4[] | Hologres 0.8新增 |
|
ARRAY<DOUBLE> | float8[] | Hologres 0.8新增 |
|
ARRAY<BOOLEAN> | boolean[] | Hologres 0.8新增 |
|
ARRAY<VARCHAR> | TEXT[] | Hologres 0.8新增 |
|
CHAR | 不支持 | 不支持 | 不支持 |
BINARY | 不支持 | 不支持 | 不支持 |
MySQL與Hologres數(shù)據(jù)類型映射
MySQL與Hologres數(shù)據(jù)類型映射如下表所示,關(guān)于MySQL遷移至Hologres的詳情請參見遷移MySQL至Hologres。
MySQL數(shù)據(jù)類型 | Hologres數(shù)據(jù)類型 |
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的數(shù)據(jù)類型映射
DLF數(shù)據(jù)類型 | Hologres數(shù)據(jù)類型 |
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數(shù)據(jù)類型與Hologres的數(shù)據(jù)類型映射
Hive數(shù)據(jù)類型 | Hologres數(shù)據(jù)類型 |
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數(shù)據(jù)類型與Hologres的數(shù)據(jù)類型映射
Hologres從V1.3版本開始支持。
Hudi數(shù)據(jù)類型 | Hologres數(shù)據(jù)類型 |
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數(shù)據(jù)類型與Hologres的數(shù)據(jù)類型映射
Hologres從V1.3版本開始支持。
Delta Lake數(shù)據(jù)類型 | Hologres數(shù)據(jù)類型 |
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數(shù)據(jù)類型與Hologres數(shù)據(jù)類型映射
Paimon數(shù)據(jù)類型 | Hologres數(shù)據(jù)類型 |
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數(shù)據(jù)類型映射
Iceberg數(shù)據(jù)類型 | Hologres數(shù)據(jù)類型 |
BOOLEAN | BOOLEAN |
INT | INTEGER |
LONG | BIGINT |
FLOAT | REAL |
DOUBLE | DOUBLE PRECISION |
DECIMAL(P,S) | NUMERIC(P,S) |
DATE | DATE |
TIME | TEXT(Spark不支持TIME類型,F(xiàn)link的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 | 不支持 |