执行INSERT FROM SELECT迁移数据

您可以通过MySQL客户端、MySQL命令行工具或者DMS for Data Lake Analytics连接DLA,然后执行INSERT INTO SELECT将OSS中的数据写入AnalyticDB for MySQL 2.0。

注意事项

  • INSERT INTO SELECT通常为长时运行任务,建议您通过异步执行方式。

  • 通过MySQL命令行写入数据时,需要在命令行中指定-c参数,用来识别MySQL语句前的Hint。

    mysql -hxxx -Pxxx -uxxx -pxxx db_name -c
    • h:DLA的连接串信息,通过DLA控制台获取。如果您的MySQL客户端或者MySQL命令行工具安装在与DLA同地域的ECS上,且ECS所属VPC与DLA所属VPC相同,则使用DLA VPC专有网络连接串。否则,使用DLA经典网络连接串。

    • P:DLA的连接端口,通过DLA控制台获取。

    • u:DLA用户名,详情,请参见账号类型

    • db_name:DLA中的Schema名。

  • 如果在INSERT INTO子句和SELECT子句中没有指定列信息,请确保源表和目标表的列顺序一致、列类型对应匹配。

  • 如果在INSERT INTO子句和SELECT子句中指定列信息,请确保列的顺序符合业务需要、列类型对应匹配。

写入数据

异步执行以下SQL,将OSS table目录下dla_table_1文件中的数据插入AnalyticDB for MySQL 2.0的ads_database数据库中的shipping表。

-- OSS到AnalyticDB for MySQL 2.0的全量数据插入
/*+run-async=true*/
INSERT INTO ads_database_schema.shipping
SELECT * FROM oss_data_schema.dla_table_1;

异步执行以下SQL,将OSS table目录下dla_table_1文件中order_amount > 2的数据插入AnalyticDB for MySQL 2.0中ads_database数据库中的order_table表。

-- OSS到AnalyticDB for MySQL 2.0的数据插入,包含对OSS数据的筛选逻辑
/*+run-async=true*/
INSERT INTO ads_database_schema.order_table1 (customer1_id, order1_id, order1_time, order1_amount,order1_type,address1,city1,order1_season)
SELECT customer_id, order_id, order_time, order_amount,order_type,address,city,order_season
FROM oss_data_schema.dla_table_2 
WHERE order_amount > 2 
LIMIT 10000;

查询数据

异步执行INSERT INTO SELECT将返回一个task id,在AnalyticDB for MySQL 2.0中通过task id轮询任务执行情况,如果status为SUCCESS,则数据写入成功。

SHOW query_task WHERE id = 'q201812241524sh385b7d4c0049869';