开发者社区> 曾文旌> 正文

如何把数据从 Mysql 导入到 Greenplum

简介:
+关注继续查看

本文介绍给大家几个把数据从 Mysql 导入到 Greenplum 的方法

自阿里云推出 Greenplum 服务以来,很多公测用户希望把自己在 Mysql 中的数据放到 Greenplum 用于进行数据分析。而且很多客户的数据量相当大。在这里我向大家提供几种经过验证的向云上 Greenplum 导入大量数据的方法。

一:使用 COPY 命令导入数据

1 COPY语法

特点:
1. Greenplum 提供的原生数据导入方法。
2. 需要先把数据从 Mysql 导出成文本文件。
3. 适合少量数据上云,导入过程中数据会经过 Greenplum 的 Master 节点,所以性能不会特别理想。

二: 通过阿里云开源的工具 mysql2pgsql 导入

2 mysql2pgsql 使用方法

特点:
1. Mysql 导入 Greenplum DB 到 DB 不落地的导入方案,简单实用。
2. 推荐购买 ECS,和在 ECS 上使用该工具,特别适合从 RDS Mysql/ECS 自建实例导入数据。
3. 该工具已经开源了代码,各位可以定制自己的需求。
4. 该工具写入端也会走 Master 节点,所以性能不会特别理想。

三: 通过 OSS 导入大量数据

3 gp_oss_ext 使用方法

4 ossfs 使用方法

该方法的流程如下:
1. 购买和开通阿里云 ECS,OSS 服务。
2. 在 ECS 上使用 ossfs 包挂载购买的 oss 为本地文件系统。
3. 在 ECS 上安装 mysql 二进制RPM。
4. 使用 mysqldump 命令流式获取源库中对应表中的数据,并增量写入到 oss 中。
5. 使用 gp_oss_ext 在 Greenplum 中创建 oss 外部表,并行的将数据导入到 Greenplum 中。

mysqldump 导出举例:

nohup /home/mysql/bin/mysqldump -h192.168.1.1 -P3306 -utest -ptest testdb testtab | sed 's/),(/\n/g;s/NULL//g' | split -l 1000000 - /ossdata/testtab/data. 1>/home/test/testtab.out 2>&1 &

上面的举例有几个要点,大家可以根据自己的需求定制

1. 用户可以使用 mysqldump 导出数据,也可以使用 mysql 命令,如果数据量较大,建议使用 --quick 参数,避免内存不足。
2. mysqldump 跟上的 sed 命令是为了格式化导出的数据,以符合 Greenplum 导入的格式规范,大家可以根据需求定制这一项。
3. split 也是一个比较关键的点。它用于定制切割和存放文件的规则。原因有以下两点
    3.1 oss 上普通文件有大小限制
    3.2 gp_oss_ext 并行导入 oss 上的数据是以文件为单位并发的,推荐在 OSS 上使用虚拟文件夹存放对应一个表的所有数据。

从 OSS 装载数据的特点:

1. 这是一个应对大量数据导入到 Greenplum 的方法,可以轻松从 Mysql 导入上百G,甚至上T的数据到 Greenplum。
2. 不需要很大的缓冲临时空间,数据是流式写入到 OSS 的。
3. 导出和导入时以表为单位进行的,使用者可以并发操作多个表以提高整体的性能。
4. 该方法的性能远好于前两种,导入到云上 Greenplum 规格越大,性能也会越好。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Mysql数据库基础第四章DDL(数据定义语言):库表的管理、数据类型与约束条件
# 1.DDL语言基本概述 DDL:数据定义语言 主要包括以下几部分内容: - 库的管理 - 表的管理 - 数据类型 - 约束 下面我们先介绍库的管理
62 0
mysql 导出查询结果/导入.sql文件数据/mysqldump导出表or数据
mysql 导出查询结果/导入.sql文件数据/mysqldump导出表or数据
45 0
错误代码:1406列的数据太长-MySQL
错误代码:1406列的数据太长-MySQL
22 0
将mysql数据表数据从一台服务器迁移到另一台服务器
这种问题出现在导入表时,也属于权限问题,看mysql中文手册的一段话: >出于安全原因,当读取位于服务器中的文本文件时, www.2cto.com 文件必须位于数据库目录中,或者是全体可读的。另外,要对服务器文件使用LOAD DATA INFILE,您必须拥有FILE权限。
31 0
MySQL 导出 表结构,执行 .sql 文件导入结构或者数据
MySQL 导出 表结构,执行 .sql 文件导入结构或者数据
51 0
mybatis批量更新数据三种方法效率对比【Mysql】
mybatis批量更新数据三种方法效率对比【Mysql】
67 0
Mysql 查询B表的数据新增到A表 (已测试过)
Mysql 查询B表的数据新增到A表 (已测试过)
13 0
eggjs 里链接 mysql 返回数据有 RowDataPacket 应该怎么处理?
eggjs 里链接 mysql 返回数据有 RowDataPacket 应该怎么处理?
16 0
mysql数据库中对数据的基本操作(二)
mysql数据库中对数据的基本操作(二)
39 0
mysql数据库中对数据的基本操作(一)
mysql数据库中对数据的基本操作
15 0
+关注
曾文旌
个人简介 曾文旌 阿里巴巴 RDS for PostgreSQL 数据库专家 目前在阿里云RDS 数据库内核服务组,负责PostgreSQL相关业务.
文章
问答
文章排行榜
最热
最新
相关电子书
更多
让 MySQL 原生分布式触手可及
立即下载
好的 MySQL 兼容可以做到什么程度
立即下载
云数据库RDS MySQL从入门到高阶
立即下载