对象存储 TOS(Tinder Object Storage)是火山引擎提供的海量、安全、低成本、易用、高可靠、高可用的分布式云存储服务。DataSail 中 TOS 数据源为您提供读取和写入 TOS 数据的双向通道能力,实现不同数据源与 TOS 进行数据传输。本文将为您介绍 DataSail 的 TOS 数据同步的能力支持情况。
已完成 TOS 数据源配置操作,详见配置 TOS 数据源。
TOS 数据源测试连通性成功后,进入数据开发界面,开始新建 TOS 相关通道任务。新建任务方式详见离线数据同步。
任务创建成功后,即可根据实际场景,配置 TOS 离线读、TOS 离线写或 TOS 流式写等通道任务。
数据来源选择 TOS,并完成以下相关参数配置。其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数。
| | | \
| 参数 | 说明 |
|---|---|
| *数据源类型 | 下拉选择 TOS 数据源类型。 |
| *数据源名称 | 已在数据源管理中注册成功的 TOS 数据源,下拉可选。 |
| 若还未建立相应数据源,可单击数据源管理按钮,前往创建 TOS 数据源。 | |
| *文件路径 | 填写需要采集的 TOS 数据文件所在路径,可在 TOS 中查看。 |
| :::tip | |
| * 路径中包括 ^ , * , ? , [ , ] , { , } , ( , ) , \ 等符号,则会被判定为正则形式的路径。 | |
| * 文件路径填写说明: | |
* 不需要包含 Bucket 名称,且不用 / 开头,直接填写 Bucket 名称后的文件路径。如文件所在的完整路径为:tos://bucket-test/data/csv/zip/data1.zip,则您在 TOS 集成任务配置时,文件路径只需要填写 data/csv/zip/data1.zip 即可。 |
|
| * 可配置目录,可配置具体的文件名称。 | |
* 若配置目录,仅读取当前目录下的子文件,但不递归子目录。例如 data/csv/,若该目录下有子目录 data1、data2、data3,则只读取 data/csv/ 目录下的子文件,不递归子目录。 |
|
| * 若配置具体的文件,不支持 “.” 或 “_” 开头的文件名。 | |
* 支持 “*” 通配符形式配置文件路径信息,如data/csv/*.csv。 |
|
* 支持配置日期正则参数形式,如 bigdata/t_user/${date}。 |
|
| * TOS 读取 Proton 桶类型,目前以白名单形式进行控制,您可通过提工单方式,联系我们进行开通。 | |
| ::: | |
| *数据类型 | 支持选择 json、pb、parquet、csv、txt 等几种数据类型: |
| * Parquet 类型:字段 Schema,可通过同名映射的方式配置。 | |
| * Json 类型: | |
| 数据类型为 json 时,需添加示例数据,以 json 字符串形式描述 schema,需填写完整的数据。例如:{"uid":123, "ut":12, "user_name": "xxx"}。 若没有示例数据,则 Schema 信息不准确,您需手动添加 Schema 字段映射配置。 | |
| * csv、txt 类型:需添加分隔符、原始字符集、导入起始行参数: | |
| * 分隔符:选择原始文件的分隔符,如“,”、“Tab”、“;”等,下拉可选,同时也支持自定义分隔符的方式指定。 | |
| * 原始字符集:需选择原始文件的字符集,支持选择 GBK、UTF-8 格式。 | |
| * 导入起始行:无表头请填0,有表头请填1。 | |
| * PB 类型:需填写 Pb 类定义和 Pb 类名信息 | |
| * Pb 类定义: | |
| 输入 Pb 类定义文件信息,只支持一个 Pb 类定义,填写示例如下: | |
| ```powershell | |
| syntax = "proto2"; | |
| package abase_test; | |
| message AbaseTest { | |
| required int64 first_id = 1; | |
| required int64 latest_id = 2; | |
| } | |
| ``` | |
| * Pb 类名:Pb 类名需填写为 message 名称,例如上方定义的 Pb 类,对应 PB Class 为 AbaseTest。 |

数据目标端选择 TOS,并完成以下相关参数配置。其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数。
| | | \
| 参数 | 说明 |
|---|---|
| *目标类型 | 下拉选择 TOS 数据源类型。 |
| *数据源名称 | 已在数据源管理中注册成功的 TOS 数据源,下拉可选。 |
| 若还未建立相应数据源,可单击数据源管理按钮,前往创建 TOS 数据源。 | |
| *文件路径 | 填写需要写入的 TOS 数据文件所在路径,支持填写日期变量形式,如 ${date},具体路径可在 TOS 中查看。 |
| :::tip | |
| 文件路径填写说明: | |
| * 不需要包含 Bucket 名称,且不用 / 开头; | |
| * 支持配置日期正则参数形式,如 bigdata/t_user/${date} | |
| * TOS 写入 Proton 桶类型,目前以白名单形式进行控制,您可通过提工单方式,联系我们进行开通。 | |
| ::: | |
| *文件名前缀 | 输入 TOS 目标文件名的前缀信息,如填写 tos_writer,则生成的文件名会以 tos_writer 开头。 |
| 文件名自动生成规则如下: | |
| filePrefix_{jobId}{subTaskId}{file_count}_{generate_timestamp}.{fileFormat}.{compression_suffix} | |
| * filePrefix:即您在输入框中输入的前缀信息; | |
| * jobId:当前任务 ID,可在调度设置 > 基本信息中查看; | |
| * subTaskId:并发 Task 的序号; | |
| * file_count:当前该 Task 写的第几个文件; | |
| * generate_timestamp:文件创建时间; | |
| * fileFormat:文件格式,即文本类型中选择的 csv、json、parquet、orc 等类型; | |
| * compresion_suffix:文件压缩格式,如 .gz、.snappy 等格式,其中压缩格式为 None 时,文件名中显示为空。 | |
| *文件名称冲突 | 依据实际业务场景,下拉选择数据写入时,针对文件名称冲突状况下的任务处理形式,支持以下三种处理方式: |
| * 覆盖(替换原有文件): 默认为覆盖方式,先删除原有数据再写入新数据; | |
| * 适用场景:每次全量同步,目标路径下只保留最新数据。 | |
| * 追加(保留原有文件): 直接写入新数据; | |
| * 适用场景:增量同步场景,历史文件需要保留。 | |
| * 冲突报错:文件名称冲突时,任务会提示异常并退出; | |
| * 适用场景:严格模式,防止意外覆盖重要数据。 | |
| *文本类型 | 支持选择 json、parquet、csv、orc 等几种数据类型: |
| * json、parquet、orc 类型:无需填写其他配置信息。 | |
| * csv 类型:需填写是否配置表头、分隔符信息: | |
| * 是否配置表头:根据实际情况,选择产出文件是否需要配置表头,若选择是,则默认将字段映射的所有字段配置为表头。 | |
| * 分隔符:选择原始文件的分隔符,如“,”、“Tab”、“;”等,下拉可选,同时也支持自定义分隔符的方式指定。 | |
| *压缩格式 | 选择写入 TOS 中数据文件的压缩格式,支持选择 None、Snappy、Lz4、Gzip、Zstd 等压缩格式。 |

流式集成任务实时写入 TOS 数据源,数据目标类型选择 TOS,并完成以下相关参数配置:
其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数。
| | | \
| 参数 | 说明 |
|---|---|
| *目标类型 | 下拉选择 TOS 数据源类型。 |
| *数据源名称 | 已在数据源管理中注册成功的 TOS 数据源,下拉可选。 |
| 若还未建立相应数据源,可单击数据源管理按钮,前往创建 TOS 数据源。 | |
| *TOS 保存地址 | 填写需要写入数据的 TOS 存储路径信息。 |
| :::tip | |
| 文件路径填写说明: | |
| * 不需要包含 Bucket 名称,且不用 / 开头; | |
| * 支持配置日期正则参数形式,如 bigdata/t_user/${date} | |
| ::: |
可视化离线读 TOS,数据来源和目标端配置完成后,需要指定来源和目标端的字段映射关系,根据字段映射关系,数据集成任务将源端字段中的数据,写入到目标端对应字段中。
字段映射支持选择基础模式和转换模式配置映射:
:::warning
基础模式和转换模式不支持互相切换,模式切换后,将清空现有字段映射中所有配置信息,一旦切换无法撤销,需谨慎操作。
:::
转换模式:
字段映射支持数据转换,您可根据实际业务需求进行配置,将源端采集的数据,事先通过数据转换后,以指定格式输入到目标端数据库中。
转换模式详细操作说明详见4.1 转换模式
在转换模式中,你可依次配置:来源节点、数据转换、目标节点信息:
| | | \
| 配置节点 | 说明 |
|---|---|
| 来源节点 | 配置数据来源 Source 节点信息: |
| * 节点名称:自定义输入来源节点名称信息,只允许由数字、字母、下划线、-和.组成;且长度不能超过10。 | |
| * 数据字段:通过自动添加、手动添加等方式添加数据来源字段信息。 | |
| 配置完成后,单击确认按钮,完成来源节点配置。 | |
| 数据转换 | 单击数据转换右侧添加按钮,选择 SQL 转换方式,配置转换信息和规则: |
| * 节点名称:自定义输入来源节点名称信息,只允许由数字、字母、下划线、-和.组成;且长度不能超过10。 | |
| * SQL 脚本:输入 SQL 脚本转换规则,目前仅支持添加一个转换的 SQL 语句,且不能包括 “;”。 | |
| 配置完成后,单击确认按钮,完成数据转换节点配置。SQL 脚本示例详见4.1.2 添加转换节点。 | |
| 目标节点 | 配置目标节点 Sink 信息: |
| * 节点名称:自定义输入来源节点名称信息,只允许由数字、字母、下划线、-和.组成;且长度不能超过10。 | |
| * 数据字段:通过自动添加、手动添加等方式添加数据目标字段信息。 | |
| 配置完成后,单击确认按钮,完成目标节点配置。 |
基础模式:
基础模式您可通过以下四种方式操作字段映射关系:
:::tip
当上游为 BMQ、RocketMQ、Kafka 和 DataSail 这四种消息队列的数据源时,写入 TOS 不需要配置 column 字段。
:::
job.reader. 前缀,写参数需加上 job.writer. 前缀。reader.parameter 下,写参数请配置到 writer.parameter 下,直接输入参数名称和参数值。
TOS 数据源常用的批式读高级参数整理如下:
| | | | \
| 参数名 | 描述 | 默认值 |
|---|---|---|
| job.reader.enable_success_file_check | 若任务中需要检查前置 Success 文件是否就绪,可添加该高级参数。设置为 true 时,表示开启 Success 文件检查,当检查的文件存在时,任务才会执行成功。默认 false,不检查。 | false |
| job.reader.success_file_path | 设置检查的 Success 文件全路径信息。 | 无 |
| job.reader.success_file_check_interval_ms | 设置检查 Success 文件时间间隔,单位毫秒。 | 60000 |
| job.reader.success_file_check_times | 设置 Success 文件检查次数。 | 60 |
| job.reader.csv_delimiter_ascii | 当 TOS 文件中的分隔符是不可见的 ASCII 字符时,可使用该高级参数,并将其设置为对应字符的 ASCII 码,如 job.reader.csv_delimiter_ascii=1,表示文件分隔符为不可见的控制字符 SOH。 |
\ |
| 该参数优先级高于界面设置的分隔符。 | 无 | |
| job.reader.compress_codec | TOS 读取压缩文件时需要配置该参数,可选值为 zip。 | 无 |
| job.reader.s3a_endpoint | 覆盖默认的 TOS Endpoint,用于连接其他 S3 兼容对象存储。 | 无 |
| job.reader.s3a_path_style_access | 是否使用 Path-Style 访问模式(适用于部分自建 MinIO)。 | false |
TOS 数据源常用的批式写高级参数整理如下:
| | | | \
| 参数名 | 描述 | 默认值 |
|---|---|---|
| job.writer.s3a_endpoint | 覆盖默认的 TOS Endpoint,用于连接其他 S3 兼容对象存储。 | 无 |
| job.writer.s3a_path_style_access | 是否使用 Path-Style 访问模式。 | false |
| | | | | \
| 场景 | 推荐格式 | 压缩格式 | 原因 |
|---|---|---|---|
| 结构化大数据量(>1GB) | Parquet | Snappy | 列式存储,读取效率高,压缩比好。 |
| 数据交换/人可读 | CSV | Gzip | 通用格式,兼容性最好。 |
| 嵌套/半结构化数据 | JSON | Gzip | 支持嵌套结构。 |
| 日志类数据写入 | JSON / CSV | Lz4 | 写入快,Lz4 压缩速度最快。 |
| 存档/冷数据 | Parquet / ORC | Zstd | 最高压缩比。 |
| | | \
| 优化项 | 建议 |
|---|---|
| 文件拆分 | 单个文件建议不超过 1GB,拆分为多个小文件可提升并发效率。 |
| 并发数 | 文件数量决定最大并发度,单文件不支持多线程,多文件场景可适当提高并发数。 |
| 压缩选择 | 读取时 Snappy/Lz4 解压最快;写入时 Gzip 压缩比最优。 |
| Success 文件 | 上游 ETL 产出数据后放置 Success 标记文件,DataSail 侧开启 enable_success_file_check,确保数据就绪。 |
TOS 为文件存储系统,不支持行级增量。推荐的增量方案:
方式一:基于日期分区目录
# 文件路径使用日期变量
data/orders/${date}/
# 每天只读取当天目录下的新文件
方式二:Success 文件检查 + 目录约定
# 高级参数配置
job.reader.enable_success_file_check = true
job.reader.success_file_path = data/orders/${date}/_SUCCESS
Q1:TOS 读取时报"Access Denied"怎么办?
A:请按以下顺序排查:
tos:GetObject 和 tos:ListBucket 权限。Q2:读取 CSV 文件时字段错位(数据串行)怎么办?
A:字段错位的常见原因:
\001),使用 job.reader.csv_delimiter_ascii=1 配置。Q3:连接 S3/OSS/COS 时连通性测试通过但任务运行失败?
A:这是因为连接串方式的连通性测试验证的是火山引擎 TOS 的连通性,不会验证自定义的 s3a_endpoint。解决方案:
job.reader.s3a_endpoint(或 job.writer.s3a_endpoint)配置正确。s3a_path_style_access=true。Q4:写入 TOS 后文件名很长且包含乱码怎么调整?
A:TOS Writer 的文件名由系统自动生成,格式为 {filePrefix}_{jobId}{subTaskId}{file_count}_{timestamp}.{format}.{compression}。建议:
文件名前缀(如 orders_daily)。Q5:如何从 TOS 读取 ZIP 压缩文件?
A:需要在高级参数中配置 job.reader.compress_codec=zip。
:::warning
压缩文件不支持多线程并发读取。
ZIP 包内的文件格式需要与配置的数据类型一致。
:::
Q6:跨云传输(如 TOS → S3)的数据量很大,如何优化传输效率?
A:
尽量使用高压缩比格式(Parquet + Snappy / Gzip),减少传输数据量。
将大文件拆分为多个小文件,提高并发度。
考虑在目标云的同 Region 部署中转节点,减少跨区域流量。
评估公网带宽限制,必要时申请带宽扩容。