从云存储导入 Apache Parquet 文件到 TiDB Cloud Starter 或 Essential
你可以将未压缩和 Snappy 压缩的 Apache Parquet 格式数据文件导入到 TiDB Cloud Starter 或 TiDB Cloud Essential。本文档介绍如何将 Parquet 文件从 Amazon Simple Storage Service(Amazon S3)、Google Cloud Storage(GCS)、Azure Blob Storage 或阿里云对象存储服务(OSS)导入到 TiDB Cloud Starter 或 TiDB Cloud Essential。
第 1 步:准备 Parquet 文件
如果某个 Parquet 文件大于 256 MB,建议将其拆分为多个较小的文件,每个文件大小约为 256 MB。
TiDB Cloud 支持导入非常大的 Parquet 文件,但在多个约 256 MB 的输入文件时性能最佳。这是因为 TiDB Cloud 可以并行处理多个文件,从而大幅提升导入速度。
按如下方式命名 Parquet 文件:
- 如果一个 Parquet 文件包含整个表的所有数据,文件名应采用
${db_name}.${table_name}.parquet格式,导入数据时会映射到${db_name}.${table_name}表。 - 如果一个表的数据被拆分到多个 Parquet 文件中,应为这些 Parquet 文件添加数字后缀。例如,
${db_name}.${table_name}.000001.parquet和${db_name}.${table_name}.000002.parquet。数字后缀可以不连续,但必须为正序。你还需要在数字前补零,以保证所有后缀长度一致。
- 如果一个 Parquet 文件包含整个表的所有数据,文件名应采用
第 2 步:创建目标表结构
由于 Parquet 文件不包含 schema 信息,在将 Parquet 文件中的数据导入 TiDB Cloud 之前,你需要通过以下任一方法创建表结构:
方法 1:在 TiDB Cloud 中为你的源数据创建目标数据库和表。
方法 2:在存放 Parquet 文件的 Amazon S3、GCS、Azure Blob Storage 或阿里云对象存储服务目录下,为你的源数据创建目标表结构文件,具体如下:
为你的源数据创建数据库结构文件。
如果你的 Parquet 文件遵循 第 1 步 的命名规则,则数据库结构文件对于数据导入是可选的。否则,数据库结构文件是必需的。
每个数据库结构文件必须采用
${db_name}-schema-create.sql格式,并包含一个CREATE DATABASEDDL 语句。通过该文件,TiDB Cloud 会在导入数据时创建${db_name}数据库以存储你的数据。例如,如果你创建了一个包含如下语句的
mydb-schema-create.sql文件,TiDB Cloud 会在导入数据时创建mydb数据库。CREATE DATABASE mydb;为你的源数据创建表结构文件。
如果你没有在存放 Parquet 文件的 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 或阿里云对象存储服务 bucket 中的 Parquet 文件,请执行以下操作之一:
如果你的 Parquet 文件位于 Amazon S3,请为你的集群 配置 Amazon S3 访问。
你可以使用 AWS 访问密钥或 Role ARN 访问你的 bucket。完成后,请记录访问密钥(包括访问密钥 ID 和密钥)或 Role ARN 值,后续在 第 4 步 中会用到。
如果你的 Parquet 文件位于 GCS,请为你的集群 配置 GCS 访问。
如果你的 Parquet 文件位于 Azure Blob Storage,请为你的集群 配置 Azure Blob Storage 访问。
如果你的 Parquet 文件位于阿里云对象存储服务(OSS),请为你的集群 配置阿里云对象存储服务(OSS)访问。
第 4 步:导入 Parquet 文件
要将 Parquet 文件导入到 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].parquet。例如:s3://sampledata/ingest/TableName.01.parquet。 - 导入多个文件时,输入源文件夹 URI,格式为
s3://[bucket_name]/[data_source_folder]/。例如:s3://sampledata/ingest/。
- 导入单个文件时,输入源文件 URI,格式为
- Credential:你可以使用 AWS Role ARN 或 AWS 访问密钥访问你的 bucket。详情参见 配置 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 自动将所有遵循 文件命名规范 的源文件映射到对应表,请保持该选项选中,并选择 Parquet 作为数据格式。
若需手动配置映射规则,将你的源 Parquet 文件与目标数据库和表关联,请取消选中该选项,然后填写以下字段:
Source:输入文件名模式,格式为
[file_name].parquet。例如:TableName.01.parquet。你也可以使用通配符匹配多个文件,仅支持*和?通配符。my-data?.parquet:匹配所有以my-data开头,后跟单个字符的 Parquet 文件,如my-data1.parquet和my-data2.parquet。my-data*.parquet:匹配所有以my-data开头的 Parquet 文件,如my-data-2023.parquet和my-data-final.parquet。
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].parquet。例如:[gcs|gs]://sampledata/ingest/TableName.01.parquet。 - 导入多个文件时,输入源文件夹 URI,格式为
[gcs|gs]://[bucket_name]/[data_source_folder]/。例如:[gcs|gs]://sampledata/ingest/。
- 导入单个文件时,输入源文件 URI,格式为
- Credential:你可以使用 GCS IAM Role Service Account 密钥访问你的 bucket。详情参见 配置 GCS 访问。
点击 Next。
在 Destination Mapping 部分,指定源文件与目标表的映射方式。
当 Source Files URI 指定为目录时,Use File naming conventions for automatic mapping 选项默认被选中。
若希望 TiDB Cloud 自动将所有遵循 文件命名规范 的源文件映射到对应表,请保持该选项选中,并选择 Parquet 作为数据格式。
若需手动配置映射规则,将你的源 Parquet 文件与目标数据库和表关联,请取消选中该选项,然后填写以下字段:
Source:输入文件名模式,格式为
[file_name].parquet。例如:TableName.01.parquet。你也可以使用通配符匹配多个文件,仅支持*和?通配符。my-data?.parquet:匹配所有以my-data开头,后跟单个字符的 Parquet 文件,如my-data1.parquet和my-data2.parquet。my-data*.parquet:匹配所有以my-data开头的 Parquet 文件,如my-data-2023.parquet和my-data-final.parquet。
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].parquet。例如:[azure|https]://sampledata/ingest/TableName.01.parquet。 - 导入多个文件时,输入源文件夹 URI,格式为
[azure|https]://[bucket_name]/[data_source_folder]/。例如:[azure|https]://sampledata/ingest/。
- 导入单个文件时,输入源文件 URI,格式为
- Credential:你可以使用共享访问签名(SAS)令牌访问你的 bucket。详情参见 配置 Azure Blob Storage 访问。
点击 Next。
在 Destination Mapping 部分,指定源文件与目标表的映射方式。
当 Source Files URI 指定为目录时,Use File naming conventions for automatic mapping 选项默认被选中。
若希望 TiDB Cloud 自动将所有遵循 文件命名规范 的源文件映射到对应表,请保持该选项选中,并选择 Parquet 作为数据格式。
若需手动配置映射规则,将你的源 Parquet 文件与目标数据库和表关联,请取消选中该选项,然后填写以下字段:
Source:输入文件名模式,格式为
[file_name].parquet。例如:TableName.01.parquet。你也可以使用通配符匹配多个文件,仅支持*和?通配符。my-data?.parquet:匹配所有以my-data开头,后跟单个字符的 Parquet 文件,如my-data1.parquet和my-data2.parquet。my-data*.parquet:匹配所有以my-data开头的 Parquet 文件,如my-data-2023.parquet和my-data-final.parquet。
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].parquet。例如:oss://sampledata/ingest/TableName.01.parquet。 - 导入多个文件时,输入源文件夹 URI,格式为
oss://[bucket_name]/[data_source_folder]/。例如:oss://sampledata/ingest/。
- 导入单个文件时,输入源文件 URI,格式为
- Credential:你可以使用 AccessKey 对访问你的 bucket。详情参见 配置阿里云对象存储服务(OSS)访问。
点击 Next。
在 Destination Mapping 部分,指定源文件与目标表的映射方式。
当 Source Files URI 指定为目录时,Use File naming conventions for automatic mapping 选项默认被选中。
若希望 TiDB Cloud 自动将所有遵循 文件命名规范 的源文件映射到对应表,请保持该选项选中,并选择 Parquet 作为数据格式。
若需手动配置映射规则,将你的源 Parquet 文件与目标数据库和表关联,请取消选中该选项,然后填写以下字段:
Source:输入文件名模式,格式为
[file_name].parquet。例如:TableName.01.parquet。你也可以使用通配符匹配多个文件,仅支持*和?通配符。my-data?.parquet:匹配所有以my-data开头,后跟单个字符的 Parquet 文件,如my-data1.parquet和my-data2.parquet。my-data*.parquet:匹配所有以my-data开头的 Parquet 文件,如my-data-2023.parquet和my-data-final.parquet。
Target Database 和 Target Table:选择要导入数据的目标数据库和表。
点击 Next。TiDB Cloud 会相应扫描源文件。
查看扫描结果,检查找到的数据文件及其对应的目标表,然后点击 Start Import。
当导入进度显示 Completed 时,检查已导入的表。
当你运行导入任务时,如果检测到任何不支持或无效的转换,TiDB Cloud 会自动终止导入作业并报告导入错误。
如果你遇到导入错误,请按以下步骤操作:
删除部分导入的表。
检查表结构文件。如果有错误,请修正表结构文件。
检查 Parquet 文件中的数据类型。
如果 Parquet 文件包含任何不支持的数据类型(如
NEST STRUCT、ARRAY或MAP),你需要使用 支持的数据类型(如STRING)重新生成 Parquet 文件。重新尝试导入任务。
支持的数据类型
下表列出了可导入到 TiDB Cloud Starter 和 TiDB Cloud Essential 的 Parquet 支持数据类型。
故障排查
解决数据导入过程中的警告
点击 Start Import 后,如果你看到类似 can't find the corresponding source files 的警告信息,请通过提供正确的源文件、按照 数据导入命名规范重命名现有文件,或使用 Advanced Settings 进行调整来解决。
解决这些问题后,你需要重新导入数据。
导入表中行数为零
当导入进度显示 Completed 后,检查已导入的表。如果行数为零,说明没有数据文件匹配你输入的 Bucket URI。此时,请通过提供正确的源文件、按照 数据导入命名规范重命名现有文件,或使用 Advanced Settings 进行调整来解决。之后,重新导入这些表。