一、背景介绍
华为对象存储OBS(Object Storage Service)是一种高可用、高可靠、高性能的云存储服务,能够为企业和个人用户提供强大的数据存储和管理功能。在日常DWS集群使用过程中,会出现集群空间不足的情况,除了扩容以外,如果使用了华为云上的OBS存储服务,可以将一些历史表备份至OBS,然后在数仓创建外表直接访问obs上的备份,这样就可以删除存在DWS上的历史表,释放空间,提高有效存储空间的利用率。
二 、操作过程
1.OBS创建桶和对象
登陆obs控制页面(https://********.com)创建桶和对像如下图所示:找到对象存储服务
点击创建桶(dws811-bkup)已创建,如下图所示:
点击已经创建的桶,进行对象创建(T_CENTER)以创建,如下图所示:
点击T_CENTER进入下一级目录:创建需要备份的表目录如下图所示:
2.将表备份至OBS
(1)通过gds方式备份至OBS
可通过gds将表导出,再点击上传对象,上传到OBS对应目录,gds使用前面文章已经介绍过,感兴趣的小伙伴可进入主页查找。
(2)通过cdm将表备份至OBS
云数据迁移(Cloud Data Migration,简称CDM),是提供同构/异构数据源之间批量数据迁移服务,帮助客户实现数据自由流动。在此简单介绍一下将DWS数据通过CDM备份至OBS的方法:
点击数据湖治理中心DGC,点击数据集成:
点击作业管理:
创建组:
新建作业,配置如下:源端选择为需要同步的表,目标端选择前面创建的桶及目录,注意字段分隔符需要设置,这里建议统一为#@#,方便后面创建外表:
点击下一步,保存运行:
页面可查任务信息:
成功后,返回obs可看见生成相应csv文件:
3.dws创建可访问obs数据的外表
(1)创建obs_server
create server obs_server foreign data wrapper dfs_fdw options (address '172.X.X.X:443',access_key 'XDXXXXX',secret_access_key 'FjUPEliFzAYnXXXXXX', encrypt 'on',type 'obs');--注意:ACCESS_KEY,SECRET_ACCESS_KEY 是在“我的凭证”—“访问密钥”中下载。首次申请密钥后会提示下载,address为obs对应地址和端口。
(2)创建可访问外表
进入相应schema: set current_schema=schema_name;
创建可访问obs外表:
CREATE FOREIGN TABLE obs_table_name(like table_name) SERVER obs_server OPTIONS(FORMAT 'CSV',foldername '/dws811-bkup/T_CENTER/table_name/',ENCODING 'utf8',DELIMITER'#@#') DISTRIBUTE BY ROUNDROBIN;
注意:分隔符要和cdm设置的一致!!!
如下图所示,创建成功:
附录:批量创建可访问obs外表命令:
SELECT 'CREATE FOREIGN TABLE obs_'||tbs.tablename||'(like '||tbs.tablename||') SERVER obs_server OPTIONS(FORMAT ''CSV'',foldername ''/dws811-bkup/T_CENTER/'||tbs.tablename||'/'||''',ENCODING ''utf8'',DELIMITER''##AAA##'') DISTRIBUTE BY ROUNDROBIN;'from pg_tables tbs where tablename not like 'pg_%' and tablename not like '%_err' and tbs.schemaname = 'nettoll_history' and tablename=' ';