全部產品
Search
文件中心

Hologres:資料類型匯總

更新時間:Sep 19, 2024

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

  • False

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使用TIMESTAMPTZ+或者-符號,以及符號後的時區位移來識別TIMESTAMP WITH TIME ZONE的時區。如果未表明時區位移,則系統自動給資料添加預設時區。

4713 BC~294276 AD

2004-10-19 10:23:54+02

DECIMAL(別名NUMERIC)

Hologres所有版本

可變長

需要指定PRECISION和SCALE:

  • PRECISION:表示數位位元,取值範圍為0~38。

  • SCALE:表示小數部分的位元,取值範圍為0~PRECISION。

可以指定資料到小數點前的38位和小數點後的38位。

DECIMAL(38, 10)

DATE

Hologres 0.8版本新增

4位元組

單位為一天。

4713 BC ~ 5874897 AD

2004-10-19

TIMESTAMP

Hologres 0.8版本新增

8位元組

不包含時區的時間戳記,儲存精度為微秒。

4713 BC ~ 5874897 AD

2020-01-01 01:01:01.123456

CHAR(n)

Hologres 0.8版本新增

固定字元長度,最長n個字元。

儲存位元組不大於1 GB。

固定字元長度的字串。

  • abcd

  • 中國人民

VARCHAR(n)

Hologres 0.8版本新增

可變長,不超過n個字元。

儲存位元組不大於1 GB。

有限字元長度的可變字串。

abcdefg

SERIAL(自增序列)

Hologres 0.8版本新增

詳情請參見 自增序列

SMALLINT

Hologres 0.9版本新增

2位元組

小範圍整數

-32768~+32767

32767

JSON和JSONB

Hologres 0.9版本新增

詳情請參見JSON類型

BYTEA

Hologres 0.9版本新增

可變長,詳情請參見Binary Data Types

可變長的二進位串。

儲存位元組不超過1 GB。

RoaringBitmap

Hologres 0.10版本新增

可變長,詳情請參見RoaringBitmap函數

高效的INT類型數組,支援常量數組位元影像計算。

BIT(n)

Hologres 0.9版本新增

長度為n個bit的二進位串

固定長度的二進位串。

儲存位元組不超過1 GB。

VARBIT(n)

Hologres 0.9版本

可變長,長度不超過n個bit的二進位串

有限bit長度的二進位串

儲存位元組不超過1 GB。

INTERVAL

Hologres 所有版本

16位元組

-178000000 years~178000000 years

interval '1 year'

TIMETZ

Hologres 0.9版本新增

12位元組

一天中的時間(帶時區),解析度為微秒。

00:00:00~24:00:00

12:00:00+08

TIME

Hologres 0.9版本新增

8位元組

一天中的時間(不帶時區),解析度為微秒。

00:00:00~24:00:00

12:00:00

INET

Hologres 0.9版本新增

詳情請參見網路地址類型

INE在一個資料域裡儲存一個IPv4 或IPv6主機地址。

192.168.100.128/25

MONEY

Hologres 0.9版本新增

8位元組,詳情請參見貨幣類型

money類型儲存固定小數精度的貨幣數字。

-92233720368547758.08~+92233720368547758.07

12.34美元

OID

Hologres 0.9版本新增

4位元組

數字形式的物件識別碼。

1024

UUID

Hologres 0.9版本新增

16位元組

通用唯一識別碼,定長128位。

說明

目前還不支援uuid-ossp中實現的演算法。詳情請參見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)

數群組類型

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資料類型

支援映射的版本

說明

  • STRING

  • VARCHAR

TEXT

Hologres所有版本

BIGINT

INT8

Hologres所有版本

INT

  • INT4

  • INT

Hologres所有版本

FLOAT

  • FLOAT4

  • REAL

Hologres所有版本

DOUBLE

  • FLOAT

  • FLOAT8

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 0.8新增

  • MaxCompute的TIMESTAMP取值範圍為0000-01-01 00:00:00.000000000~9999-12-31 23:59:59.999999999,精確到納秒。

  • Hologres支援的TIMESTAMPTZ精確到毫秒。

    Hologres內部已做精度轉換,在讀取過程中會自動處理成毫秒。

CHAR(n)

預設為CHAR(n)。

Hologres也支援映射MaxCompute的CHAR(n)為TEXT類型。您需要設定參數set hg_enable_convert_type_for_foreign_table = true,並在建表時將欄位類型修改為TEXT。

Hologres 0.8新增

MaxCompute的CHAR(n)為固定長度字元類型,n為長度。最大取值為255。長度不足則使用空格填充。

VARCHAR(n)

預設為VARCHAR(n)。

Hologres也支援映射MaxCompute的VARCHAR(n)為TEXT類型。您需要設定參數set hg_enable_convert_type_for_foreign_table = true,並在建表時將欄位類型修改為TEXT。

Hologres 0.8新增

MaxCompute的VARCHAR(n)為變長字元類型,n為長度。取值範圍為1~65535。

DATE

DATE

Hologres 0.8新增

SMALLINT

預設為INT2。

Hologres也支援映射MaxCompute的SMALLINT為INT8類型。您需要設定參數set hg_enable_convert_type_for_foreign_table = true,並在建表時將欄位類型修改為INT8。

Hologres所有版本(0.8版本為 int4, 0.9版本為int2)

TINYINT

預設為INT2。

Hologres也支援映射MaxCompute的TINYINT為INT8類型。您需要設定參數set hg_enable_convert_type_for_foreign_table = true,並在建表時將欄位類型修改為INT8。

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>

不支援

不支援

說明

當MaxCompute資料表中含有Hologres不支援的類型欄位時,如果Hologres不訪問該欄位,則可以正常查詢所支援的類型欄位。

Blink/Flink與Hologres的資料類型映射

Blink/Flink與Hologres的資料類型映射如下表所示。

說明

Binlog源表目前只支援部分資料類型,詳情請參見Flink/Blink即時消費Hologres Binlog

Flink資料類型

Hologres資料類型

支援映射的Hologres版本

支援映射的Flink版本

INT

  • INT4

  • INT

Hologres所有版本

所有版本

BIGINT

INT8

Hologres所有版本

所有版本

VARCHAR

TEXT

Hologres所有版本

所有版本

DOUBLE

  • FLOAT

  • FLOAT8

  • DOUBLE PRECISION

Hologres所有版本

所有版本

BOOLEAN

BOOL

Hologres所有版本

所有版本

DECIMAL

NUMERIC

說明

在使用CTAS同步資料至Hologres時:

  • DECIMAL類型的主鍵將被映射為TEXT類型。

  • DECIMAL類型不是主鍵,將被映射為DECIMAL類型。

更多詳細介紹,請參見為什麼主鍵為bigint unsigned的MySQL表註冊Flink Cataolg,主鍵會變為decimal?但是使用CTAS同步到Hologres後,主鍵又變為text?

Hologres所有版本

所有版本

DATE

DATE

Hologres 0.8新增

所有版本

TIMESTAMP

TIMESTAMP WITH TIME ZONE

Hologres所有版本

所有版本

FLOAT

  • FLOAT4

  • REAL

Hologres所有版本

所有版本

TIME

TIME和TIMETZ

Hologres所有版本

說明

Hologres V2.1.24版本起,Fixed Plan加速SQL執行支援TIME和TIMETZ類型。

  • 結果表:Flink引擎VVR-4.0.13-Flink-1.13版本開始支援,RPC模式暫不支援。

    說明

    由於Fixed Plan暫不支援TIME類型,暫不推薦使用該類型,詳情請參見Fixed Plan加速SQL執行

  • 源表:Flink引擎VVR-6.0.3-Flink-1.15版本開始支援,RPC模式暫不支援。

  • 維表:Flink引擎VVR-4.0.13-Flink-1.13版本開始支援,RPC模式暫不支援。

VARCHAR

JSONB

Hologres 0.10新增

  • 結果表:Flink引擎VVR-4.0.12-Flink-1.13版本開始支援,RPC模式暫不支援。

  • 源表:Flink引擎VVR-6.0.3-Flink-1.15版本開始支援,RPC模式暫不支援。

  • 維表:Flink引擎VVR-4.0.12-Flink-1.13版本開始支援,RPC模式暫不支援。

VARCHAR

JSON

Hologres 0.9新增

  • 結果表:Flink引擎VVR-4.0.12-Flink-1.13版本開始支援,RPC模式暫不支援。

  • 源表:Flink引擎VVR-6.0.3-Flink-1.15版本開始支援,RPC模式暫不支援。

  • 維表:Flink引擎VVR-4.0.12-Flink-1.13版本開始支援,RPC模式暫不支援。

BYTES

RoaringBitmap

Hologres 0.10新增

  • 結果表:Flink引擎VVR-4.0.12-Flink-1.13版本開始支援,RPC模式暫不支援。

  • 源表:Flink引擎VVR-6.0.3-Flink-1.15版本開始支援,RPC模式暫不支援。

  • 維表:Flink引擎VVR-4.0.12-Flink-1.13版本開始支援,RPC模式暫不支援。

VARCHAR

GEOMETRY和GEOGRAPHY

Hologres所有版本

說明

Hologres V2.1版本起,Fixed Plan加速SQL執行支援TGEOMETRY和GEOGRAPHY類型的資料寫入。

  • 結果表:Flink引擎VVR-4.0.13-Flink-1.13版本開始支援,RPC模式暫不支援。

  • 源表:暫不支援。

  • 維表:暫不支援。

TINYINT

SMALLINT

Hologres所有版本

  • 結果表:Flink引擎VVR-4.0.13-Flink-1.13版本開始支援,RPC模式暫不支援。

  • 源表:Flink引擎VVR-6.0.3-Flink-1.15版本開始支援,RPC模式暫不支援。

  • 維表:Flink引擎VVR-4.0.13-Flink-1.13版本開始支援,RPC模式暫不支援。

SMALLINT

SMALLINT

Hologres所有版本

  • 結果表:所有版本支援。

  • 源表:Flink引擎VVR-6.0.3-Flink-1.15版本開始支援,RPC模式暫不支援。

  • 維表:所有版本支援。

ARRAY<INT>

int4[]

Hologres 0.8新增

  • 結果表:所有版本支援。

  • 源表:Flink引擎VVR-6.0.3-Flink-1.15版本開始支援,RPC模式暫不支援。

  • 維表:所有版本支援。

ARRAY<BIGINT>

int8[]

Hologres 0.8新增

  • 結果表:所有版本支援。

  • 源表:Flink引擎VVR-6.0.3-Flink-1.15版本開始支援,RPC模式暫不支援。

  • 維表:所有版本支援。

ARRAY<FLOAT>

float4[]

Hologres 0.8新增

  • 結果表:所有版本支援。

  • 源表:Flink引擎VVR-6.0.3-Flink-1.15版本開始支援,RPC模式暫不支援。

  • 維表:所有版本支援。

ARRAY<DOUBLE>

float8[]

Hologres 0.8新增

  • 結果表:所有版本支援。

  • 源表:Flink引擎VVR-6.0.3-Flink-1.15版本開始支援,RPC模式暫不支援。

  • 維表:所有版本支援。

ARRAY<BOOLEAN>

boolean[]

Hologres 0.8新增

  • 結果表:所有版本支援。

  • 源表:Flink引擎VVR-6.0.3-Flink-1.15版本開始支援,RPC模式暫不支援。

  • 維表:所有版本支援。

ARRAY<VARCHAR>

TEXT[]

Hologres 0.8新增

  • 結果表:所有版本支援。

  • 源表:Flink引擎VVR-6.0.3-Flink-1.15版本開始支援,RPC模式暫不支援。

  • 維表:所有版本支援。

CHAR

不支援

不支援

不支援

BINARY

不支援

不支援

不支援

MySQL與Hologres資料類型映射

MySQL與Hologres資料類型映射如下表所示,關於MySQL遷移至Hologres的詳情請參見遷移MySQL至Hologres

MySQL資料類型

Hologres資料類型

BIGINT

BIGINT

BINARY(n)

BYTEA

BIT

BOOLEAN

  • CHAR(n)

  • CHARACTER(n)

  • CHAR(n)

  • CHARACTER(n)

DATE

DATE

DATETIME

TIMESTAMP [WITHOUT TIME ZONE]

  • DECIMAL(p,s)

  • DEC(p,s)

  • DECIMAL(p,s)

  • DEC(p,s)

DOUBLE

DOUBLE PRECISION

FLOAT

REAL

  • INT

  • INTEGER

  • INT

  • INTEGER

MEDIUMINT

INTEGER

NUMERIC(p,s)

NUMERIC(p,s)

SMALLINT

SMALLINT

  • TINYBLOB

  • BLOB

  • MEDIUMBLOB

  • LONGBLOB

BYTEA

TINYINT

SMALLINT

  • TINYTEXT

  • TEXT

  • MEDIUMTEXT

  • LONGTEXT

TEXT

TIME

TIME [WITHOUT TIME ZONE]

TIMESTAMP

TIMESTAMP [WITH TIME ZONE]

  • VARBINARY(n)

  • VARBINARY(max)

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>

支援的類型如下:

  • INT

  • BIGINT

  • FLOAT

  • BOOLEAN

  • DOUBLE

  • STRING

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>

支援的類型如下:

  • INT

  • BIGINT

  • FLOAT

  • BOOLEAN

  • DOUBLE PRECISION

  • STRING

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>

支援類型如下:

  • INT

  • BIGINT

  • FLOAT

  • BOOLEAN

  • DOUBLE PRECISION

  • STRING

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>

支援類型如下:

  • INT

  • BIGINT

  • FLOAT

  • BOOLEAN

  • DOUBLE PRECISION

  • STRING

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>

支援類型如下:

  • INT

  • BIGINT

  • FLOAT

  • BOOLEAN

  • DOUBLE PRECISION

  • STRING

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>

支援類型如下:

  • INT

  • BIGINT

  • FLOAT

  • BOOLEAN

  • DOUBLE PRECISION

  • STRING

STRUCT

不支援

MAP

不支援