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

数据类型

当前Hologres版本支持的数据类型是PostgreSQL的一个子集。Hologres已支持的数据类型列表如下。

名称 别名 存储大小 取值范围 说明
INTEGER
  • INT
  • INT4
4字节 -2147483648~+2147483647 32位整数类型
BIGINT INT8 8字节 -9223372036854775808~+9223372036854775807 64位整数类型
BOOLEAN BOOL 1字节
  • True
  • False
布尔类型
FLOAT FLOAT8 8字节 精度为15位的十进制数字 单精度浮点数
DOUBLE PRECISION 8字节 精度为15位的十进制数字 双精度浮点数
TEXT VARCHAR 可变长 可变长度字符串
TIMESTAMP WITH TIME ZONE TIMESTAMPTZ 8字节 4713 BC~294276 AD 带时区的时间戳。解析度为14位数/微秒。示例:'2004-10-19 10:23:54+02'

说明 标准PostgreSQL使用TIMESTAMPTZ+或者符号,以及符号后的时区偏移来识别TIMESTAMP WITH TIME ZONE的时区。如果未表明时区偏移,则系统自动给数据添加默认时区。

DECIMAL NUMERIC 可变长 可以指定数据到小数点前的38位和小数点后的38位。 需要指定PRECISION和SCALE:

  • PRECISION:表示数字的位数,取值范围为0~38。
  • SCALE:表示小数部分的位数,取值范围为0~PRECISION。
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与Hologres的数据类型映射如下表所示。

MaxCompute数据类型 Hologres数据类型 是否支持映射
  • STRING
  • VARCHAR
TEXT 支持
BIGINT INT8 支持
INT
  • INT4
  • INT
支持
SMALLINT
  • INT2
  • INT8
说明 执行set hg_enable_convert_type_for_foreign_table = true 定义数据类型为INT8。

不支持
TINYINT 不支持
FLOAT
  • FLOAT4
  • REAL
支持
DOUBLE
  • FLOAT
  • FLOAT8
支持
BOOLEAN BOOL 支持
DATETIME TIMESTAMPTZ 支持
DECIMAL NUMERIC 支持
CHAR 不支持
BINARY 不支持
说明

  • DATETIME使用东八区时间作为系统的标准时间。取值范围为0000年1月1日~9999年12月31日,精确到毫秒。
  • TIMESTAMPTZ包含时区,取值范围为4713BC~294276AD,精确到微秒。
  • 当MaxCompute数据表中含有Hologres不支持的类型字段时,如果Hologres不访问该字段,则可以正常查询所支持的类型字段。

批量创建MaxCompute外部表时,MaxCompute与Hologres的数据类型映射如下表所示。

MaxCompute数据类型 Hologres数据类型 是否支持映射
  • STRING
  • VARCHAR
TEXT 支持
BIGINT INT8 支持
INT
  • INT4
  • INT
支持
SMALLINT INT2 不支持
TINYINT 不支持
FLOAT
  • FLOAT4
  • REAL
支持
DOUBLE
  • FLOAT4
  • FLOAT8
支持
DATETIME TIMESTAMPTZ 支持
DECIMAL NUMERIC 支持
BOOLEAN BOOL 支持
CHAR 不支持
BINARY 不支持

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

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

阿里云2000元代金券免费领,最新优惠1折抢购,2核4G云服务器仅799元/3年,新老用户同享,立即抢购>>>

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