从云存储导入 CSV 文件到 TiDB Cloud Starter 或 Essential
本文档介绍如何将 CSV 文件从 Amazon Simple Storage Service(Amazon S3)、Google Cloud Storage(GCS)、Azure Blob Storage 或阿里云对象存储服务(OSS)导入到 TiDB Cloud Starter 或 TiDB Cloud Essential。
限制
- 为保证数据一致性,TiDB Cloud 仅允许将 CSV 文件导入到空表中。若需将数据导入到已存在且包含数据的表中,你可以按照本文档的方式先将数据导入到一个临时空表,然后使用
INSERT SELECT语句将数据复制到目标表。
第 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 之前,你需要通过以下任一方式创建表结构:
方法 1:在 TiDB Cloud 中为你的源数据创建目标数据库和数据表。
方法 2:在存放 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 访问权限。
如果你的 CSV 文件位于阿里云对象存储服务(OSS),请为你的集群 配置阿里云对象存储服务(OSS)访问权限。
第 4 步:导入 CSV 文件
要将 CSV 文件导入到 TiDB Cloud Starter 或 TiDB Cloud Essential,请按以下步骤操作:
打开目标集群的 Import 页面。
登录 TiDB Cloud 控制台,进入你的项目 Clusters 页面。
点击目标集群名称进入概览页面,然后在左侧导航栏点击 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 访问密钥访问你的桶。详情请参见 配置 Amazon S3 访问权限。
- AWS Role ARN:输入 AWS Role ARN 值。
- AWS Access Key:输入 AWS 访问密钥 ID 和 AWS 密钥。
点击 Next。
在 Destination Mapping 部分,指定源文件与目标表的映射方式。
当 Source Files URI 指定为目录时,默认勾选 Use File naming conventions for automatic mapping 选项。
若希望 TiDB Cloud 自动将所有遵循 文件命名规范 的源文件映射到对应表,请保持该选项勾选,并选择 CSV 作为数据格式。
若需手动配置映射规则,将你的源 CSV 文件与目标数据库和表关联,请取消勾选该选项,并填写以下字段:
Source:输入文件名模式,格式为
[file_name].csv。例如:TableName.01.csv。你也可以使用通配符匹配多个文件,仅支持*和?通配符。my-data?.csv:匹配所有以my-data开头,后跟单个字符的 CSV 文件,如my-data1.csv和my-data2.csv。my-data*.csv:匹配所有以my-data开头的 CSV 文件,如my-data-2023.csv和my-data-final.csv。
Target Database 和 Target Table:选择要导入数据的目标数据库和表。
点击 Next。TiDB Cloud 会相应扫描源文件。
审核扫描结果,检查找到的数据文件及其对应的目标表,然后点击 Start Import。
当导入进度显示 Completed 时,检查已导入的数据表。
打开目标集群的 Import 页面。
登录 TiDB Cloud 控制台,进入你的项目 Clusters 页面。
点击目标集群名称进入概览页面,然后在左侧导航栏点击 Data > Import。
点击 Import data from Cloud Storage。
在 Import Data from Cloud Storage 页面,填写以下信息:
- Storage Provider:选择 Google Cloud Storage。
- Source Files URI:
- 导入单个文件时,输入源文件 URI,格式为
[gcs|gs]://[bucket_name]/[data_source_folder]/[file_name].csv。例如:[gcs|gs]://sampledata/ingest/TableName.01.csv。 - 导入多个文件时,输入源文件夹 URI,格式为
[gcs|gs]://[bucket_name]/[data_source_folder]/。例如:[gcs|gs]://sampledata/ingest/。
- 导入单个文件时,输入源文件 URI,格式为
- Credential:你可以使用 GCS IAM Role Service Account key 访问你的桶。详情请参见 配置 GCS 访问权限。
点击 Next。
在 Destination Mapping 部分,指定源文件与目标表的映射方式。
当 Source Files URI 指定为目录时,默认勾选 Use File naming conventions for automatic mapping 选项。
若希望 TiDB Cloud 自动将所有遵循 文件命名规范 的源文件映射到对应表,请保持该选项勾选,并选择 CSV 作为数据格式。
若需手动配置映射规则,将你的源 CSV 文件与目标数据库和表关联,请取消勾选该选项,并填写以下字段:
Source:输入文件名模式,格式为
[file_name].csv。例如:TableName.01.csv。你也可以使用通配符匹配多个文件,仅支持*和?通配符。my-data?.csv:匹配所有以my-data开头,后跟单个字符的 CSV 文件,如my-data1.csv和my-data2.csv。my-data*.csv:匹配所有以my-data开头的 CSV 文件,如my-data-2023.csv和my-data-final.csv。
Target Database 和 Target Table:选择要导入数据的目标数据库和表。
点击 Next。TiDB Cloud 会相应扫描源文件。
审核扫描结果,检查找到的数据文件及其对应的目标表,然后点击 Start Import。
当导入进度显示 Completed 时,检查已导入的数据表。
打开目标集群的 Import 页面。
登录 TiDB Cloud 控制台,进入你的项目 Clusters 页面。
点击目标集群名称进入概览页面,然后在左侧导航栏点击 Data > Import。
点击 Import data from Cloud Storage。
在 Import Data from Cloud Storage 页面,填写以下信息:
- Storage Provider:选择 Azure Blob Storage。
- Source Files URI:
- 导入单个文件时,输入源文件 URI,格式为
[azure|https]://[bucket_name]/[data_source_folder]/[file_name].csv。例如:[azure|https]://sampledata/ingest/TableName.01.csv。 - 导入多个文件时,输入源文件夹 URI,格式为
[azure|https]://[bucket_name]/[data_source_folder]/。例如:[azure|https]://sampledata/ingest/。
- 导入单个文件时,输入源文件 URI,格式为
- Credential:你可以使用共享访问签名(SAS)令牌访问你的桶。详情请参见 配置 Azure Blob Storage 访问权限。
点击 Next。
在 Destination Mapping 部分,指定源文件与目标表的映射方式。
当 Source Files URI 指定为目录时,默认勾选 Use File naming conventions for automatic mapping 选项。
若希望 TiDB Cloud 自动将所有遵循 文件命名规范 的源文件映射到对应表,请保持该选项勾选,并选择 CSV 作为数据格式。
若需手动配置映射规则,将你的源 CSV 文件与目标数据库和表关联,请取消勾选该选项,并填写以下字段:
Source:输入文件名模式,格式为
[file_name].csv。例如:TableName.01.csv。你也可以使用通配符匹配多个文件,仅支持*和?通配符。my-data?.csv:匹配所有以my-data开头,后跟单个字符的 CSV 文件,如my-data1.csv和my-data2.csv。my-data*.csv:匹配所有以my-data开头的 CSV 文件,如my-data-2023.csv和my-data-final.csv。
Target Database 和 Target Table:选择要导入数据的目标数据库和表。
点击 Next。TiDB Cloud 会相应扫描源文件。
审核扫描结果,检查找到的数据文件及其对应的目标表,然后点击 Start Import。
当导入进度显示 Completed 时,检查已导入的数据表。
打开目标集群的 Import 页面。
登录 TiDB Cloud 控制台,进入你的项目 Clusters 页面。
点击目标集群名称进入概览页面,然后在左侧导航栏点击 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 对访问你的桶。详情请参见 配置阿里云对象存储服务(OSS)访问权限。
点击 Next。
在 Destination Mapping 部分,指定源文件与目标表的映射方式。
当 Source Files URI 指定为目录时,默认勾选 Use File naming conventions for automatic mapping 选项。
若希望 TiDB Cloud 自动将所有遵循 文件命名规范 的源文件映射到对应表,请保持该选项勾选,并选择 CSV 作为数据格式。
若需手动配置映射规则,将你的源 CSV 文件与目标数据库和表关联,请取消勾选该选项,并填写以下字段:
Source:输入文件名模式,格式为
[file_name].csv。例如:TableName.01.csv。你也可以使用通配符匹配多个文件,仅支持*和?通配符。my-data?.csv:匹配所有以my-data开头,后跟单个字符的 CSV 文件,如my-data1.csv和my-data2.csv。my-data*.csv:匹配所有以my-data开头的 CSV 文件,如my-data-2023.csv和my-data-final.csv。
Target Database 和 Target Table:选择要导入数据的目标数据库和表。
点击 Next。TiDB Cloud 会相应扫描源文件。
审核扫描结果,检查找到的数据文件及其对应的目标表,然后点击 Start Import。
当导入进度显示 Completed 时,检查已导入的数据表。
当你运行导入任务时,如果检测到任何不支持或无效的转换,TiDB Cloud 会自动终止导入作业并报告导入错误。
如果你遇到导入错误,请按以下步骤操作:
- 删除部分导入的表。
- 检查表结构文件,如有错误请修正。
- 检查 CSV 文件中的数据类型。
- 重新尝试导入任务。
故障排查
解决数据导入过程中的警告
点击 Start Import 后,如果你看到类似 can't find the corresponding source files 的警告信息,请通过提供正确的源文件、根据 数据导入命名规范 重命名现有文件,或使用 Advanced Settings 进行调整来解决。
解决这些问题后,你需要重新导入数据。
导入表中行数为零
当导入进度显示 Completed 后,检查已导入的数据表。如果行数为零,说明没有数据文件匹配你输入的 Bucket URI。此时,请通过提供正确的源文件、根据 数据导入命名规范 重命名现有文件,或使用 Advanced Settings 进行调整来解决。之后,重新导入这些表。