全部产品
Search
文档中心

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

更新时间:May 31, 2024

为满足多样化的数据导入需求,AnalyticDB for MySQL提供了多种数据导入方式,包括:通过外表导入数据、通过DataWorks导入数据、通过DTS导入数据以及使用JDBC通过程序导入数据等。您可以通过本文了解各导入方式的特性及适用场景,帮助您选择合适的数据导入方式。

通过外表导入数据

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

基本特性

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

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

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

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

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

常见使用场景

  • 数仓初始化

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

  • 离线数仓加速

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

使用方法

数据导入方式分为常规导入(默认)和弹性导入。常规导入在计算节点中读取源数据,然后在存储节点中构建索引,消耗计算资源和存储资源。弹性导入在Serverless Spark Job中读取源数据和构建索引,消耗Job型资源组的资源,并产生一定费用。具体对比如下:

常规导入与弹性导入对比

对比项

常规导入

弹性导入

支持的内核版本

无限制

3.1.10.0及以上内核版本。

适用场景

  • 导入数据量小。

  • 对导入任务的速度和并发数没有要求。

  • 需要降低Worker资源消耗,加速数据导入。

  • 存在多个表的导入任务

  • 需要将大量数据导入至分区表。

支持的数据源

开启方式

默认开启。

3.1.10以上版本默认开启。

使用限制

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

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

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

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

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

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

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

导入任务并发数

常规导入任务最多支持2个任务并发执行。

弹性导入任务最多支持32个任务并发执行。

说明

您可以设置adb.load.job.max.acu参数增大单个弹性任务使用的最多资源,提高任务执行并发度。adb.load.job.max.acu参数的默认值为集群shard个数+1。您可设置为k*默认值(k>=1),建议变量K的最大值不超过当前导入任务表的分区数量。查看集群Shard数和分区数的方法如下:

  • 查看集群Shard数:

    SELECT count(1) FROM information_schema.kepler_meta_shards;
  • 查看分区数的方法,请参见查看表的数据量

消耗的资源

常规导入在Interactive型资源组(常驻Executor计算节点)上读取源数据,在存储节点(Worker)上构建索引,该过程会大量消耗Interactive型资源组(常驻Executor计算节点)和存储节点(Worker节点)的资源。

说明

执行常规导入任务时,存储节点CPU使用率、IO使用率等监控指标较高,会对在线读写业务产生影响。

弹性导入在Job型资源组(动态拉起的Executor计算节点)上读取源数据和构建索引,该过程不会消耗存储节点(Worker)资源。仅消耗少量存储节点(Worker)资源将构建的热分区数据(包括数据格式和索引)下载到本地。

说明

弹性导入任务会消耗少量的存储节点(Worker)资源,但不消耗Interactive型资源组(常驻Executor计算节点)资源。因此在监控页面查看的存储节点CPU使用率、IO使用率指标会偏低,且也无TPS指标。

导入任务的速度

常规导入任务速度与导入配置、导入方式、导入表结构等相关,您可以参考数据导入性能优化文档了解不同场景下的数据导入调优方法。

当Job型资源组资源充足时,弹性导入任务执行并发度更高,导入速度更快。同时也支持通过并行运行多个弹性导入任务加速导入,也支持通过增大单个弹性导入任务使用的资源加速导入。

使用建议:

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

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

导入性能调优

如何提升外表导入数据的性能,请参见通用外表导入数据调优

通过DataWorks导入数据

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

说明

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

常见使用场景

  • 分钟/小时级数据导入

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

  • 多种异构数据源导入

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

使用方法

导入性能调优

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

通过DTS导入数据

数据传输服务 DTS(Data Transmission Service)是阿里云提供的实时数据流服务,支持关系型数据库(RDBMS)、非关系型的数据库(NoSQL)、数据多维分析(OLAP)等数据源间的数据交互。相对于传统数据迁移或同步工具,DTS为您提供功能更丰富、传输性能更强、易用性更高且安全可靠的服务,帮助您简化复杂的数据交互工作,专注于上层的业务开发。您可以将多种数据源,通过DTS导入到AnalyticDB for MySQL中,轻松实现数据传输和实时分析。

常见使用场景

  • 秒级实时同步

    例如把业务库RDS for MySQLPolarDB for MySQL数据库的数据实时同步到AnalyticDB for MySQL中进行分析。

  • 多源汇聚

    例如业务有多个RDS for MySQLPolarDB for MySQL实例,可以将多个实例的数据同步到一个AnalyticDB for MySQL集群中进行分析。且通过DTS提供的多表合并功能,具有相同结构的多个源表可以同步到AnalyticDB for MySQL集群的一张表中进行后续分析。

使用方法

通过JDBC使用程序导入数据

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

常见使用场景

  • 数据预处理后导入

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

  • 非云上数据导入

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

使用方法与建议

导入性能调优

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

通过数据同步功能导入数据

AnalyticDB for MySQL自身提供了丰富的数据同步功能,包括数据管道服务(APS),元数发现服务,Hive数据迁移等功能,可用于发现和组织OSS元数据、实时同步SLSKafka数据到AnalyticDB for MySQL的数据湖或数据仓库,以及迁移Hive数据到OSS并进行后续数据分析。

常见使用场景

  • 低成本存储和分析场景

    当您希望将日志(SLS)和消息类(Kafka)数据进行长期低成本存储以及大规模分析时,可以通过数据管道服务(APS)将SLSKafka数据实时同步至AnalyticDB for MySQL的数据湖或数据仓库中。

  • 元数据发现场景

    OSS上有大量数据文件,但缺少相应的元数据,这些数据文件难以管理和分析。通过AnalyticDB for MySQL提供的元数据发现服务,可以自动建立元数据层次(库、表、分区),并自动识别数据格式和字段信息,生成表结构。通过建立元数据,可以让数据被其他分析引擎识别并进行后续分析。

  • Hive数据迁移场景

    当您希望由AnalyticDB for MySQL来管理(包括元数据管理和后续分析)存储在Hive中的数据时,可以通过Hive数据迁移功能将Hive数据迁移到OSS,并自动组织元数据进行后续分析。

使用方法