-- 创建自增序列号CREATE SEQUENCE dw_dwm_cdt_device_day_detail_id_seq1 INCREMENT BY 1;-- 创建主表,PARTITION BY RANGE为分区字段CREATE TABLE "public"."dw_dwm_cdt_device_day_detail" ("id" int8 NOT NULL DEFAULT nextval('dw_dwm_cdt_device_day_detail_id_seq1'::regclass),"basic_info_id" int8 NOT NULL,"time_zone" int2 NOT NULL,"date" int8 NOT NULL,"type" int2,"group_name" int8,"start_time" int8,"end_time" int8,"duration" int8,"create_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP,"update_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP
)
PARTITION BY RANGE ("date" "pg_catalog"."int8_ops"
)
;-- 创建分区
CREATE TABLE dw_dwm_cdt_device_day_detail_p202404 PARTITION OF dw_dwm_cdt_device_day_detailFOR VALUES FROM ('20240401') TO ('20240501');
CREATE TABLE dw_dwm_cdt_device_day_detail_p202405 PARTITION OF dw_dwm_cdt_device_day_detailFOR VALUES FROM ('20240501') TO ('20240601');
数据在中间节点时候怎么存储:
比如:对于日期为20250201
的数据,它实际上会属于dw_dwm_cdt_device_day_detail_p202502
分区。
这是因为在分区定义中,每个分区都包含一个左闭右开的区间。对于dw_dwm_cdt_device_day_detail_p202501
分区,它的范围是['20250101', '20250201')
,这意味着它包含从20250101
开始到20250201
之前(不包括20250201
)的所有日期。而dw_dwm_cdt_device_day_detail_p202502
分区的范围是['20250201', '20250301')
,它包含从20250201
开始到20250301
之前(不包括20250301
)的所有日期。
因此,20250201
这一天的数据会落在dw_dwm_cdt_device_day_detail_p202502
分区内。