11.4 并行表导入实用程序
MySQL Shell 的并行表导入实用程序 util.importTable()
可以将大型数据文件的数据快速导入到 MySQL 关系表。该实用程序分析输入数据文件,将其分配为块,并使用并行连接将块上传到目标 MySQL 服务器。该实用程序能够比使用语句的标准单线程上传更快地完成大量数据导入LOAD DATA
。
- 关于实用程序
- 要求和限制
- 运行实用程序
- 导入表的选项
- Oracle 云基础设施选项
- S3 兼容服务的选项
- Microsoft Azure Blob 存储选项
关于实用程序
MySQL Shell 的并行表导入实用程序支持 MySQL Shell 表导出实用程序的输出,该实用程序可以压缩其生成的数据文件作为输出,并可以将其导出到本地文件夹或对象存储桶。并行表导入实用程序的默认方言是表导出实用程序生成的输出文件的默认方言。并行表导入实用程序还可用于从其他源上传文件。
要导入的一个或多个数据文件可以位于以下任意位置:
- 客户端主机可将其作为本地磁盘访问的位置。
- 客户端主机可通过 HTTP 或 HTTPS 访问的远程位置(用 URL 指定)。以这种方式访问的文件不支持模式匹配。
- Oracle Cloud Infrastructure 对象存储存储桶(来自 MySQL Shell 8.0.21)。
数据将导入到活动 MySQL 会话所连接的 MySQL 服务器中的单个关系表中。
当您运行并行表导入实用程序时,您可以指定数据文件中的字段与 MySQL 表中的列之间的映射。您可以为语句设置字段和行处理选项来LOAD DATA
处理任意格式的数据文件。对于多个文件,所有文件必须采用相同的格式。该实用程序的默认方言映射到使用 SELECT...INTO OUTFILE
具有该语句的默认设置的语句创建的文件。该实用程序还具有映射到 CSV 文件(在 DOS 或 UNIX 系统上创建)、TSV 文件和 JSON 的标准数据格式的预设方言,并且您可以根据需要使用字段和行处理选项自定义这些格式。请注意,JSON 数据必须采用每行文档格式。
自并行表导入实用程序推出以来,已添加了许多功能,因此请使用最新版本的 MySQL Shell 来获取该实用程序的全部功能。
-
输入预处理
从 MySQL Shell 8.0.22 开始,并行表导入实用程序可以从一个或多个数据文件中捕获列以进行输入预处理,其方式与语句相同
LOAD DATA
。可以放弃选定的数据,也可以转换数据并将其分配给目标表中的列。 -
Oracle 云基础设施对象存储导入
在 MySQL Shell 8.0.20 之前,数据必须从客户端主机可作为本地磁盘访问的位置导入。从 MySQL Shell 8.0.21 开始,还可以从选项指定的 Oracle Cloud Infrastructure 对象存储存储桶导入数据
osBucketName
。 -
多个数据文件导入
在 MySQL Shell 8.0.22 之前,并行表导入实用程序可以将单个输入数据文件导入到单个关系表中。从 MySQL Shell 8.0.23 开始,该实用程序还能够导入指定的文件列表,并且支持通配符模式匹配以包含某个位置的所有相关文件。单次运行该实用程序上传的多个文件将被放置到单个关系表中,因此,例如,从多个主机导出的数据可以合并到单个表中以用于分析。
-
压缩文件处理
在 MySQL Shell 8.0.21 之前,并行表导入实用程序仅接受未压缩的输入数据文件。该实用程序分析数据文件,将其分配为块,并将块上传到目标 MySQL 服务器中的关系表,在并行连接之间划分块。从 MySQL Shell 8.0.22 开始,该实用程序还可以接受以
gzip
(.gz
) 和zstd
(.zst)
格式压缩的数据文件,并根据文件扩展名自动检测格式。该实用程序以压缩格式从存储上传压缩文件,从而节省该部分传输的带宽。压缩文件无法分发为块,因此该实用程序使用其并行连接来解压缩多个文件并将其同时上传到目标服务器。如果只有一个输入数据文件,则压缩文件的上传只能使用单个连接。
MySQL Shell 的转储加载实用程序 util.loadDump()
旨在导入由 MySQL Shell 的实例转储实用程序 util.dumpInstance()
、模式转储实用程序 util.dumpSchemas()
和表转储实用程序 生成的分块输出文件和元数据的组合util.dumpTables()
。如果您想在将分块输出文件上传到目标服务器之前修改其中的任何数据,则可以将并行表导入实用程序与转储加载实用程序结合使用。为此,首先使用转储加载实用程序仅加载所选表的 DDL,以在目标服务器上创建该表。然后使用并行表导入实用程序从表的输出文件中捕获和转换数据,并将其导入到目标表。根据需要对要修改数据的任何其他表重复该过程。最后,使用转储加载实用程序加载您不想修改的任何剩余表的 DDL 和数据,不包括您已修改的表。有关该过程的说明,请参阅 修改转储数据。
要求和限制
并行表导入实用程序使用LOAD DATA LOCAL INFILE
语句上传数据,因此 local_infile
必须将系统变量设置为ON
在目标服务器上。您可以通过在运行并行表导入实用程序之前在 SQL 模式下发出以下语句来执行此操作:
SET GLOBAL local_infile = 1;