全部产品
Search
文档中心

云原生数据仓库AnalyticDB MySQL版:数据导入方式介绍

更新时间:Sep 28, 2023

为满足多样化的数据导入需求,云原生数据仓库AnalyticDB MySQL版提供了多种数据导入方式,包括:通过外表导入数据、使用DataWorks导入数据和利用JDBC通过程序导入数据等。本文介绍各导入方式的特性及适用场景,帮助您选择正确的数据导入方式。

通过外表导入数据

AnalyticDB MySQL内置不同数据源的访问链路,支持通过创建外表来映射外部数据源,并发地读取外部数据并导入到AnalyticDB MySQL。通过外表导入数据会最大限度地利用集群资源,实现高性能数据导入。

基本特性

  • 适合大批量数据:导入链路批量操作,适合单任务进行大量数据导入的场景。

  • 资源消耗大:利用集群资源进行高性能导入,建议在业务低峰期使用。

  • 批量可见:数据导入任务完成前数据不可见,任务完成后导入的数据批量可见。

  • 分区覆盖:通过外表导入的数据分区会覆盖表中已存在的同一分区。

  • 构建索引:通过外表导入会同步构建索引,导入任务完成则生成索引,可提升查询性能。

常见使用场景

  • 数仓初始化

    当存在TB级数据需要初始化导入到AnalyticDB MySQL进行分析,建议先将数据存放在OSS或者HDFS,再通过外表高效导入。

  • 离线数仓加速

    离线数据运行在MaxCompute等离线数仓上,单天数据增量达到几十GB甚至TB级,需要每天导入数据到AnalyticDB MySQL进行数据加速分析。

使用方法

数据导入方式分为常规导入(默认)和弹性导入。常规导入在计算节点中读取源数据,然后在存储节点中构建索引,消耗计算资源和存储资源。弹性导入在Serverless Spark Job中读取源数据和构建索引,消耗Job型资源组的资源。

常规导入

AnalyticDB MySQL常规导入支持多种外表数据源,包括MaxCompute、HDFS、OSS、RDS MySQL。使用方法请参见下面链接。

弹性导入

仅内核版本3.1.10.0及以上且已创建Job型资源组的湖仓版(3.0)集群支持弹性导入数据。弹性导入可以大幅减少存储资源的消耗,或者不消耗存储资源和计算资源,降低了导入过程中对在线读写业务的影响,提升资源隔离性。当Job型资源组资源充足时,AnalyticDB MySQL支持同时运行多个弹性导入任务,也支持通过增大单个弹性任务使用的最多资源加速导入任务完成,提升并发性和弹性能力。

AnalyticDB MySQL弹性导入仅支持MaxCompute和OSS两种外表数据源,使用方法请参见下面链接。

适用场景

使用弹性导入功能可以降低Worker资源消耗,加速数据导入,适用场景如下:

  • 执行多个导入任务时,可提交弹性导入任务,加速导入。常规导入任务最多支持2个任务并发执行,而弹性导入任务最多支持32个任务并发执行。

  • 需要将大量数据导入至一个AnalyticDB MySQL二级分区表的多个二级分区时,可以提交弹性导入任务,并设置adb.load.job.max.acu参数增大单个弹性任务使用的最多资源,提高任务执行并发度。

    说明

    adb.load.job.max.acu参数的默认值为集群shard个数+1。您可设置为k*默认值(k>=1),建议变量K的最大值不超过当前导入任务二级分区表的二级分区数量。参数说明,请参见hint参数

  • 执行常规导入任务时,Worker的CPU、IO等资源水位较高,会对在线读写业务产生影响。弹性导入可以大幅减少存储资源的消耗,或不消耗存储资源和计算资源,提升资源隔离性。

使用限制

  • 弹性导入仅支持通过INSERT OVERWRITE INTO语句将外表中的数据导入至AnalyticDB MySQL湖仓版(3.0)

  • 弹性导入支持以下SQL操作:

    • 仅支持从单个表导入数据,不支持多个表Join。

    • 仅支持WHERE和LIMIT语法,不支持ORDER BY等其他语法。

    • SELECT语句的列和值仅支持*、列名、缺省值和常量,不支持使用SQL函数等其他语法。

  • 弹性导入仅支持导入数据到事实表。

  • 弹性导入支持的数据类型为:booleantinyintsmallintintbigintfloatdoubledecimalvarchardatetimedatetimetimestamp

注意事项

  • 弹性导入仅支持在Job资源组中读取源数据和构建索引,会消耗Job型资源组的资源,从而产生费用。详细信息请参见查看资源组监控湖仓版(3.0)计费项

  • 需确保Job型资源组中可用资源充足,避免资源不足导致任务长时间等待、耗时长、任务失败等问题。

  • 对比常规导入任务,在执行弹性导入任务时,控制台监控页面显示的部分监控项会有差异,例如CPU使用率、IO使用率等。

使用建议

  • 弹性导入任务最少需要2~3分钟完成,因此不适用于数据量较小的导入任务。若导入任务完成时间小于3分钟,建议您使用常规方式导入数据。

  • 相同资源下单个弹性导入任务的完成时间大于常规导入任务的完成时间。若您对导入任务完成时间有较高的要求,建议增加单个弹性任务的最多使用资源加速导入任务完成。

通过DataWorks导入数据

DataWorks提供了可视化的数据导入方式,可以将多种数据源导入到AnalyticDB MySQL。相对于通过外表导入数据的方法,DataWorks导入数据更为轻量化,适合数据量相对较小的数据导入场景。

说明

不建议通过DataWorks导入大量数据。如果存在数百GB以上的数据导入,建议通过外表导入数据。详情请参见通过外表导入数据

常见使用场景

  • 分钟/小时级数据导入

    需要每分钟或每小时抽取少量数据到AnalyticDB MySQL进行数据分析。

  • 多种异构数据源导入

    需要导入OTS、Redis、PostgreSQL等多种数据源的数据到AnalyticDB MySQL

使用方法

通过DataWorks导入数据分为3个步骤。

  1. 配置源端数据源。支持的数据源包括:RDS MySQL、Oracle、SQL Server、OSS、MaxCompute及HDFS。

  2. 配置AnalyticDB MySQL 3.0数据源

  3. 配置同步任务中的数据来源和去向

导入性能调优

如何提升DataWorks导入数据的性能,请参见通过DataWorks导入数据调优

通过JDBC使用程序导入数据

在数据清洗或复杂非结构化数据场景下,当外表和DataWorks导入无法满足定制化导入需求时,可以编写程序通过JDBC导入数据。

常见使用场景

  • 数据预处理后导入

    业务端实时产生日志文件,需要对日志文件进行自动化解析并实时导入AnalyticDB MySQL

  • 非云上数据导入

    当数据无法上传到OSS、HDFS或者MaxCompute时,需要将本地数据导入AnalyticDB MySQL

使用方法与建议

导入性能调优

如何提升使用应用程序导入数据的性能,请参见通过JDBC使用程序导入数据调优