注意
维度构建器在 TimescaleDB 2.13 中引入。
create_hypertable
和 add_dimension
与维度构建器一起使用,用于指定对超表进行分区的分区维度。
TimescaleDB 目前支持两种分区类型:按范围分区和按哈希分区。
提示
对于不兼容的数据类型(例如,jsonb
),可以在维度构建的 partition_func
参数中指定一个函数以提取兼容的数据类型。请参阅下面的示例部分。
可以为范围分区和哈希分区指定自定义分区函数。分区函数应该以 anyelement
作为唯一的参数,并返回一个正的 integer
哈希值。请注意,此哈希值 *不是* 分区标识符,而是插入值的维度键空间中的位置,然后将其划分为各个分区。
如果未指定自定义分区函数,则使用默认的分区函数,该函数调用 PostgreSQL 的内部哈希函数来获取给定类型。因此,自定义分区函数可用于没有本地 PostgreSQL 哈希函数的值类型。
创建一个按范围的维度构建器,可与 create_hypertable
和 add_dimension
一起使用。
名称 | 类型 | 描述 |
---|---|---|
column_name | 名称 | 要分区列的名称。 |
名称 | 类型 | 描述 |
---|---|---|
partition_interval | ANYELEMENT | 对列进行分区的间隔。 |
partition_func | REGPROC | 用于计算值分区的功能。 |
一个维度构建器,它是一种不透明的类型 _timescaledb_internal.dimension_info
,包含维度信息。
partition_interval
应按如下方式指定
如果要分区的列是
TIMESTAMP
、TIMESTAMPTZ
或DATE
,则此长度应指定为INTERVAL
类型或以微秒为单位的整数值。如果列是其他整数类型,则此长度应为一个整数,该整数反映列的底层语义(例如,如果此列是自 UNIX 纪元以来的毫秒数,则
partition_interval
应以毫秒为单位给出)。
下表总结了分区类型和根据列类型确定的默认值的摘要。
列类型 | 分区类型 | 默认值 |
---|---|---|
TIMESTAMP WITHOUT TIMEZONE | INTERVAL/INTEGER | 1 周 |
TIMESTAMP WITH TIMEZONE | INTERVAL/INTEGER | 1 周 |
DATE | INTERVAL/INTEGER | 1 周 |
SMALLINT | SMALLINT | 10000 |
INT | INT | 100000 |
BIGINT | BIGINT | 1000000 |
最简单的用法是对时间列进行分区
SELECT create_hypertable('my_table', by_range('time'));
在这种情况下,可以排除维度构建器,因为 create_hypertable
默认情况下假定单个提供的列是按时间范围进行分区的。
如果您的表中包含非时间列,其中包含时间(例如 JSON 列),则可以添加分区函数来提取时间。
CREATE TABLE my_table (metric_id serial not null,data jsonb,);CREATE FUNCTION get_time(jsonb) RETURNS timestamptz AS $$SELECT ($1->>'time')::timestamptz$$ LANGUAGE sql IMMUTABLE;SELECT create_hypertable('my_table', by_range('data', '1 day', 'get_time'));
名称 | 类型 | 描述 |
---|---|---|
column_name | 名称 | 要分区列的名称。 |
number_partitions | INTEGER | 数量[哈希分区][]用于 partitioning_column 。必须大于 0。 |
名称 | 类型 | 描述 |
---|---|---|
partition_func | REGPROC | 用于计算值分区的功能。 |
一个维度构建器,它是一种不透明的类型 _timescaledb_internal.dimension_info
,包含维度信息。
在这个页面上发现问题了吗?报告问题 或者 在 GitHub 上编辑此页面。