交互式分析(Interactive Analytics) 数据类型与 PostgreSQL 数据类型兼容,但支持的数据类型是 PostgreSQL 的一个子集。

数据类型

交互式分析当前版本支持的数据类型如下表:

数据类型 别名 是否支持 存储大小 范围 说明
integer int, int4 支持 4 字节 -2147483648 到 +2147483647 常用的整数
BIGINT int8 支持 8 字节 -9223372036854775808 到 +9223372036854775807 大范围整数
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 时间戳,包含时区,解析度为1微秒/14位数。示例:'2004-10-19 10:23:54+02'
date date 支持 4 字节 4713 BC 到 5874897 AD 单位是一天
decimal numeric 支持 可变长 小数点前 38 位;小数点后 38 位 需要指定precision,scale信息

对于timestamp with time zone类型,SQL标准通过判断timestamptz类型数据的“+”或者“-”符号以及符号后面的时区偏移来识别时区,如果未表明时区偏移,将会有一个默认时区添加到数据上。

说明 交互式分析当前版本支持的decimal和PostgreSQL的不同之处如下:
  • 交互式分析支持precision的范围从公0到38,scale范围支持从0到precision。
  • 交互式分析的decimal需要明确指定precision和scale信息,不能使用省略的方式。
关于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;

数组类型

交互式分析当前版本只支持一维数组,且仅支持如下数组类型:
  • 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;