6.1 MySQL中导入和导出

HybridDB支持直接从MySQL中全量导入和导出数据,这也是HybridDB独具特色的功能之一,相比较借助DTS、Kettle等工具,HybridBD直通导入和导出节省了大量的中间转换,导入导出的速度要快10倍以上!

1. 从MySQL中导入

数据从MySQL导入到HybridDB中需要如下四个步骤:

  • 准备MySQL中的源头数据表
  • 在HybridDB中建立一张外表映射到MySQL中的源头表
  • 在HybridDB中建立接收数据的真实存储表
  • 调用Insert [overwrite] into select来完成数据导入

举例如下:

1)在Mysql中准备源头表

这一步是准备mysql源头表数据,如果已经有了,可以忽略这一步

CREATE TABLE IF NOT EXISTS testdb.mysql_import_test  
(  
uid     bigint,  
other varchar(255)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

2)在HybridDB中创建一张外部映射表

这一步的作用是建立映射表,用于告诉HybridDB如何读取MySQL源头表数据

use exdb   #exdb是HybriDB中用户db的名称

CREATE TABLE IF NOT EXISTS mysql_import_test_external_table  
(  
uid bigint,
other string  
)  
ENGINE='mysql'  
TABLE_PROPERTIES='{  
"url":"jdbc:mysql://1.0.0.1:3306/testdb",  
"tablename":"mysql_import_test",  
"username":"testUser",  
"password":"password"  
}'

上表定义中

  • ENGINE=mysql用于表明该表是外部表,存储引擎是外部的MySQL引擎
  • TABLE_PROPERTIES用于告诉HybridDB如何访问mysql中的源头表数据
    • url:mysql中的链接串,testdb是mysql中源头表所在的db
    • tablename: mysql中源头表名称
    • username: 访问mysql的用户名
    • password: 访问mysql的用户名对应的密码

外表的作用是映射作用,无法存储数据,对外表的读写操作都会被映射到外部MySQL上面

3)在HybridDB中创建一张真实数据表

这一步是创建目标表,用于接收从MySQL中导入的源头表的数据

CREATE TABLE IF NOT EXISTS hybriddb_import_test  
(  
uid bigint,  
other string  
)  
DISTRIBUTE BY HASH(uid)  
INDEX_ALL='Y'  
ENGINE='CSTORE'

4) 执行sql语句开始导入

可以通过两种方式来完成导入:

  • 方式1:实时导入,导入过程中数据实时可见,数据是追加的方式导入到目标表

    insert into hybriddb_import_test
    select * from mysql_import_test_external_table;
    
  • 方式2:批量导入,导入任务完成后数据才可见,每次导入会覆盖掉原来的数据,性能好

    insert overwrite into hybriddb_import_test
    select * from mysql_import_test_external_table;
    

2. 导出到MySQL

数据从MySQL导入到HybridDB中需要如下三个步骤:

  • 准备MySQL中的真实数据表
  • 在HybridDB中建立一张目标外表映射到MySQL中的数据表
  • 准备HybridDB中的数据源头表
  • 调用Insert [overwrite] into select来完成数据导出

1) 准备MySQL中的真实数据表

CREATE TABLE IF NOT EXISTS mysql_export_test
(
uid     bigint,
other varchar(255)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bi

2) 在HybridDB中建立一张外表映射到MySQL中的数据表

这一步的作用是建立映射表,用于告诉HybridDB如何将数据写回MySQL

use exdb #exdb是HybriDB中用户db的名称

CREATE TABLE IF NOT EXISTS mysql_export_test_external_table
(
uid bigint,
other string
)
ENGINE='mysql'
TABLE_PROPERTIES='{
"url":"jdbc:mysql://1.0.0.1:3306/testDb",
"tablename":"mysql_export_test",
"username":"testUser",
"password":"password"
}'

3) 在HybridDB准备数据源头表

这这一步是准备hybriddb源头表数据,如果已经有了,可以忽略这一步

CREATE TABLE IF NOT EXISTS hybriddb_export_test
(
uid bigint,
other string
)
DISTRIBUTE BY HASH(uid)
INDEX_ALL='Y'
ENGINE='CSTORE'

4) 执行sql语句开始导出

insert into mysql_export_test_external_table
select * from hybriddb_export_test

注意: 这里是同步数据导出,发起导入的mysql client连接需要一直保持,如需要异步提交,请参考6.5节

3. 注意事项

  1. 要求三表的DDL定义完全一致(MySQL源头表、HybridDB外表、HybridDB存储表)
  2. 这里导入导出都是同步模式,发起导入的mysql client连接需要一直保持,如需异步提交请参考6.7节

results matching ""

    No results matching ""