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

数据类型

当前Hologres版本支持的数据类型是PostgreSQL的一个子集。Hologres已支持的数据类型列表如下。
名称 别名 支持的版本 存储大小 说明 取值范围 示例
INTEGER
  • INT
  • INT4
Hologres 0.8及之前版本 4字节 常用的整数 -2147483648~+2147483647 2147483647
BIGINT INT8 Hologres 0.8及之前版本 8字节 大范围整数 -9223372036854775808~+9223372036854775807 9223372036854775807
BOOLEAN BOOL Hologres 0.8及之前版本 1字节 布尔类型
  • True
  • False
True
FLOAT FLOAT4 Hologres 0.8及之前版本 4字节 可变精度,不精确 精度为15位的十进制数字。 123.3333
DOUBLE PRECISION FLOAT8 Hologres 0.8及之前版本 8字节 可变精度,不精确 精度为15位的十进制数字。 123.3333
TEXT VARCHAR Hologres 0.8及之前版本 可变长 可变长度字符串 abcdefg
TIMESTAMP WITH TIME ZONE TIMESTAMPTZ Hologres 0.8及之前版本 8字节 带时区的时间戳。存储精度为毫秒。
说明 标准PostgreSQL使用TIMESTAMPTZ+或者-符号,以及符号后的时区偏移来识别TIMESTAMP WITH TIME ZONE的时区。如果未表明时区偏移,则系统自动给数据添加默认时区。
4713 BC~294276 AD 2004-10-19 10:23:54+02
DECIMAL NUMERIC Hologres 0.8及之前版本 可变长 需要指定PRECISION和SCALE:
  • PRECISION:表示数字的位数,取值范围为0~38。
  • SCALE:表示小数部分的位数,取值范围为0~PRECISION。
可以指定数据到小数点前的38位和小数点后的38位。 DECIMAL(38, 10)
DATE DATE Hologres 0.8版本 4字节 4713 BC ~ 5874897 AD 单位为一天。 2004-10-19
TIMESTAMP TIMESTAMP Hologres 0.8版本 8字节 4713 BC ~ 5874897 AD 不包含时区的时间戳,存储精度为微秒。 2020-01-01 01:01:01.123456
CHAR(n) CHAR(n) Hologres 0.8版本 固定字符长度,最长n个字符。 存储字节不大于1GB。 固定字符长度的字符串。
  • abcd
  • 中国人民
VARCHAR(n) VARCHAR(n) Hologres 0.8版本 可变长,不超过n个字符。 存储字节不大于1GB。 有限字符长度的可变字符串。 abcdefg
SERIAL 自增序列 Hologres 0.8版本 详情请参见 自增序列Serial
TIMESTAMPTZ、DATE和DECIMAL的示例SQL语句如下。
CREATE TABLE test_data_type (
    tswtz_column timestamp WITH TIME ZONE,
    date_column date,
    decimal_column decimal(38, 10)
);

INSERT INTO test_data_type
VALUES ('2004-10-19 08:08:08', '2004-10-19', 123.456);

SELECT * FROM test_data_type;

数组类型

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 0.8及之前版本
BIGINT INT8 Hologres 0.8及之前版本
INT
  • INT4
  • INT
Hologres 0.8及之前版本
FLOAT
  • FLOAT4
  • REAL
Hologres 0.8及之前版本
DOUBLE
  • FLOAT
  • FLOAT8
Hologres 0.8及之前版本
BOOLEAN BOOL Hologres 0.8及之前版本
DATETIME TIMESTAMPTZ Hologres 0.8及之前版本 MaxCompute的DATETIME是日期时间类型,使用东八区时间作为系统标准时间。范围从0000年1月1日到9999年12月31日,精确到毫秒 。
DECIMAL NUMERIC Hologres 0.8及之前版本 MaxCompute的DECIMAL如果未指定精度,则默认为(38,18),使用IMPORT FOREIGN SCHEMA创建表时系统会自动转换精度。
TIMESTAMP TIMESTAMPTZ Hologres 0.8版本
  • MaxCompute的TIMESTAMP取值范围为0000-01-01 00:00:00.000000000~9999-12-31 23.59:59.999999999,精确到纳秒。
  • Hologres支持的TIMESTAMPTZ精确到毫秒。
MaxCompute与Hologres在底层已经进行了精度转换,您无需再关心转换问题。
CHAR(n) 默认为CHAR(n)。

Hologres也支持映射MaxCompute的CHAR(n)为TXET类型。您需要设置参数set hg_enable_convert_type_for_foreign_table = true,并在建表时将字段类型修改为TEXT。

Hologres 0.8版本 MaxCompute的CHAR(n)为固定长度字符类型,n为长度。最大取值为255。长度不足则使用空格填充。
VARCHAR(n) 默认为VARCHAR(n)。

Hologres也支持映射MaxCompute的CHAR(n)为TXET类型。您需要设置参数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 默认为INT4。

Hologres也支持映射MaxCompute的SMALLINT为INT8类型。您需要设置参数set hg_enable_convert_type_for_foreign_table = true,并在建表时将字段类型修改为INT8。

Hologres 0.8及之前版本
TINYINT 默认为INT4。

Hologres也支持映射MaxCompute的SMALLINT为INT8类型。您需要设置参数set hg_enable_convert_type_for_foreign_table = true,并在建表时将字段类型修改为INT8。

Hologres 0.8及之前版本
CHAR 不支持 不支持
INT4[] INT4[] Hologres 0.8及之前版本
INT8[] INT8[] Hologres 0.8及之前版本
FLOAT4[] FLOAT4[] Hologres 0.8及之前版本
FLOAT8[] FLOAT8[] Hologres 0.8及之前版本
BOOLEAN[] BOOLEAN[] Hologres 0.8及之前版本
TEXT[] TEXT[] Hologres 0.8及之前版本
BINARY 不支持 不支持
INT1[] 不支持 不支持
INT2[] 不支持 不支持
说明 当MaxCompute数据表中含有Hologres不支持的类型字段时,如果Hologres不访问该字段,则可以正常查询所支持的类型字段。

批量创建MaxCompute外部表与Hologres的数据类型映射

批量创建MaxCompute外部表时,MaxCompute与Hologres的数据类型映射如下表所示。
MaxCompute数据类型 Hologres数据类型 支持映射的版本
  • STRING
  • VARCHAR
TEXT Hologres 0.8及之前版本
BIGINT INT8 Hologres 0.8及之前版本
INT
  • INT4
  • INT
Hologres 0.8及之前版本
FLOAT
  • FLOAT4
  • REAL
Hologres 0.8及之前版本
DOUBLE
  • FLOAT
  • FLOAT8
Hologres 0.8及之前版本
DATETIME TIMESTAMPTZ Hologres 0.8及之前版本
DECIMAL NUMERIC Hologres 0.8及之前版本
BOOLEAN BOOL Hologres 0.8及之前版本
TIMESTAMP TIMESTAMPTZ Hologres 0.8版本
CHAR(n) CHAR(n) Hologres 0.8版本
VARCHAR(n) VARCHAR(n) Hologres 0.8版本
TINYINT INT4 Hologres 0.8及之前版本
SMALLINT INT4 Hologres 0.8及之前版本
INT4[] INT4[] Hologres 0.8及之前版本
INT8[] INT8[] Hologres 0.8及之前版本
FLOAT4[] FLOAT4[] Hologres 0.8及之前版本
FLOAT8[] FLOAT8[] Hologres 0.8及之前版本
BOOLEAN[] BOOLEAN[] Hologres 0.8及之前版本
TEXT[] TEXT[] Hologres 0.8及之前版本
CHAR 不支持 不支持
BINARY 不支持 不支持
INT1[] 不支持 不支持
INT2[] 不支持 不支持

实时计算与Hologres的数据类型映射

实时计算与Hologres的数据类型映射如下表所示。

实时计算数据类型 Hologres数据类型 支持映射的版本
VARCHAR TEXT Hologres 0.8及之前版本
BIGINT INT8 Hologres 0.8及之前版本
INT
  • INT4
  • INT
Hologres 0.8及之前版本
SMALLINT
  • INT4
  • INT
Hologres 0.8及之前版本
TINYINT
  • INT4
  • INT
Hologres 0.8及之前版本
FLOAT
  • FLOAT4
  • REAL
Hologres 0.8及之前版本
DOUBLE
  • FLOAT
  • FLOAT8
Hologres 0.8及之前版本
BOOLEAN BOOL Hologres 0.8及之前版本
TIMESTAMP TIMESTAMPTZ Hologres 0.8及之前版本
DATE DATE Hologres 0.8及之前版本
DECIMAL NUMERIC Hologres 0.8及之前版本
TIME 不支持 不支持
CHAR 不支持 不支持
BINARY 不支持 不支持