从云存储将 CSV 文件导入到 TiDB Cloud Premium
本文档介绍如何将 Amazon Simple Storage Service (Amazon S3) 或 Alibaba Cloud Object Storage Service (OSS) 中的 CSV 文件导入到 TiDB Cloud Premium 实例。
提示:
- 对于 TiDB Cloud Starter 或 Essential,请参见 从云存储将 CSV 文件导入到 TiDB Cloud Starter 或 Essential。
- 对于 TiDB Cloud Dedicated,请参见 从云存储将 CSV 文件导入到 TiDB Cloud Dedicated。
限制
为确保数据一致性,TiDB Cloud Premium 仅允许将 CSV 文件导入到空表中。若要将数据导入到已包含数据的现有表中,你可以按照本文档先将数据导入到一个临时空表中,然后使用 INSERT SELECT 语句将数据复制到目标现有表。
步骤 1. 准备 CSV 文件
如果某个 CSV 文件大于 256 MiB,建议将其拆分为多个较小的文件,每个文件大小约为 256 MiB。
TiDB Cloud Premium 支持导入非常大的 CSV 文件,但在使用多个大小约为 256 MiB 的输入文件时性能最佳。这是因为 TiDB Cloud Premium 可以并行处理多个文件,从而显著提升导入速度。
按如下方式命名 CSV 文件:
- 如果一个 CSV 文件包含整张表的全部数据,请将文件命名为
${db_name}.${table_name}.csv格式。导入数据时,该文件会映射到${db_name}.${table_name}表。 - 如果一张表的数据被拆分到多个 CSV 文件中,请为这些 CSV 文件追加数字后缀。例如,
${db_name}.${table_name}.000001.csv和${db_name}.${table_name}.000002.csv。数字后缀可以不连续,但必须按升序排列。你还需要在数字前补零,以确保所有后缀长度一致。 - TiDB Cloud Premium 支持导入以下格式的压缩文件:
.gzip、.gz、.zstd、.zst和.snappy。如果你想导入压缩的 CSV 文件,请将文件命名为${db_name}.${table_name}.${suffix}.csv.${compress}格式,其中${suffix}是可选的,可以是任意整数,例如 '000001'。例如,如果你想将trips.000001.csv.gz文件导入到bikeshare.trips表中,则需要将该文件重命名为bikeshare.trips.000001.csv.gz。
- 如果一个 CSV 文件包含整张表的全部数据,请将文件命名为
步骤 2. 创建目标表结构
由于 CSV 文件不包含 schema 信息,因此在将 CSV 文件中的数据导入到 TiDB Cloud Premium 之前,你需要使用以下任一方法创建表结构:
方法 1:在 TiDB Cloud Premium 中,为你的源数据创建目标数据库和表。
方法 2:在存放 CSV 文件的 Amazon S3 或 Alibaba Cloud Object Storage Service (OSS) 目录中,按如下方式为你的源数据创建目标表结构文件:
为你的源数据创建数据库结构文件。
如果你的 CSV 文件遵循步骤 1中的命名规则,则数据库结构文件对于数据导入是可选的。否则,数据库结构文件是必需的。
每个数据库结构文件必须采用
${db_name}-schema-create.sql格式,并包含一条CREATE DATABASEDDL 语句。导入数据时,借助此文件,TiDB Cloud Premium 将创建${db_name}数据库来存储你的数据。例如,如果你创建一个
mydb-schema-create.sql文件,并包含以下语句,则在导入数据时,TiDB Cloud Premium 将创建mydb数据库。CREATE DATABASE mydb;为你的源数据创建表结构文件。
如果你没有在存放 CSV 文件的 Amazon S3 或 Alibaba Cloud Object Storage Service 目录中包含表结构文件,TiDB Cloud Premium 在导入数据时将不会为你创建相应的表。
每个表结构文件必须采用
${db_name}.${table_name}-schema.sql格式,并包含一条CREATE TABLEDDL 语句。导入数据时,借助此文件,TiDB Cloud Premium 将在${db_name}数据库中创建${table_name}表。例如,如果你创建一个
mydb.mytable-schema.sql文件,并包含以下语句,则在导入数据时,TiDB Cloud Premium 将在mydb数据库中创建mytable表。CREATE TABLE mytable ( ID INT, REGION VARCHAR(20), COUNT INT );
步骤 3. 配置跨账号访问
要允许 TiDB Cloud Premium 访问 Amazon S3 或 Alibaba Cloud Object Storage Service (OSS) 中的 CSV 文件,请执行以下任一操作:
如果你的 CSV 文件位于 Amazon S3,请为你的 TiDB Cloud Premium 实例配置 Amazon S3 访问。
你可以使用 AWS access key 或 Role ARN 来访问你的 bucket。完成后,请记下 access key(包括 access key ID 和 secret access key)或 Role ARN 的值,因为你将在步骤 4中用到它。
如果你的 CSV 文件位于 Alibaba Cloud Object Storage Service (OSS),请为你的 TiDB Cloud Premium 实例配置 Alibaba Cloud Object Storage Service (OSS) 访问。
第 4 步:导入 CSV 文件
要将 CSV 文件导入到 TiDB Cloud Premium,请执行以下步骤:
为目标 TiDB Cloud Premium 实例打开 Import 页面。
登录 TiDB Cloud console,然后进入 My TiDB 页面。
点击目标 TiDB Cloud Premium 实例的名称进入其概览页面,然后在左侧导航栏中点击 Data > Import。
点击 Import data from Cloud Storage。
在 Import Data from Cloud Storage 页面中,提供以下信息:
- Storage Provider:选择 Amazon S3。
- Source Files URI:
- 导入单个文件时,按以下格式输入源文件 URI:
s3://[bucket_name]/[data_source_folder]/[file_name].csv。例如,s3://sampledata/ingest/TableName.01.csv。 - 导入多个文件时,按以下格式输入源文件夹 URI:
s3://[bucket_name]/[data_source_folder]/。例如,s3://sampledata/ingest/。
- 导入单个文件时,按以下格式输入源文件 URI:
- Credential:你可以使用 AWS Role ARN 或 AWS access key 访问 bucket。更多信息,请参见 Configure Amazon S3 access。
- AWS Role ARN:输入 AWS Role ARN 值。如果你需要创建新角色,点击 Click here to create a new one with AWS CloudFormation,然后按照引导步骤启动提供的模板、确认 IAM 警告、创建 stack,并将生成的 ARN 复制回 TiDB Cloud Premium。
- AWS Access Key:输入 AWS access key ID 和 AWS secret access key。
- Test Bucket Access:在凭证配置完成后点击此按钮,以确认 TiDB Cloud Premium 可以访问该 bucket。
- Target Connection:提供将用于执行导入的 TiDB 用户名和密码。你也可以点击 Test Connection 来验证凭证。
点击 Next。
在 Source Files Mapping 部分,TiDB Cloud Premium 会扫描 bucket,并建议源文件与目标表之间的映射关系。
当在 Source Files URI 中指定的是目录时,默认会选中 Use File naming conventions for automatic mapping 选项。
保持启用自动映射,以将 file naming conventions 应用于源文件和目标表。数据格式保持选择 CSV。
Advanced options:展开面板以查看
Ignore compatibility checks (advanced)开关。除非你有意绕过 schema 兼容性校验,否则请保持其禁用状态。
TiDB Cloud Premium 会自动扫描源路径。检查扫描结果,确认找到的数据文件及其对应的目标表,然后点击 Start Import。
当导入进度显示为 Completed 时,检查已导入的表。
为目标 TiDB Cloud Premium 实例打开 Import 页面。
登录 TiDB Cloud console,然后进入 My TiDB 页面。
点击目标 TiDB Cloud Premium 实例的名称进入其概览页面,然后在左侧导航栏中点击 Data > Import。
点击 Import data from Cloud Storage。
在 Import Data from Cloud Storage 页面中,提供以下信息:
- Storage Provider:选择 Alibaba Cloud OSS。
- Source Files URI:
- 导入单个文件时,按以下格式输入源文件 URI:
oss://[bucket_name]/[data_source_folder]/[file_name].csv。例如,oss://sampledata/ingest/TableName.01.csv。 - 导入多个文件时,按以下格式输入源文件夹 URI:
oss://[bucket_name]/[data_source_folder]/。例如,oss://sampledata/ingest/。
- 导入单个文件时,按以下格式输入源文件 URI:
- Credential:你可以使用 AccessKey 对访问 bucket。更多信息,请参见 Configure Alibaba Cloud Object Storage Service (OSS) access。
- Test Bucket Access:在凭证配置完成后点击此按钮,以确认 TiDB Cloud Premium 可以访问该 bucket。
- Target Connection:提供将用于执行导入的 TiDB 用户名和密码。你也可以点击 Test Connection 来验证凭证。
点击 Next。
在 Source Files Mapping 部分,TiDB Cloud Premium 会扫描 bucket,并建议源文件与目标表之间的映射关系。
当在 Source Files URI 中指定的是目录时,默认会选中 Use File naming conventions for automatic mapping 选项。
保持启用自动映射,以将 file naming conventions 应用于源文件和目标表。数据格式保持选择 CSV。
Advanced options:展开面板以查看
Ignore compatibility checks (advanced)开关。除非你有意绕过 schema 兼容性校验,否则请保持其禁用状态。
TiDB Cloud Premium 会自动扫描源路径。检查扫描结果,确认找到的数据文件及其对应的目标表,然后点击 Start Import。
当导入进度显示为 Completed 时,检查已导入的表。
运行导入任务时,如果检测到任何不受支持或无效的转换,TiDB Cloud Premium 会自动终止导入作业并报告导入错误。
如果你遇到导入错误,请执行以下操作:
- 删除部分已导入的表。
- 检查表 schema 文件。如果存在任何错误,请更正该表 schema 文件。
- 检查 CSV 文件中的数据类型。
- 再次尝试导入任务。
故障排查
解决数据导入期间的警告
点击 Start Import 后,如果你看到类似 can't find the corresponding source files 的警告信息,请通过提供正确的源文件、按照 Naming Conventions for Data Import 重命名现有文件,或使用 Advanced Settings 进行修改来解决此问题。
解决这些问题后,你需要重新导入数据。
导入后的表中行数为零
当导入进度显示为 Completed 后,请检查已导入的表。如果行数为零,表示没有数据文件与您输入的 Bucket URI 匹配。在这种情况下,请通过提供正确的源文件、按照 Naming Conventions for Data Import 重命名现有文件,或使用 Advanced Settings 进行修改来解决此问题。之后,重新导入这些表。