2021-05-14 kk日记,TBASE数据表更换shard key
一、背景
由于前期在进行数据导入时没有特别指定shard key,系统etl工具自动选择,导致当前的shard key不符合系统设计需求,需要重新构建分布键。
二、问题
如何重新构建shard key?
三、思路如下
1、 查阅相关资料及咨询tbase 产品技术支持,当前tbase是不支持在线更换table 的shard key。
2、 更换tbase 的shard key 采用离线方式进行,过程如下:
- 按一定规则生成需要更换shard key的表
select
(select relname||(select description from pg_description where objoid=oid and objsubid=0) as comment from pg_class where oid=a.attrelid) as table_name
from pg_attribute a
where attstattarget=-1 and attrelid in (select oid from pg_class where relname in(select relname from pg_class where relkind ='r' and relname like 'sale%'))
and attname='sale_no'
order by table_name,a.attnum;
- 导出表结构
将上一步生成的表名放在一个txt文本里,然后通过sh 脚步导出结构。
export PGHOME=/work/tbase/user_1/tdata_01/wxj_poc_2/5.02.2/install/tbase_pgxz/export LD_LIBRARY_PATH=$PGHOME/lib:{$LD_LIBRARY_PATH}export PATH=$PGHOME/bin:$PATHfor t in $(cat ./tablename.txt)doecho $tpg_dump -h 192.168.0.1 -p 11379 -U tbase -d dev -s -t $t > /work/backup/$t.sqldone
备注: pg_dump 最后使用tbase自带的, -s 只导出表结构 -t 导出指定的表名
- 替换表结构的关键字
把新的表放在同一个库里不同的schema下,所以采用sed 方式快速更改建表信息。
#替换search path 方便导入
sed -i 's#SET search_path = sale, pg_catalog#SET search_path = public, pg_catalog# ' *.sql#替换shard key
sed -i 's#SHARD (id)#SHARD (sale_no)#' *.sql#替换主键和唯一索引
sed -i 's#PRIMARY KEY (id)#PRIMARY KEY (dealer_no,id)#' *.sql#这里重复,我觉得可以去掉。
sed -i 's#btree (id)#btree (dealer_no,id)#' *.sql
- 创建表
替换完结构,就可以构建了。
export PGHOME=/work/tbase/user_1/tdata_01/wxj_poc_2/5.02.2/install/tbase_pgxz/export LD_LIBRARY_PATH=$PGHOME/lib:{$LD_LIBRARY_PATH}export PATH=$PGHOME/bin:$PATHfor t in $(cat ./tablename.txt)doecho $tpsql -h 192.168.0.1 -p 11379 -U tbase -d dev < /work/backup/$t.sqldone
抽查是否已经按sale_no 分布
select n.nspname,c1.relname,a.attname
from pg_attribute ajoin pgxc_class c on a.attrelid = c.pcrelid and a.attnum = c.pcattnumjoin pg_class c1 on c.pcrelid=c1.oid join pg_namespace n on c1.relnamespace=n.oid
where c1.relname='sale_master' and n.nspname='public' ;
- 导出数据
导出数据
export PGHOME=/work/tbase/user_1/tdata_01/wxj_poc_2/5.02.2/install/tbase_pgxz/export LD_LIBRARY_PATH=$PGHOME/lib:{$LD_LIBRARY_PATH}export PATH=$PGHOME/bin:$PATHfor t in $(cat ./tablename.txt)doecho "begin----"$tpg_dump -h 192.168.0.1 -p 11379 -U cbs_dev -d dev -a -t $t > /work/backup/"$t"_data.sqlecho "finish-----"$tdone
- 导入数据
修改search_pathsed -i 's#SET search_path = sale, pg_catalog#SET search_path = public, pg_catalog# ' sale*data.sqlexport PGHOME=/work/tbase/user_1/tdata_01/wxj_poc_2/5.02.2/install/tbase_pgxz/export LD_LIBRARY_PATH=$PGHOME/lib:{$LD_LIBRARY_PATH}export PATH=$PGHOME/bin:$PATHfor t in $(cat ./tablename.txt)doecho "begin----"$tpsql -h 192.168.0.1 -p 11379 -U tbase -d dev < /work/backup/"$t"_data.sqlecho "finish-----"$tdone
数据导入后,记得要检查是否完整。
- drop table
删除原来的tbale ,同样可以用上面对sql 语句拼凑脚步。
注意这里drop table 如果被视图引用了,是不能drop的。这时要备份好view, 然后drop table XX cascade; 这个设计不太好。
- 更换原表的schema
最后把public下table采用如下命令,改一下schema就可以了。
alter table public.sales set schema sale;
批量生成脚本,自行拼凑就可以了。
- 补上drop掉的视图
四、结尾
到此为止,数据表重新完成shard key 的指定。
2021-05-14 kk日记,TBASE数据表更换shard key相关推荐
- mysql 字段写入_MySQL为数据表的指定字段插入数据
username not null 没有默认值/有默认值 insert不插入username字段 均不报错 2014年07月23日21:05 百科369 MySQL为数据表的指定字段插入数据 ...
- (二)QT5.14.2连接MySQL并使用QtableView显示数据表内容
系列文章目录 第一章:(一)QT5.14.2+MSVC2017(32位/64位)+MySQL连接 第二章:(二)QT5.14.2连接MySQL并使用QtableView显示数据表内容 文章目录 系列文 ...
- 2021最新仿人人车汽车品牌分类数据表文件带图标MYSQL下载
带拼音,关联,首字母,品牌图标,图片文件已经对应好表字段值. 数据表预览: 图标预览: 下载地址:https://download.csdn.net/download/wanmeifengfeng/1 ...
- 项目三,创建和管理数据表
在继续学习之前,先创建一个库,创建表,导入数据,方便后续的继续学习. 复制以下代码直接运行,会得到一个db_shop的库,已经有相关数据了. 推荐在Navicat里创建运行 安装版,附上教程 链接:h ...
- 2021.05.27 发表自己第一篇技术文章
从昨晚开始做家庭财经系统.不要以为有系统两个字就怎么复杂,都是大家都会的.建库.建表. 第一个使用软件是mysql 2021.05.26 数据库 lianxi 已建好. 表 members_basic ...
- ADODB类库操作查询数据表
ADODB类库下载:http://sourceforge.net/projects/adodb/files/adodb-php-4-and-5/adodb-491-for-php/adodb491.z ...
- 如何在数据表中存取图片 - 回复 三足乌 的问题
问题来源: http://www.cnblogs.com/del/archive/2009/05/28/1491186.html#1801853 准备工作: 1.在空白窗体上添加: ClientDat ...
- python数据表元素不为空值_python 填充空值失败_怎么用 Python 做数据分析实例
01 生成数据表 第一部分是生成数据表,常见的生成方法有两种,第一种是导入外部数据,第二种是直接写入数据. Excel 中的文件菜单中提供了获取外部数据的功能,支持数据库和文本文件和页面的多种数据源导 ...
- mysql 用户表结构设计_MySQL数据表结构设计
1表结构 每个表的内容: image image image image image image image image 2表关系 天蓝色代表表中有唯一索引. image 3数据表索引与时间戳 ima ...
- 某电商网站的数据库设计(2)——商品销售相关数据表的设计
某电商网站的数据库设计(2)--商品销售相关数据表的设计 目录 某电商网站的数据库设计(2)--商品销售相关数据表的设计 四.销售信息表 1.非套装商品销售数据表 2.套装商品对应的单品销售数据表 3 ...
最新文章
- nyoj-138-找球号(二)----hash算法之除留余数法+vector
- for(;;)是什么,for(;;)的作用
- [收集]美女与野兽——萨尔和吉安娜的绯闻
- 百度吹过的牛实现了,你的呢?5本书带你搞定AI前沿技术
- redux-observable笔记
- bd3.1 Python 高级
- file_get_contents js没有渲染数据_浏览器渲染页面那些事
- oracle ola_Ola HallengrenSQL Server维护解决方案–索引和统计信息维护
- 基于Java的Selenium学习笔记——启动Chrome
- Access Modify Change 三种时间戳详解
- Easyui datebox单击文本框显示日期选择
- 二年级的女儿用计算机算算术,小学二年级算术练习题(三篇)
- SSM毕设项目车辆维修管理系统m97p7(java+VUE+Mybatis+Maven+Mysql)
- python画成绩正态分布图_R统计学(09): 正态分布 (二)
- yED Editor Getting Start
- 批处理文件rd \s\q **是什么意思?
- MM 固定汇率的使用在MIRO的问题
- 免费英文在线翻译-英文自动翻译
- python 修改excel 路径_python更改已存在excel文件的方法
- 爆款短视频是怎样练成的:视频发布技巧,首次公开