Hologres的数据类型与PostgreSQL的数据类型兼容。本文为您介绍Hologres支持的数据类型及数组类型。

数据类型

当前Hologres版本支持的数据类型是PostgreSQL的一个子集。Hologres已支持的数据类型列表如下。
名称支持的版本存储大小说明取值范围示例
INTEGER(别名INT或INT4)Hologres所有版本4字节常用的整数-2147483648~+21474836472147483647
BIGINT(别名INT8)Hologres所有版本8字节大范围整数-9223372036854775808~+92233720368547758079223372036854775807
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
TEXTHologres所有版本可变长可变长度字符串。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 AD2004-10-19 10:23:54+02
DECIMAL(别名NUMERIC)Hologres所有版本可变长需要指定PRECISION和SCALE:
  • PRECISION:表示数字的位数,取值范围为0~38。
  • SCALE:表示小数部分的位数,取值范围为0~PRECISION。
可以指定数据到小数点前的38位和小数点后的38位。DECIMAL(38, 10)
DATEHologres 0.8版本新增4字节单位为一天。4713 BC ~ 5874897 AD2004-10-19
TIMESTAMPHologres 0.8版本新增8字节不包含时区的时间戳,存储精度为微秒。4713 BC ~ 5874897 AD2020-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版本新增详情请参见 自增序列Serial(Beta)
SMALLINTHologres 0.9版本新增2字节小范围整数-32768~+3276732767
JSON和JSONBHologres 0.9版本新增详情请参见JSON和JSONB类型
BYTEAHologres 0.9版本新增可变长,详情请参见Binary Data Types可变长的二进制串。存储字节不超过1 GB。
RoaringBitmapHologres 0.10版本新增可变长,详情请参见Roaring Bitmap函数高效的INT类型数组,支持常量数组位图计算。
BIT(n)Hologres 0.9版本新增长度为n个bit的二进制串固定长度的二进制串。存储字节不超过1 GB。
VARBIT(n)Hologres 0.9版本可变长,长度不超过n个bit的二进制串有限bit长度的二进制串存储字节不超过1 GB。
INTERVALHologres 所有版本16字节-178000000 years~178000000 yearsinterval '1 year'
TIMETZHologres 0.9版本新增12字节一天中的时间(带时区),解析度为微秒。00:00:00~24:00:0012:00:00+08
TIMEHologres 0.9版本新增8字节一天中的时间(不带时区),解析度为微秒。00:00:00~24:00:0012:00:00
INETHologres 0.9版本新增详情请参见网络地址类型INE在一个数据域里保存一个IPv4 或IPv6主机地址。192.168.100.128/25
MONEYHologres 0.9版本新增8字节,详情请参见货币类型money类型存储固定小数精度的货币数字。-92233720368547758.08~+92233720368547758.0712.34美元
OIDHologres 0.9版本新增4字节数字形式的对象标识符。1024
UUIDHologres 0.9版本新增16字节通用唯一标识符,定长128位。
说明 目前还不支持uuid-ossp中实现的算法。详情请参见uuid
00000000-0000-0000-0000-000000000000~ffffffff-ffff-ffff-ffff-ffffffffffffa0eebc99-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
TEXTHologres所有版本
BIGINTINT8Hologres所有版本
INT
  • INT4
  • INT
Hologres所有版本
FLOAT
  • FLOAT4
  • REAL
Hologres所有版本
DOUBLE
  • FLOAT
  • FLOAT8
Hologres所有版本
BOOLEANBOOLHologres所有版本
DATETIMETIMESTAMP WITH TIME ZONEHologres所有版本MaxCompute的DATETIME是日期时间类型,使用东八区时间作为系统标准时间。范围从0000年1月1日到9999年12月31日,精确到毫秒 。
DECIMALNUMERICHologres所有版本MaxCompute的DECIMAL如果未指定精度,则默认为(38,18),使用IMPORT FOREIGN SCHEMA创建表时系统会自动转换精度。
TIMESTAMPTIMESTAMP WITH TIME ZONEHologres 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。
DATEDATEHologres 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新增
BINARYBYTEAHologres 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所有版本所有版本
BIGINTINT8Hologres所有版本所有版本
VARCHARTEXTHologres所有版本所有版本
DOUBLE
  • FLOAT
  • FLOAT8
  • DOUBLE PRECISION
Hologres所有版本所有版本
BOOLEANBOOLHologres所有版本所有版本
DECIMALNUMERICHologres所有版本所有版本
DATEDATEHologres 0.8新增所有版本
TIMESTAMPTIMESTAMP WITH TIME ZONEHologres所有版本所有版本
FLOAT
  • FLOAT4
  • REAL
Hologres所有版本所有版本
TIMETIMEHologres所有版本
  • 结果表: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模式暂不支持。
VARCHARJSONBHologres 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模式暂不支持。
VARCHARJSONHologres 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模式暂不支持。
BYTESRoaringBitmapHologres 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模式暂不支持。
TINYINTSMALLINTHologres所有版本
  • 结果表: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模式暂不支持。
SMALLINTSMALLINTHologres所有版本
  • 结果表:所有版本支持。
  • 源表: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数据类型
BIGINTBIGINT
BINARY(n)BYTEA
BITBOOLEAN
  • CHAR(n)
  • CHARACTER(n)
  • CHAR(n)
  • CHARACTER(n)
DATEDATE
DATETIMETIMESTAMP [WITHOUT TIME ZONE]
  • DECIMAL(p,s)
  • DEC(p,s)
  • DECIMAL(p,s)
  • DEC(p,s)
DOUBLEDOUBLE PRECISION
FLOATREAL
  • INT
  • INTEGER
  • INT
  • INTEGER
MEDIUMINTINTEGER
NUMERIC(p,s)NUMERIC(p,s)
SMALLINTSMALLINT
  • TINYBLOB
  • BLOB
  • MEDIUMBLOB
  • LONGBLOB
BYTEA
TINYINTSMALLINT
  • TINYTEXT
  • TEXT
  • MEDIUMTEXT
  • LONGTEXT
TEXT
TIMETIME [WITHOUT TIME ZONE]
TIMESTAMPTIMESTAMP [WITH TIME ZONE]
  • VARBINARY(n)
  • VARBINARY(max)
BYTEA
VARCHAR(n)VARCHAR(n)
VARCHAR(max)TEXT

DLF与Hologres的数据类型映射

DLF数据类型Hologres数据类型
TINYINTSMALLINT
SMALLINTSMALLINT
INTINT
BIGINTBIGINT
BOOLEANBOOLEAN
FLOATREAL
DOUBLEDOUBLE PRECISION
DATEDATE
TIMESTAMPTIMESTAMP WITHOUT TIME ZONE
STRINGTEXT
BINARYBYTEA
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数据类型
TINYINTSMALLINT
SMALLINTSMALLINT
INTINT
BIGINTBIGINT
FLOATREAL
DOUBLEDOUBLE PRECISION
DECIMALNUMERIC
NUMERICNUMERIC
DATEDATE
TIMESTAMPTIMESTAMP WITHOUT TIME ZONE
STRINGTEXT
VARCHARVARCHAR
CHARCHAR
BINARYBYTEA
BOOLBOOLEAN
ARRAY<type>ARRAY<hologres_data_type>
支持的类型如下:
  • INT
  • BIGINT
  • FLOAT
  • BOOLEAN
  • DOUBLE PRECISION
  • STRING

Hudi数据类型与Hologres的数据类型映射

Hologres从V1.3版本开始支持。

Hudi数据类型Hologres数据类型
IntegerTypeINT
LongTypeBIGINT
FloatTypeREAL
DoubleTypeDOUBLE PRECISION
DecimalTypeNUMERIC
TimestampTypeTIMESTAMP WITHOUT TIME ZONE
DateTypeDATE
YearMonthIntervalType不支持
DayTimeIntervalType不支持
StringTypeTEXT
VarcharType不支持
CharType不支持
BooleanTypeBOOL
BinaryTypeBYTEA
ByteType不支持
ShortType不支持
ArrayType(elementType, containsNull)ARRAY<hologres_data_type>
支持类型如下:
  • INT
  • BIGINT
  • FLOAT
  • BOOLEAN
  • DOUBLE PRECISION
  • STRING

Delta数据类型与Hologres的数据类型映射

Hologres从V1.3版本开始支持。

Delta Lake数据类型Hologres数据类型
TINYINTSMALLINT
SMALLINTSMALLINT
INTINT
BIGINTBIGINT
FLOATREAL
DOUBLEDOUBLE PRECISION
DECIMAL(p,s)NUMERIC
TIMESTAMPTIMESTAMP WITHOUT TIME ZONE
DATEDATE
INTERVAL intervalQualifier不支持
STRINGTEXT
BOOLEANBOOLEAN
BINARYBYTEA
ARRAY<elementType>ARRAY<hologres_data_type>
支持类型如下:
  • INT
  • BIGINT
  • FLOAT
  • BOOLEAN
  • DOUBLE PRECISION
  • STRING