从云存储导入 CSV 文件到 TiDB Cloud 专属集群
本文档介绍如何将 CSV 文件从 Amazon Simple Storage Service(Amazon S3)、Google Cloud Storage(GCS)或 Azure Blob Storage 导入到 TiDB Cloud 专属集群。
限制
为确保数据一致性,TiDB Cloud 仅允许将 CSV 文件导入到空表中。若需将数据导入到已存在数据的表中,你可以按照本文档的步骤,先将数据导入到一个临时空表中,然后使用
INSERT SELECT语句将数据复制到目标表。如果 TiDB Cloud 专属集群已开启 changefeed 或 时间点恢复(Point-in-time Restore),则无法向该集群导入数据(Import Data 按钮会被禁用),因为当前数据导入功能使用的是 物理导入模式。在该模式下,导入的数据不会生成变更日志,因此 changefeed 和时间点恢复无法检测到导入的数据。
第 1 步:准备 CSV 文件
如果单个 CSV 文件大于 256 MiB,建议将其拆分为多个小文件,每个文件大小约为 256 MiB。
TiDB Cloud 支持导入非常大的 CSV 文件,但在多个约 256 MiB 的输入文件时性能最佳。这是因为 TiDB Cloud 可以并行处理多个文件,从而大幅提升导入速度。
按如下方式命名 CSV 文件:
- 如果一个 CSV 文件包含整个表的所有数据,文件名应采用
${db_name}.${table_name}.csv格式,导入时会映射到${db_name}.${table_name}表。 - 如果一个表的数据被拆分为多个 CSV 文件,应在这些文件名后添加数字后缀。例如,
${db_name}.${table_name}.000001.csv和${db_name}.${table_name}.000002.csv。数字后缀可以不连续,但必须递增,并且需要在数字前补零以保证所有后缀长度一致。 - TiDB Cloud 支持导入以下格式的压缩文件:
.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 文件不包含表结构信息,在将 CSV 文件数据导入 TiDB Cloud 之前,你需要通过以下任一方式创建表结构:
方式一:在 TiDB Cloud 中为你的源数据创建目标数据库和数据表。
方式二:在存放 CSV 文件的 Amazon S3、GCS 或 Azure Blob Storage 目录下,为你的源数据创建目标表结构文件,具体如下:
为你的源数据创建数据库结构文件。
如果你的 CSV 文件遵循 第 1 步 的命名规则,则数据库结构文件为可选项,否则为必需项。
每个数据库结构文件必须采用
${db_name}-schema-create.sql格式,并包含一个CREATE DATABASEDDL 语句。通过该文件,TiDB Cloud 会在导入数据时创建${db_name}数据库以存储你的数据。例如,如果你创建了一个包含如下语句的
mydb-scehma-create.sql文件,TiDB Cloud 会在导入数据时创建mydb数据库。CREATE DATABASE mydb;为你的源数据创建表结构文件。
如果你没有在存放 CSV 文件的 Amazon S3、GCS 或 Azure Blob Storage 目录下包含表结构文件,TiDB Cloud 在导入数据时不会为你创建相应的数据表。
每个表结构文件必须采用
${db_name}.${table_name}-schema.sql格式,并包含一个CREATE TABLEDDL 语句。通过该文件,TiDB Cloud 会在${db_name}数据库中创建${db_table}表以存储你的数据。例如,如果你创建了一个包含如下语句的
mydb.mytable-schema.sql文件,TiDB Cloud 会在导入数据时在mydb数据库中创建mytable表。CREATE TABLE mytable ( ID INT, REGION VARCHAR(20), COUNT INT );
第 3 步:配置跨账号访问
为了让 TiDB Cloud 能够访问 Amazon S3、GCS 或 Azure Blob Storage 中的 CSV 文件,请按以下方式操作:
如果你的 CSV 文件位于 Amazon S3,请配置 Amazon S3 访问权限。
你可以使用 AWS 访问密钥或 Role ARN 访问你的存储桶。配置完成后,请记录访问密钥(包括访问密钥 ID 和密钥)或 Role ARN 值,后续在 第 4 步 中会用到。
如果你的 CSV 文件位于 GCS,请配置 GCS 访问权限。
如果你的 CSV 文件位于 Azure Blob Storage,请配置 Azure Blob Storage 访问权限。
第 4 步:将 CSV 文件导入 TiDB Cloud
要将 CSV 文件导入 TiDB Cloud,请按照以下步骤操作:
打开目标集群的 Import 页面。
登录 TiDB Cloud 控制台,进入你的项目 Clusters 页面。
提示:
你可以通过左上角的下拉框切换组织、项目和集群。
点击目标集群名称进入概览页面,然后在左侧导航栏点击 Data > Import。
选择 Import data from Cloud Storage。
在 Import Data from Amazon S3 页面,填写以下信息:
- Included Schema Files:如果源文件夹包含目标表结构文件(如
${db_name}-schema-create.sql),请选择 Yes,否则选择 No。 - Data Format:选择 CSV。
- Edit CSV Configuration:如有需要,根据你的 CSV 文件配置选项。你可以设置分隔符和定界符字符,指定是否使用反斜杠转义字符,以及文件是否包含表头行。
- Folder URI:输入源文件夹的 URI,格式为
s3://[bucket_name]/[data_source_folder]/,路径必须以/结尾。例如,s3://mybucket/myfolder/。 - Bucket Access:你可以使用 AWS IAM role ARN 或 AWS 访问密钥访问你的存储桶。
- AWS Role ARN(推荐):输入 AWS IAM role ARN。如果你还没有为存储桶创建 IAM role,可以点击 Click here to create new one with AWS CloudFormation,按照屏幕提示使用提供的 AWS CloudFormation 模板创建。你也可以手动为存储桶创建 IAM role ARN。
- AWS Access Key:输入 AWS 访问密钥 ID 和 AWS 密钥。
- 两种方式的详细说明请参见 配置 Amazon S3 访问权限。
- Included Schema Files:如果源文件夹包含目标表结构文件(如
点击 Connect。
在 Destination 部分,选择目标数据库和数据表。
当导入多个文件时,你可以通过 Advanced Settings > Mapping Settings 自定义每个目标表与其对应 CSV 文件的映射。对于每个目标数据库和表:
- Target Database:从列表中选择对应的数据库名。
- Target Table:从列表中选择对应的表名。
- Source File URIs and Names:输入源文件的完整 URI,包括文件夹和文件名,确保格式为
s3://[bucket_name]/[data_source_folder]/[file_name].csv。你也可以使用通配符(?和*)匹配多个文件。例如:s3://mybucket/myfolder/my-data1.csv:myfolder下名为my-data1.csv的单个 CSV 文件将被导入到目标表。s3://mybucket/myfolder/my-data?.csv:myfolder下所有以my-data开头、后跟一个字符(如my-data1.csv和my-data2.csv)的 CSV 文件将被导入到同一个目标表。s3://mybucket/myfolder/my-data*.csv:myfolder下所有以my-data开头(如my-data10.csv和my-data100.csv)的 CSV 文件将被导入到同一个目标表。
点击 Start Import。
当导入进度显示 Completed 时,检查导入后的数据表。
打开目标集群的 Import 页面。
登录 TiDB Cloud 控制台,进入你的项目 Clusters 页面。
提示:
你可以通过左上角的下拉框切换组织、项目和集群。
点击目标集群名称进入概览页面,然后在左侧导航栏点击 Data > Import。
选择 Import data from Cloud Storage。
在 Import Data from Cloud Storage 页面,为源 CSV 文件填写以下信息:
- Included Schema Files:如果源文件夹包含目标表结构文件(如
${db_name}-schema-create.sql),请选择 Yes,否则选择 No。 - Data Format:选择 CSV。
- Edit CSV Configuration:如有需要,根据你的 CSV 文件配置选项。你可以设置分隔符和定界符字符,指定是否使用反斜杠转义字符,以及文件是否包含表头行。
- Folder URI:输入源文件夹的 URI,格式为
gs://[bucket_name]/[data_source_folder]/,路径必须以/结尾。例如,gs://sampledata/ingest/。 - Google Cloud Service Account ID:TiDB Cloud 会在此页面提供一个唯一的 Service Account ID(如
example-service-account@your-project.iam.gserviceaccount.com)。你必须在 Google Cloud 项目中为你的 GCS 存储桶授予该 Service Account ID 必需的 IAM 权限(如 "Storage Object Viewer")。更多信息请参见 配置 GCS 访问权限。
- Included Schema Files:如果源文件夹包含目标表结构文件(如
点击 Connect。
在 Destination 部分,选择目标数据库和数据表。
当导入多个文件时,你可以通过 Advanced Settings > Mapping Settings 自定义每个目标表与其对应 CSV 文件的映射。对于每个目标数据库和表:
- Target Database:从列表中选择对应的数据库名。
- Target Table:从列表中选择对应的表名。
- Source File URIs and Names:输入源文件的完整 URI,包括文件夹和文件名,确保格式为
gs://[bucket_name]/[data_source_folder]/[file_name].csv。你也可以使用通配符(?和*)匹配多个文件。例如:gs://mybucket/myfolder/my-data1.csv:myfolder下名为my-data1.csv的单个 CSV 文件将被导入到目标表。gs://mybucket/myfolder/my-data?.csv:myfolder下所有以my-data开头、后跟一个字符(如my-data1.csv和my-data2.csv)的 CSV 文件将被导入到同一个目标表。gs://mybucket/myfolder/my-data*.csv:myfolder下所有以my-data开头(如my-data10.csv和my-data100.csv)的 CSV 文件将被导入到同一个目标表。
点击 Start Import。
当导入进度显示 Completed 时,检查导入后的数据表。
打开目标集群的 Import 页面。
登录 TiDB Cloud 控制台,进入你的项目 Clusters 页面。
提示:
你可以通过左上角的下拉框切换组织、项目和集群。
点击目标集群名称进入概览页面,然后在左侧导航栏点击 Data > Import。
选择 Import data from Cloud Storage。
在 Import Data from Azure Blob Storage 页面,填写以下信息:
- Included Schema Files:如果源文件夹包含目标表结构文件(如
${db_name}-schema-create.sql),请选择 Yes,否则选择 No。 - Data Format:选择 CSV。
- Edit CSV Configuration:如有需要,根据你的 CSV 文件配置选项。你可以设置分隔符和定界符字符,指定是否使用反斜杠转义字符,以及文件是否包含表头行。
- Folder URI:输入存放源文件的 Azure Blob Storage URI,格式为
https://[account_name].blob.core.windows.net/[container_name]/[data_source_folder]/,路径必须以/结尾。例如,https://myaccount.blob.core.windows.net/mycontainer/myfolder/。 - SAS Token:输入账户 SAS token,以允许 TiDB Cloud 访问你 Azure Blob Storage 容器中的源文件。如果你还没有 SAS token,可以点击 Click here to create a new one with Azure ARM template,按照屏幕提示使用提供的 Azure ARM 模板创建。你也可以手动创建账户 SAS token。更多信息请参见 配置 Azure Blob Storage 访问权限。
- Included Schema Files:如果源文件夹包含目标表结构文件(如
点击 Connect。
在 Destination 部分,选择目标数据库和数据表。
当导入多个文件时,你可以通过 Advanced Settings > Mapping Settings 自定义每个目标表与其对应 CSV 文件的映射。对于每个目标数据库和表:
- Target Database:从列表中选择对应的数据库名。
- Target Table:从列表中选择对应的表名。
- Source File URIs and Names:输入源文件的完整 URI,包括文件夹和文件名,确保格式为
https://[account_name].blob.core.windows.net/[container_name]/[data_source_folder]/[file_name].csv。你也可以使用通配符(?和*)匹配多个文件。例如:https://myaccount.blob.core.windows.net/mycontainer/myfolder/my-data1.csv:myfolder下名为my-data1.csv的单个 CSV 文件将被导入到目标表。https://myaccount.blob.core.windows.net/mycontainer/myfolder/my-data?.csv:myfolder下所有以my-data开头、后跟一个字符(如my-data1.csv和my-data2.csv)的 CSV 文件将被导入到同一个目标表。https://myaccount.blob.core.windows.net/mycontainer/myfolder/my-data*.csv:myfolder下所有以my-data开头(如my-data10.csv和my-data100.csv)的 CSV 文件将被导入到同一个目标表。
点击 Start Import。
当导入进度显示 Completed 时,检查导入后的数据表。
当你运行导入任务时,如果检测到任何不支持或无效的类型转换,TiDB Cloud 会自动终止导入作业并报告导入错误。你可以在 Status 字段查看详细信息。
如果遇到导入错误,请按以下步骤操作:
- 删除部分导入的表。
- 检查表结构文件,如有错误请修正。
- 检查 CSV 文件中的数据类型。
- 重新尝试导入任务。
故障排查
解决数据导入过程中的警告
点击 Start Import 后,如果看到类似 can't find the corresponding source files 的警告信息,请通过提供正确的源文件、根据 数据导入命名规范 重命名现有文件,或使用 Advanced Settings 进行调整来解决。
解决后需要重新导入数据。
导入表中数据行为零
当导入进度显示 Completed 后,检查导入后的数据表。如果行数为零,说明没有数据文件匹配你输入的 Bucket URI。此时,请通过提供正确的源文件、根据 数据导入命名规范 重命名现有文件,或使用 Advanced Settings 进行调整来解决。之后请重新导入这些表。