普通表转分区表

转分区的标准:当一张表超过500万或者占用空间超过2G时,并且根据某个字段具备连续的情况下,建议分区

当一张表数据过大时,可以进行垂直拆分(每张表存储部分字段)和水平拆分(每张表字段完整,数据只存储一部分)

这里记录的是水平拆分

首先对数据进行备份

create table 备份表名 as (select * from 原表名);

获取原表建表语句,例:

CREATE TABLE 原表名 (
    uuid varchar(32) NOT NULL, -- uuid
    device_id varchar NULL, -- 设备id
    device_name varchar NULL, -- 设备名称
    cjdbh varchar(64) NULL, -- 采集点编号
    sjrq date NULL, -- 数据日期 YYYY-MM-DD
    create_time timestamp(0) NULL DEFAULT now(), -- 创建时间
    CONSTRAINT pk_mdn_glysyc_result PRIMARY KEY (uuid)
);

备份完成后对原表进行删除(注意,此数据是冷数据,不在使用中,如果生产环境,请先将数据指向备份表中,原表数据完全断开,避免数据丢失)

drop table 原表名;

重新建分区表,注意(分区字段一定要添加为主键)[PARTITION BY LIST (根据哪个字段进行分区)]

CREATE TABLE 原表名(
	uuid varchar(32) NOT NULL, -- uuid
	device_id varchar NULL, -- 设备id
	device_name varchar NULL, -- 设备名称
	cjdbh varchar(64) NULL, -- 采集点编号
	sjrq date NULL, -- 数据日期 YYYY-MM-DD
	create_time timestamp(0) NULL DEFAULT now(), -- 创建时间
	CONSTRAINT pk_mdn_glysyc_result PRIMARY KEY (uuid,sjrq)
)PARTITION BY LIST (sjrq);

恢复数据(恢复数据时一定要将对应的分区表建好)

查询需要创建哪些分区

select distinct(分区字段) from 备份表名;

例:

 创建分区
create table fx_glysyc_result_20220728 partition of mdn_glysyc_result for values in('20220728');
create table fx_glysyc_result_20230201 partition of mdn_glysyc_result for values in('20230201');
恢复数据
insert into mdn_glysyc_result  select * from mdn_glysyc_result_20230518_bak;

以上整个创建分区并恢复数据的过程就完成了,如果在实际使用中,可以一次创建多个分区以免插入数据无对应分区而报错

以下为在存储过程中使用

-- (1)删除分区
    V_SQL := ' DROP TABLE IF EXISTS fx_data_quality_day_'||in_data_date ||'';
    EXECUTE V_SQL;
        
    --  (2)新建分区
    V_SQL := 'create table fx_data_quality_day_'||in_data_date ||' partition of mdn_data_quality_day for values in('''
                  ||in_data_date||''')';
    EXECUTE V_SQL;
    -- (3)设置 unlogged
    V_SQL := 'alter table fx_data_quality_day_'||in_data_date ||'  set unlogged';
    EXECUTE V_SQL;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值