摘要: title: PgSQL · 最佳实践 · 从 ODPS 迁移数据到 HybridDB author: 义从 背景 最近,不少用户在尝试使用 HybridDB 的过程中,询问我们如何把之前在 ODPS 中的数据迁移到 HybridDB。
title: PgSQL · 最佳实践 · 从 ODPS 迁移数据到 HybridDB
author: 曾文旌(义从)
背景
最近,不少用户在尝试使用 HybridDB 的过程中,询问我们如何把之前在 ODPS 中的数据迁移到 HybridDB。今天就跟大家介绍一种效率较高的方法。
一:原理
ODPS 和 HybridDB 都是多数据节点组合成的集群架构,这样的架构如果要做到效率较高的数据吞吐,需要驱动数据节点主动推送数据。幸运的是 ODPS 和 HybridDB 都支持用该方式向 OSS 读写数据。于是解决方案来了。
要在 OSS 交换数据,约定数据格式是必要的。调查发现,ODPS 支持向 ODPS 写文本格式的数据(TEXT/CSV),HybridDB 也支持读取文本格式的数据。
二:解决方案
下面通过一个简单的 demo 描述整体方案
1. ODPS OSS 外表
首先,我们需要创建一个和 ODPS 数据表相同结构的外部表,用于打通和 OSS 的数据通道。
CREATE external TABLE `demo_oss_ext` (
id string COMMENT 'id',
data1 string COMMENT 'data1',
data2 string COMMENT 'data2'
)
partitioned by (ds string)
STORED BY 'com.aliyun.odps.TextStorageHandler'
WITH SERDEPROPERTIES ('odps.text.option.delimiter'='\t')
LOCATION 'oss://id:key@endpoint/bucketname/oss_dir/';
关键参数:
- 1. com.aliyun.odps.TextStorageHandler 定义了数据存储到 OSS 的数据格式
- TextStorageHandler 由 JAVA 开发,是缺省的数据投递选择
- 缺省的 TextStorageHandler 不支持完整的 TEXT/CSV 协议,如果要支持,则建议和开源的 JAVA CSV 格式实现对接。有开发工作量。
- 2. TextStorageHandler 支持两个自定义参数
- odps.text.option.delimiter 用于指定列分割符。
- odps.text.option.use.quote 定义引用字符。
- 对于 NULL 列值,默认是 \N 且不可更改。
- 不支持转义特殊字符,只能通过自定义 Handler 实现。
- 3. LOCATION 指定投递到 OSS 上的具体账号和位置,包含了 id, key, endpoint, bucket, 和具体位置。
2. 把数据通过外表迁移到 OSS
使用下面的 SQL 把 ODPS 中的数据转移到 OSS
insert into demo_oss_ext select * from t_data;
注意:
- 1. 该操作是并行的进行的,默认每 256MB 数据开启一个并发。
- 可以通 set odps.sql.mapper.split.size=xxx; 改小值增大并发。
- 2. ODPS 到 OSS 数据的转移会受到 OSS 流控的影响,理论上单个并发到 OSS 的网络带宽是 100MB/S。
- 3. 如果想进一步提高带宽,需要联系 OSS 的相关同学放开限制。
3. HybridDB 外部表
HybridDB 外部表 oss_ext
CREATE READABLE EXTERNAL TABLE user_data_oss_ext (
id int64,
data1 text,
data2 text
)
location('oss://endpoint
dir=data_oss_dir
id=ossid
key=osskey
bucket=bucketname')
FORMAT 'TEXT' (DELIMITER '\t' )
LOG ERRORS INTO error_track_table SEGMENT REJECT LIMIT 10;
关键参数:
- 1. location 指定了所有和 oss 相关的参数
- 2. 文件的格式需要和 ODPS 的外表匹配 FORMAT 'TEXT' (DELIMITER '\t' )
- 3. 设置跳过错误的行
- 异构数据的迁移难免会碰到校验不过的数据,可能是特殊字符,也可能是不合法的编码。
- LOG ERRORS INTO error_track_table 会把出错的数据写到一张表中。
- SEGMENT REJECT LIMIT X 设置支持单个 SEGMENT 允许错误的行,也可以设置成允许错误的百分比。
- 4. HybridDB 的导入也是并行的,并行程度和计算节点数一致。
- 5. 导入 gzip 格式的 text/csv 数据会提高一倍以上的性能,但前提是 ODPS 支持输出压缩格式的文件。
4. HybridDB 列压缩本地表
CREATE TABLE t_ao(
id int64,
data1 text,
data2 text
)
with (
APPENDONLY=true, COMPRESSTYPE=zlib,
,BLOCKSIZE=2097152,
ORIENTATION=COLUMN,CHECKSUM=true,
OIDS=false)
DISTRIBUTED BY (id);
关键参数:
- 1. 如果导入到 HybridDB 不需要大量的修改数据,那么使用 append only 以列组织再加上压缩是最好的方案
- 对应下列几个参数 APPENDONLY=true COMPRESSTYPE=zlib COMPRESSLEVEL=5 ORIENTATION=COLUMN BLOCKSIZE=2097152
- HybridDB 是按列组织的压缩,压缩比会比按行压缩高很多,COMPRESSLEVEL=5 压缩比很容易到之前的 20%。
- 2. DISTRIBUTED BY (column) 用于把数据均匀打散到 HybridDB 的各计算节点,数据尽量的均匀分布是选择分布列的关键。
5. 从 OSS 导入数据到 HybridDB
使用下面的 SQL 把 OSS 中的数据导入到 HybridDB
insert into t_ao select * from user_data_oss_ext;
HybridDB 和 PostgreSQL 都支持从 OSS 读写数据
OSS 和 AWS 的 S3 一致,是云上廉价的存储服务,它打通了几乎所有的云产品。我们推荐的云上数据通道。
目前,云上的 PostgreSQL 和 HybridDB 都支持 OSS 数据源的读写。
相关推荐
PgSQL 到 MySQL 数据库迁移步骤和注意事项 数据库迁移是数据库管理中最重要的一步骤,PgSQL 到 MySQL 数据库迁移是一种常见的迁移方式。本文档将详细介绍PgSQL 到 MySQL 数据库迁移的步骤和注意事项。 Step 1: ...
之后,可以从osm2pgsql的官方网站下载适用于Windows的二进制包,解压后将其添加到系统PATH环境变量,以便于命令行调用。 **基本使用** osm2pgsql的基本语法是`osm2pgsql [options] <osm_file>`,其中`<osm_file>`...
这里我们关注的是使用Shell脚本来实现MySQL从原表到历史表的数据迁移。这种自动化的方法可以帮助我们高效、准确地处理大量数据,同时减少人为错误。 首先,让我们深入理解`shell`脚本。Shell是Linux和Unix系统中的...
一、数据库迁移——MySQL举例 1、解压 migration-4.1.4-2023-11-23.zip 2、打开 migration 工具 3、点击帮助菜单,可查看使用说明文档,如下图所示 二、迁移步骤: 1、新建组,随便起名。 2、数据库连接,新建 源库 ...
总结起来,从PostgreSQL数据库导出数据字典是一项关键的任务,它有助于数据库的维护、迁移、审计和协作。通过`pg_dump`和`pg_dumpall`命令,或者使用专门的工具如DBDocSetup.exe,你可以轻松地获取和管理数据字典。...
数据库迁移是指将数据库从一个状态迁移到另一个状态的过程,通常涉及数据库结构的更改,如添加、删除或修改表、字段、索引等。在软件开发中,随着应用程序的发展,数据库结构也需要随之调整,这就需要数据库迁移工具...
PostgreSQL 数据迁移到达梦数据库操作 PostgreSQL 数据迁移到达梦数据库操作是指将 PostgreSQL 数据库中的数据迁移到达梦数据库中的过程。该过程需要使用 Navicat for PostgreSql 工具生成 SQL 脚本,然后使用达梦...
本项目“mssql-to-pgsql”提供了一种解决方案,帮助用户将数据从SQL Server迁移到PostgreSQL,利用Python语言进行操作。以下是关于这个过程的一些详细知识: 1. **Microsoft SQL Server与PostgreSQL对比**: - ...
【dalibo-sqlserver2pgsql-7e65e47_postgresql_projectmanagement_】这个标题暗示了我们正在讨论一个项目,它涉及到将SQL Server的数据迁移到PostgreSQL数据库的工具或过程。`dalibo-sqlserver2pgsql-7e65e47`可能是...
osm2pgsql是一款强大的开源工具,主要用于将OpenStreetMap(OSM)的数据导入到PostgreSQL数据库中。OpenStreetMap是一个全球性的、由志愿者维护的地理信息系统,它提供了免费的地图数据,包括道路、建筑、公园、交通...
1、 跨网络进行增量同步数据,即隔着网闸,网络不能直连,使用dblink、主从库等方案解决不了; 2、 源表跟目标表字段名称可以不一致,但表名称要一致(表名称不一致也可以实现); 3、 自定义增量的控制字段,可以是...
Shp2pgsql是PostGIS生态系统中的一个关键工具,专门用于将ESRI Shapefile(简称shp文件)的数据导入到PostgreSQL数据库中。Shapefile是一种常见的地理数据格式,包含了矢量地理数据,如地物边界、道路、河流等。Shp2...
标题 "shp导入到pgsql桌面应用" 涉及到的是将地理信息系统(GIS)中的Shapefile格式数据导入到PostgreSQL数据库中,特别是在一个桌面应用程序的环境中。Shapefile是一种广泛用于存储矢量地理数据的标准格式,它由...
7. 开源社区支持:作为开源项目,PGSQL 拥有活跃的社区,开发者可以获取到及时的技术支持和更新,同时也能参与到项目的开发中,推动其持续改进。 3、PGSQL 数据库引擎的应用场景3.1 Web 应用:PGSQL 的高性能和丰富...
这些工具的主要功能是对两个或多个数据库的架构和实际存储的数据进行比较,以便于识别差异、同步更新或者进行数据迁移。在数据库管理和开发过程中,这样的工具起着至关重要的作用。 首先,我们要理解数据库的结构。...
读书笔记:同步mysql到pgsql(高性能迁移服务)
经常碰到客户电脑操作系统重装或要更换电脑,而数据库恢复或迁移是个非常麻烦的事情。通过此工具则可以非常方便的进行恢复,不需要重装PG数据库及库。
- 数据迁移工具,如pgsql2pgsql和mysql2pgsql,支持将数据从MySQL和PG/PPAS迁移到PG/GP/PPAS。 二、方案优势 1. 低使用成本:OSS服务以存储量和请求次数计费,成本较低。 2. 高并行导入性能:利用集群segment节点...
osm2pgsql是将OSM数据转换并导入到PostgreSQL/PostGIS数据库的主要工具之一。它能够高效地解析OSM文件,并将其转化为适合数据库查询的格式。这个工具提供了多种选项来定制数据导入,如选择要导入的数据类型、设置...
集成完成后,Nacos-PgSQL可以提供与原生Nacos相同的服务注册、发现和配置管理功能,同时利用PostgreSQL的事务性、ACID(原子性、一致性、隔离性和持久性)特性,保证了数据的安全性和一致性。PostgreSQL的广泛社区...