GaussDB(DWS) 之数据迁移【这次高斯不是数学家】
1、介绍
数据仓库服务GaussDB(DWS) 是一种基于华为云基础架构和平台的在线数据处理数据库,提供即开即用、可扩展且完全托管的分析型数据库服务。GaussDB(DWS)是基于华为融合数据仓库GaussDB产品的云原生服务 ,兼容标准ANSI SQL 99和SQL 2003,同时兼容PostgreSQL/Oracle数据库生态,为各行业PB级海量大数据分析提供有竞争力的解决方案。
GaussDB(DWS) 可广泛应用于金融、车联网、政企、电商、能源、电信等多个领域,已连续两年入选Gartner发布的数据管理解决方案魔力象限,相比传统数据仓库,性价比提升数倍,具备大规模扩展能力和企业级可靠性。
2、产品优势
GaussDB(DWS) 数据库内核使用华为自主研发的GaussDB数据库,兼容PostgreSQL 9.2.4的数据库内核引擎,从单机OLTP数据库改造为企业级MPP(大规模并行处理)架构的OLAP分布式数据库,其主要面向海量数据分析场景。
GaussDB(DWS) 与传统数据仓库相比,主要有以下特点与显著优势,可解决多行业超大规模数据处理与通用平台管理问题:
2.1、易使用
- 一站式可视化便捷管理
GaussDB(DWS) 让您能够轻松完成从项目概念到生产部署的整个过程。通过使用GaussDB(DWS) 管理控制台,您不需要安装数据仓库软件,也不需要部署数据仓库服务器,就可以在几分钟之内获得高性能、高可靠的企业级数据仓库集群。
您只需点击几下鼠标,就可以轻松完成应用程序与数据仓库的连接、数据备份、数据恢复、数据仓库资源和性能监控等运维管理工作。
- 与大数据无缝集成
您可以使用标准SQL查询HDFS、对象存储服务(Object Storage Service,OBS)上的数据,数据无需搬迁。
- 提供一键式异构数据库迁移工具
GaussDB(DWS) 提供配套的迁移工具,可支持MySQL、Oracle和Teradata的SQL脚本迁移到GaussDB(DWS) 。
2.2、高性能
- 云化分布式架构
GaussDB(DWS) 采用全并行的MPP架构数据库,业务数据被分散存储在多个节点上,数据分析任务被推送到数据所在位置就近执行,并行地完成大规模的数据处理工作,实现对数据处理的快速响应。
- 查询高性能,万亿数据秒级响应
GaussDB(DWS) 后台还通过算子多线程并行执行、向量化计算引擎实现指令在寄存器并行执行,以及LLVM动态编译减少查询时冗余的条件逻辑判断,助力数据查询性能提升。
GaussDB(DWS)支持行列混合存储,可以同时为用户提供更优的数据压缩比(列存)、更好的索引性能(列存)、更好的点更新和点查询(行存)性能。
- 数据加载快
GaussDB(DWS)提供了GDS极速并行大规模数据加载工具。
2.3、易扩展
- 按需扩展:Shared-Nothing开放架构,可随时根据业务情况增加节点,扩展系统的数据存储能力和查询分析性能。
- 扩容后性能线性提升:容量和性能随集群规模线性提升,线性比8。
- 扩容不中断业务:扩容过程中支持数据增、删、改、查,及DDL操作(Drop/Truncate/Alter table),表级别在线扩容技术,扩容期间业务不中断、无感知。
2.4、高可靠
- ACID
支持分布式事务ACID(Atomicity,Consistency,Isolation,Durability),数据强一致保证。
- 全方位HA设计
GaussDB(DWS) 所有的软件进程均有主备保证,集群的协调节点(CN)、数据节点(DN)等逻辑组件全部有主备保证,能够保证在任意单点物理故障的情况下系统依然能够保证数据可靠、一致,同时还能对外提供服务。
- 安全
GaussDB(DWS) 支持数据透明加密,同时可与数据库安全服务(DBSS)对接,基于网络隔离及安全组规则,保护系统和用户隐私及数据安全。GaussDB(DWS)还支持自动数据全量、增量备份,提升数据可靠性。
2.5、低成本
- 按需付费:GaussDB(DWS) 按实际使用量和使用时长计费。您需要支付的费率很低,只需为实际消耗的资源付费。
- 门槛低:您无需前期投入较多固定成本,可以从低规格的数据仓库实例起步,以后随时根据业务情况弹性伸缩所需资源,按需开支。
3、数据迁移
3.1、迁移介绍
GaussDB(DWS)提供了灵活的数据入库方式,可以将多种数据源的数据导入到GaussDB(DWS)中。各导入方式具有不同的特点,用户可以根据其特点自行选择。建议用户配合数据复制服务(Data Replication Service,简称DRS)、云数据迁移(Cloud Data Migration,简称CDM)和数据湖工厂(Data Lake Factory,简称DLF)一起使用,DRS用于数据实时同步,CDM用于批量数据迁移,DLF可以对整个ETL过程进行编排调度,同时提供可视化的开发环境。
数据迁移示意图
数据迁移方式说明 |
|||
数据导入方式 |
支持的数据源/数据库 |
说明 |
优势 |
TEXT/CSV/ORC及CARBONDATA数据文件格式 |
支持将存储在OBS上的TEXT、CSV、ORC及CARBONDATA格式的数据并行导入到GaussDB(DWS),支持导入后查询数据,也支持远程读OBS上的数据。 GaussDB(DWS)优先推荐的导入方式。 |
并行拉取方式,性能好,横向扩展。 |
|
CSV/TEXT数据文件格式 |
使用GaussDB(DWS)提供的GDS工具,利用多DN并行的方式,将数据从远端服务器导入到GaussDB(DWS)。这种方式导入效率高,适用于大批量数据入库。 |
||
· Hive · Spark |
配置一个GaussDB(DWS)集群连接到一个MRS集群,然后将数据从MRS的HDFS中读取到GaussDB(DWS)。 |
并行拉取方式,性能好,横向扩展。 |
|
· MySQL · DDM · PostgreSQL(公测) · Oracle(公测) · GaussDB(for openGauss)分布式版(公测) |
通过DRS实时同步功能,将数据从一个数据源拷贝到GaussDB(DWS)数据仓库,实现关键业务的数据实时流动。主要聚焦于表和数据的同步导入。 |
数据源丰富,操作简单。 |
|
· MySQL · PostgreSQL · Microsoft SQL Server · Oracle · IBM Db2 · SAP HANA · DWS · Hive |
CDM提供同构/异构数据源之间批量数据迁移的功能,帮助您实现从多种类型的数据源迁移数据到GaussDB(DWS)。CDM在迁移数据到GaussDB(DWS)时,采用的是Copy方式和GDS并行导入方式。 |
数据源丰富,操作简单。 |
|
第三方ETL工具 |
数据库、NoSQL、文件系统、大数据平台 |
请参考第三方ETL工具的相关文档。 GaussDB(DWS)提供了DSC工具,可以将Teradata/Oracle脚本迁移到GaussDB(DWS)。 |
通过OBS中转,数据源丰富,数据转换能力强。 |
- |
支持两个GaussDB(DWS)集群之间的数据互访互通。通过Foreign Table方式实现跨DWS集群的数据访问和导入。 |
适用于多套DWS集群之间的数据同步。 |
|
其他文件或数据库 |
使用Java语言开发应用程序时,通过调用JDBC驱动的CopyManager接口,从文件或其他数据库向GaussDB(DWS)写入数据。 |
从其他数据库直接写入GaussDB(DWS)的方式,具有业务数据无需落地成文件的优势。 |
|
本地文件 |
与直接使用SQL语句COPY不同,该命令读取/写入的文件只能是gsql客户端所在机器上的本地文件。 |
操作简单,适用于小批量数据入库。 |
|
sql/tmp/tar文件格式 |
在数据库迁移场景下,支持使用gs_restore工具将事先使用gs_dump工具导出的文件格式,重新导入GaussDB(DWS)集群,实现表定义、数据库对象定义等元数据的导入。导入数据主要包括以下内容: · 所有数据库对象定义。 · 单个数据库对象定义。 · 单个shema定义。 · 单张表定义。 |
适用于元数据迁移。 |
3.2、导入数据
场景:从GaussDB(DWS)集群导入数据到新集群。
3.2.1、功能描述
通过在集群中创建Foreign Table的方式,实现在多个集群之间的关联查询和用来导入数据。
3.2.2、使用场景
- 将数据从一个GaussDB(DWS)集群导入到另外一个GaussDB(DWS)集群中。
- 多个集群之间的关联查询。
3.2.3、注意事项
- 两个集群必须在同一个Region、一个AZ内且VPC网络互通。
- 创建的外表与其对应的远端表的列名和类型名要完全一致,且远端表的类型为行存表、列存表、哈希表或者复制表。
- 如果关联的表在另外一个集群是复制表或者存在数据倾斜,性能可能会很差。
- 使用期间,两个集群的状态应为“Normal”。
- 使用期间,禁止对远端集群的源数据表做ddl修改和增、删、改操作,否则可能导致查询结果不一致。
- 两个集群都需要具备基于Foreign Table的SQL on other GaussDB数据处理功能。
- 建议配置LVS,如未配置,推荐使用多个CN作为server的地址,禁止将多个集群的CN地址写在一起。
- 请尽可能保证两端数据库的编码相同,否则可能出现报错或者收到的数据为乱码。
- 如果远端表已经做过统计信息收集,可以对外表执行analyze以获得更优的执行计划。
- 仅支持0.0及以上版本。
3.2.4、操作步骤
创建server。
CREATE SERVER server_remote FOREIGN DATA WRAPPER GC_FDW OPTIONS
(address '10.180.157.231:8000,10.180.157.130:8000' ,
dbname 'gaussdb',
username 'xyz',
password 'xxxxxx'
);
- server_remote为server名字,供外表使用。
- address为远端集群CN的地址和端口号,如配置LVS,推荐只填写一个LVS地址,如未配置,推荐使用多个CN作为server的地址。
- dbname为远端集群的数据库名。
- username为连接远端集群使用的用户名,注意该用户不能为系统管理员。
- password为连接远端集群使用的用户名的密码。
创建外表。
CREATE FOREIGN TABLE region
(
R_REGIONKEY INT4,
R_NAME TEXT,
R_COMMENT TEXT
)
SERVER
server_remote
OPTIONS
(
schema_name 'test',
table_name 'region',
encoding 'gbk'
);
- 外表的列不允许带任何约束。
- 外表的列名和列的类型要与远端集群对应的表的列名和列的类型完全一致。
- schema_name为远端集群对应的表所在的schema,如果该option省略,则schema_name预设该外表所在的schema。
- table_name为远端集群对应的表所在的表名,如果该option省略,则table_name预设该外表的表名。
- encoding为远端集群的编码,如果该option省略,则编码使用远端集群数据库的默认编码。
- 查看建立的外表。
\d+ region Foreign table "public.region" Column | Type | Modifiers | FDW Options | Storage | Stats target | Description -------------+---------+-----------+-------------+----------+--------------+------------- r_regionkey | integer | | | plain | | r_name | text | | | extended | | r_comment | text | | | extended | | Server: server_remote FDW Options: (schema_name 'test', table_name 'region', encoding 'gbk') FDW permition: read only Has OIDs: no Distribute By: ROUND ROBIN Location Nodes: ALL DATANODES
2.查看建立的server。
\des+ server_remote
List of foreign servers
Name | Owner | Foreign-data wrapper | Access privileges | Type | Version |
FDW Options | Description
---------------+---------+----------------------+-------------------+------+---------+-----------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------+-------------
server_remote | dbadmin | gc_fdw | | | | (address '10.180.157.231:8000,10.180.157.130:8000', dbname 'gaussdb'
, username 'xyz', password 'xxxxxx') |
(1 row)
使用外表进行导入数据或者关联查询。
- 导入数据。
o CREATE TABLE local_region
o (
o R_REGIONKEY INT4,
o R_NAME TEXT,
o R_COMMENT TEXT
o );
INSERT INTO local_region SELECT * FROM region;
- 如遇到报错连接失败,请检查server的信息确认两个集群是否已经相互连通。
- 如遇到报错表不存在,请检查外表的option信息是否正确。
- 如遇到报错列信息不匹配,请检查外表的列信息是否与远端集群对应表的列信息是否一致。
- 如遇到报错版本不一致,请升级低版本的集群在继续使用。
- 如遇到乱码,请检查数据源的实际编码方式,并重新创建外表指定正确的编码。
- 关联查询。
SELECT * FROM region, local_region WHERE local_region.R_NAME = region.R_NAME;
- 外表可以当做一个本地表来使用,执行复杂的作业。
- 如果远端集群已经有统计信息,请对该外表执行analyze以获得更优的执行计划。
- 如果本地集群的DN数量比远端集群的DN数量少,本地集群需要使用SMP来获得更佳的性能。
- 删除外表。
DROP FOREIGN TABLE region;
3.3、整库迁移
场景:使用DSC工具迁移SQL脚本
DSC(Database Schema Convertor)是一款运行在Linux或Windows操作系统上的命令行工具,致力于向客户提供简单、快速、可靠的应用程序SQL脚本迁移服务,通过内置的语法迁移逻辑解析源数据库应用程序SQL脚本,并迁移为适用于GaussDB(DWS) 数据库的应用程序SQL脚本。DSC不需要连接数据库,可在离线模式下实现零停机迁移。在GaussDB(DWS) 中通过执行迁移后的SQL脚本即可恢复数据库,从而实现线下数据库轻松上云。
DSC支持迁移Teradata、Oracle、Netezza、MySQL和DB2数据库的SQL脚本。
下载DSC SQL语法迁移工具
- 登录GaussDB(DWS) 管理控制台。
- 在左侧导航栏中,单击“连接管理”。
- 在“下载客户端和驱动”区域,单击“这里”即可下载DSC迁移工具。
如果同时拥有不同版本的集群,系统会弹出对话框,提示您选择“集群版本”然后下载与集群版本相对应的客户端。在“集群管理”页面的集群列表中,单击指定集群的名称,再选择“基本信息”页签,可查看集群版本。
下载工具
- 下载到本机后,使用WinSCP工具,将DSC工具上传到一个需安装工具的Linux主机上。
执行上传操作的用户需要对Linux主机的目标存放目录有完全控制权限。
3.4、元命令迁移
场景:使用gs_restore命令导入数据
3.4.1、操作场景
gs_restore是GaussDB(DWS)提供的与gs_dump配套的导入工具。通过该工具,可将gs_dump导出的文件导入至数据库。gs_restore支持导入的文件格式包含自定义归档格式、目录归档格式和tar归档格式。
gs_restore具备如下两种功能。
- 导入至数据库
如果指定了数据库,则数据将被导入到指定的数据库中。其中,并行导入必须指定连接数据库的密码。
- 导入至脚本文件
如果未指定导入数据库,则创建包含重建数据库所需的SQL语句脚本,并将其写入至文件或者标准输出。该脚本文件等效于gs_dump导出的纯文本格式文件。
gs_restore工具在导入时,允许用户选择需要导入的内容,并支持在数据导入前对等待导入的内容进行排序。
3.4.2、操作步骤
gs_restore默认是以追加的方式进行数据导入。为避免多次导入造成数据异常,在进行导入时,建议使用"-e"和"-c" 参数,即导入前删除已存在于待导入数据库中的数据库对象,同时当出现导入错误时,忽略当前错误,继续执行导入任务,并在导入后会显示相应的错误信息。
- 以root用户登录到服务器,执行如下命令进入数据存放路径。
|
2. 使用gs_restore命令,从gaussdb整个数据库内容的导出文件中,将数据库的所有对象的定义导入到backupdb。
gs_restore -W password -U jack /home//backup/MPPDB_backup.tar -p 8000 -h 10.10.10.100 -d backupdb -s -e -c
表1 常用参数说明 |
||
参数 |
参数说明 |
举例 |
-U |
连接数据库的用户名。 |
-U jack |
-W |
指定用户连接的密码。 o 如果主机的认证策略是trust,则不会对数据库管理员进行密码验证,即无需输入-W选项; o 如果没有-W选项,并且不是数据库管理员,会提示用户输入密码。 |
-W Passwd@123 |
-d |
连接数据库dbname,并直接将数据导入到该数据库中。 |
-d backupdb |
-p |
指定服务器所监听的TCP端口或本地Unix域套接字后缀,以确保连接。 |
-p 8000 |
-h |
“集群地址”如果通过公网地址连接,请指定为集群“公网访问地址”或“公网访问域名”,如果通过内网地址连接,请指定为集群“内网访问地址”或“内网访问域名”。 |
-h 10.10.10.100 |
-e |
当发送SQL语句到数据库时如果出现错误,退出当前出现错误的任务,并执行其他导入任务。即默认状态下会忽略错误任务并继续执行导入,且在导入后会显示一系列错误信息。 |
- |
-c |
在重新创建数据库对象前,清理(删除)已存在于将要导入的数据库中的数据库对象。 |
- |
-s |
只导入模式定义,不导入数据。当前的序列值也不会被导入。 |
- |
其他参数说明请参见《工具参考》中“服务端工具>gs_restore”章节。
3.4.3、 示例
示例一:执行gs_restore,导入指定MPPDB_backup.dmp文件(自定义归档格式)中gaussdb数据库的数据和对象定义。
gs_restore -W Passwd@123 backup/MPPDB_backup.dmp -p 8000 -h 10.10.10.100 -d backupdb
gs_restore[2017-07-21 19:16:26]: restore operation successfu
gs_restore: total time: 13053 ms
示例二:执行gs_restore,导入指定MPPDB_backup.tar文件(tar归档格式)中gaussdb数据库的数据和对象定义。
gs_restore backup/MPPDB_backup.tar -p 8000 -h 10.10.10.100 -d backupdb
gs_restore[2017-07-21 19:21:32]: restore operation successful
gs_restore[2017-07-21 19:21:32]: total time: 21203 ms
示例三:执行gs_restore,导入指定MPPDB_backup目录文件(目录归档格式)中gaussdb数据库的数据和对象定义。
gs_restore backup/MPPDB_backup -p 8000 -h 10.10.10.100 -d backupdb
gs_restore[2017-07-21 19:26:46]: restore operation successful
gs_restore[2017-07-21 19:26:46]: total time: 21003 ms
示例四:执行gs_restore,将gaussdb数据库的所有对象的定义导入至backupdb数据库。导入前,gaussdb存在完整的定义和数据,导入后,backupdb数据库只存在所有对象定义,表没有数据。
gs_restore -W Passwd@123 /home//backup/MPPDB_backup.tar -p 8000 -h 10.10.10.100 -d backupdb -s -e -c
gs_restore[2017-07-21 19:46:27]: restore operation successful
gs_restore[2017-07-21 19:46:27]: total time: 32993 ms
示例五:执行gs_restore,导入MPPDB_backup.dmp文件中PUBLIC模式的所有定义和数据。在导入时会先删除已经存在的对象,如果原对象存在跨模式的依赖则需手工强制干预。
gs_restore backup/MPPDB_backup.dmp -p 8000 -h 10.10.10.100 -d backupdb -e -c -n PUBLIC
gs_restore: [archiver (db)] Error while PROCESSING TOC:
gs_restore: [archiver (db)] Error from TOC entry 313; 1259 337399 TABLE table1 gaussdba
gs_restore: [archiver (db)] could not execute query: ERROR: cannot drop table table1 because other objects depend on it
DETAIL: view t1.v1 depends on table table1
HINT: Use DROP ... CASCADE to drop the dependent objects too.
Command was: DROP TABLE public.table1;
手工删除依赖,导入完成后再重新创建。
gs_restore backup/MPPDB_backup.dmp -p 8000 -h 10.10.10.100 -d backupdb -e -c -n PUBLIC
gs_restore[2017-07-21 19:52:26]: restore operation successful
gs_restore[2017-07-21 19:52:26]: total time: 2203 ms
示例六:执行gs_restore,导入MPPDB_backup.dmp文件中PUBLIC模式下表hr.staffs的定义。在导入之前,hr.staffs表不存在。
gs_restore backup/MPPDB_backup.dmp -p 8000 -h 10.10.10.100 -d backupdb -e -c -s -n PUBLIC -t hr.staffs
gs_restore[2017-07-21 19:56:29]: restore operation successful
gs_restore[2017-07-21 19:56:29]: total time: 21000 ms
示例七:执行gs_restore,导入MPPDB_backup.dmp文件中PUBLIC模式下表hr.staffs的数据。在导入之前,hr.staffs表不存在数据。
gs_restore backup/MPPDB_backup.dmp -p 8000 -h 10.10.10.100 -d backupdb -e -a -n PUBLIC -t hr.staffs
gs_restore[2017-07-21 20:12:32]: restore operation successful
gs_restore[2017-07-21 20:12:32]: total time: 20203 ms
4、GaussDB应用案例
4.1、光大银行选择GaussDB
建设全国首个股份制银行国产数仓,催熟金融科技创新课题,全面落地数字化转型;承载3.5万+批量作业,性能提升45%。
4.2、华夏银行选择GaussDB
通过采用同城双活技术,实现金融级的高可用,保证数据0丢失;凭借GaussDB强大的企业级兼容能力以及一站式数据迁移解决方案,完成平滑替换。
4.3、甘肃医保选择GaussDB
承载甘肃医保数十个业务系统的数字底座,门诊结算响应速度从5秒降低到0.9秒,入院办理响应时间从3秒降低到0.4秒,住院结算响应时间从10秒降低到 1.9秒。大幅度减少了群众就医结算的等待时间。
4.4、陕西财政选择GaussDB
承载一体化平台的生产库,实现核心业务数据的集中管理与共享,助力支付业务运转效率提升60%。通过两地三中心高可用部署,保障数据不丢失,故障闪恢复。
4.5、一汽集团选择GaussDB
提供海量数据存储、数据实时同步的商业数据智能分析,极大缩短复杂报表作业执行时间,从天到分钟,数据实时汇聚。助力一汽红旗ERP系统重构,高效支撑海量订单需求,可靠性达99.99%。
5、总结
随着更多业务不断迁移至GaussDB环境中,迁移过程越来中数据不丢失已成最基本要求,目前华为可提供从不同场景将数据迁移至GaussDB,从而满足不同场景业务需求。
【这次高斯不是数学家】有奖征文火热进行中:https://bbs.huaweicloud.cn/blogs/351189
- 点赞
- 收藏
- 关注作者
评论(0)