如何把資料從Mysql匯入到Greenplum

曾文旌發表於2016-08-31

本文介紹給大家幾個把資料從 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/),(/
/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 規格越大,效能也會越好。


相關文章