准备工作
已开通OSS服务并创建存储空间Bucket。具体操作,请参见开通OSS服务和通过控制台创建存储空间。
已确认和记录表格存储中要同步到OSS的实例、数据表或者时序表信息。
已开通DataWorks服务并创建工作空间。具体操作,请参见开通DataWorks服务和创建工作空间。
已创建RAM用户并为RAM用户授予OSS完全管理权限(AliyunOSSFullAccess)和管理表格存储权限(AliyunOTSFullAccess)。具体操作,请参见创建RAM用户和为RAM用户授权。
重要 由于配置时需要填写访问密钥AccessKey(AK)信息来执行授权,为避免阿里云账号泄露AccessKey带来的安全风险,建议您通过RAM用户来完成授权和AccessKey的创建。
已为RAM用户创建AccessKey。具体操作,请参见创建AccessKey。
步骤一:新增表格存储数据源
将表格存储数据库添加为数据源,具体步骤如下:
进入数据集成页面。
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的,在下拉框中选择对应工作空间后单击进入数据集成。
在左侧导航栏,单击数据源。
在数据源列表页面,单击新增数据源。
在新增数据源对话框,找到Tablestore区块,单击Tablestore。
在新增OTS数据源对话框,根据下表配置数据源参数。
参数 | 说明 |
数据源名称 | 数据源名称必须以字母、数字、下划线(_)组合,且不能以数字和下划线(_)开头。 |
数据源描述 | 对数据源进行简单描述,不得超过80个字符。 |
地域 | 选择Tablestore实例所属地域。 |
Table Store实例名称 | Tablestore实例的名称。更多信息,请参见实例。 |
Endpoint | Tablestore实例的服务地址,推荐使用VPC地址。
重要 本文以Tablestore实例和DataWorks工作空间在同一阿里云主账号的同一地域下为例进行说明。更多场景信息,请参见各场景网络连通配置示例。 |
AccessKey ID | 阿里云账号或者RAM用户的AccessKey ID和AccessKey Secret。获取方式请参见创建AccessKey。 |
AccessKey Secret |
测试资源组连通性。
创建数据源时,您需要测试资源组的连通性,以保证同步任务使用的资源组能够与数据源连通,否则将无法正常执行数据同步任务。
(可选)购买并绑定资源组至当前DataWorks工作空间。具体操作,请参见新增和使用Serverless资源组。
不推荐使用旧版资源组(独享资源组和公共资源组),相较于旧版资源组,Serverless资源组支持的能力更丰富、售卖方式更统一、能有效利用资源碎片避免浪费,因此推荐您使用Serverless资源组。
说明 Serverless资源组默认不具备公网访问能力。需要为绑定的VPC配置公网NAT网关和EIP后,才支持公网访问数据源。
待资源组启动成功后,在连接配置区域,单击相应资源组连通状态列的测试连通性。
测试连通性通过后,连通状态显示可连通,单击完成。
在数据源列表中,可以查看新建的数据源。
说明 如果显示无法连通,表示资源组与数据源无法连通,后续相应数据源任务将无法正常执行。您可以参考以下思路排查处理。
步骤二:新增OSS数据源
具体操作与步骤一类似,只需在新增数据源对话框,找到OSS区块,单击OSS。
本示例中,该数据源名称使用OTS2OSS,如下图所示。

步骤三:新建同步任务节点
进入数据开发页面。
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的,在下拉框中选择对应工作空间后单击进入数据开发。
在DataStudio控制台的数据开发页面,单击业务流程节点下的目标业务流程。
如果需要新建业务流程,请参见创建业务流程。
在数据集成节点上右键选择新建节点 > 离线同步。
在新建节点对话框,选择路径并填写节点名称。
单击确认。
在数据集成节点下会显示新建的离线同步节点。
步骤四:配置离线同步任务并启动
配置表格存储到OSS的全量数据同步任务,请根据所用数据存储模型选择相应任务配置方式。
同步数据表数据的任务配置
在数据集成节点下,双击打开新建的离线同步任务节点。
配置同步网络链接。
选择离线同步任务的数据来源、数据去向以及用于执行同步任务的资源组,并测试连通性。
重要 数据同步任务的执行必须经过资源组来实现,请选择资源组并保证资源组与读写两端的数据源能联通访问。
在网络与资源配置步骤,选择数据来源为Tablestore,并选择数据源名称为步骤一:新增表格存储数据源中新增的源数据源。
选择资源组。
选择资源组后,系统会显示资源组的地域、规格等信息以及自动测试资源组与所选数据源之间连通性。
选择数据去向为OSS,并选择数据源名称为步骤二:新增OSS数据源中新增的目的数据源。
系统会自动测试资源组与所选数据源之间连通性。
测试可连通后,单击下一步。
配置任务。
您可以通过向导模式或者脚本模式配置同步任务,请根据实际需要选择。
(推荐)向导模式
在配置任务步骤的配置数据来源与去向区域,根据实际配置数据来源和数据去向。
数据来源配置
参数 | 说明 |
表 | 表格存储中的数据表名称。 |
主键区间分布(起始) | 数据读取的起始主键和结束主键,格式为JSON数组。 起始主键和结束主键需要是有效的主键或者是由INF_MIN和INF_MAX类型组成的虚拟点,虚拟点的列数必须与主键相同。 其中INF_MIN表示无限小,任何类型的值都比它大;INF_MAX表示无限大,任何类型的值都比它小。 数据表中的行按主键从小到大排序,读取范围是一个左闭右开的区间,返回的是大于等于起始主键且小于结束主键的所有的行。 假设表包含pk1(String类型)和pk2(Integer类型)两个主键列。 如果需要导出全表数据,则配置示例如下: 主键区间分布(起始)的配置示例 [
{
"type": "INF_MIN"
},
{
"type": "INF_MIN"
}
]
主键区间分布(结束)的配置示例 [
{
"type": "INF_MAX"
},
{
"type": "INF_MAX"
}
]
如果需要导出pk1="tablestore" 的行,则配置示例如下: 主键区间分布(起始)的配置示例 [
{
"type": "STRING",
"value": "tablestore"
},
{
"type": "INF_MIN"
}
]
主键区间分布(结束)的配置示例 [
{
"type": "STRING",
"value": "tablestore"
},
{
"type": "INF_MAX"
}
]
|
主键区间分布(结束) |
切分配置信息 | 自定义切分配置信息,普通情况下不建议配置。当Tablestore数据存储发生热点,且使用Tablestore Reader自动切分的策略不能生效时,建议使用自定义的切分规则。切分指定的是在主键起始和结束区间内的切分点,仅配置切分键,无需指定全部的主键。格式为JSON数组。 |
数据去向配置
参数 | 说明 |
文本类型 | 写入OSS的文件类型,例如csv、txt。
说明 不同文件类型支持的配置有差异,请以实际界面为准。 |
文件名(含路径) | 当设置文本类型为text、csv或orc时才能配置该参数。 OSS中的文件名称,支持带有路径,例如tablestore/20231130/myotsdata.csv 。 |
文件路径 | 当设置文本类型为parquet时才能配置该参数。 文件在OSS上的路径,例如tablestore/20231130/ 。 |
文件名 | 当设置文本类型为parquet时才能配置该参数。 OSS中的文件名称。 |
列分隔符 | 当设置文本类型为text或csv时才能配置该参数。 写入OSS文件时,列之间使用的分隔符。 |
行分隔符 | 当设置文本类型为text时才能配置才参数。 自定义的行分隔符,用来分隔不同数据行。例如配置为 \u0001 。您需要使用数据中不存在的分隔符作为行分隔符。 如果要使用Linux或Windows平台的默认行分隔符(\n 、\r\n )建议置空此配置,平台能自适应读取。 |
编码 | 当设置文本类型为text或csv时才能配置该参数。 写入文件的编码配置。 |
null值 | 当设置文本类型为text、csv或orc时才能配置该参数。 源数据源中可以表示为null的字符串,例如配置为null,如果源数据是null,则系统会视作null字段。 |
时间格式 | 当设置文本类型为text或csv时才能配置该参数。 日期类型的数据写入到OSS文件时的时间格式,例如yyyy-MM-dd 。 |
前缀冲突 | 当设置的文件名与OSS中已有文件名冲突时的处理方法。取值范围如下: |
切分文件 | 当设置文本类型为text或csv时才能配置该参数。 写入OSS文件时,单个Object文件的最大大小。单位为MB。最大值为100 GB。当文件大小超过指定的切分文件大小时,系统会生成新文件继续写入数据,直到完成所有数据写入。 |
写为一个文件 | 当设置文本类型为text或csv时才能配置该参数。 写入数据到OSS时,是否写单个文件。默认写多个文件,当读不到任何数据时,如果配置了文件头,则会输出只包含文件头的空文件,否则只输出空文件。 如果需要写入到单个文件,请选中写为一个文件复选框。此时当读不到任何数据时, 不会产生空文件。 |
首行输出表头 | 当设置文本类型为text或csv时才能配置该参数。 写入文件时第一行是否输出表头。默认不输出表头。如果需要在第一行输出表头,请选中首行输出表头复选框。 |
在字段映射区域,单击来源字段后的
图标,手动编辑要同步到OSS的来源字段,目标字段无需配置。
在通道控制区域,配置任务运行参数,例如任务期望最大并发数、同步速率、脏数据同步策略、分布式处理能力等。关于参数配置的更多信息,请参见配置通道。
单击
图标,保存配置。
说明 执行后续操作时,如果未保存配置,则系统会出现保存确认的提示,单击确认即可。
脚本模式
全量数据的同步需要使用到Tablestore(OTS) Reader和OSS Writer插件。脚本配置规则请参见Tablestore数据源和OSS数据源。
重要 任务转为脚本模式后,将无法转为向导模式,请谨慎操作。
在配置任务步骤,单击
图标,然后在弹出的对话框中单击确认。
在脚本配置页面,请根据如下示例完成配置。
重要 由于全量导出一般是一次性的,所以无需配置自动调度参数。如果需要配置调度参数,请参见增量同步中的调度参数配置。
如果在脚本配置中存在变量,例如存在${date}
,则需要在运行同步任务时设置变量的具体值。
为了便于理解,在配置示例中增加了注释内容,实际使用脚本时请删除所有注释内容。
{
"type": "job", //不能修改。
"version": "2.0", //版本号,不能修改。
"steps": [
{
"stepType":"ots",//插件名,不能修改。
"parameter":{
"datasource":"otssource",//表格存储数据源名称,请根据实际填写。
"newVersion":"true",//使用新版otsreader。
"mode": "normal",// 行模式读取数据。
"isTimeseriesTable":"false",// 配置该表为宽表(非时序表)。
"column":[//需要导出到OSS的列名,不能设置为空。
{
"name":"column1"//Tablestore中列名,此列需要导入到OSS。
},
{
"name":"column2"
},
{
"name":"column3"
},
{
"name":"column4"
},
{
"name":"column5"
}
],
"range":{
"split":[ //用于配置Tablestore的数据表的分区信息,可以加速导出。一般情况下无需配置。
],
"end":[//Tablestore中结束主键信息。如果需要导出全量数据,此处请配置为INF_MAX;如果只需导出部分数据,则按需配置。当数据表存在多个主键列时,此处end中需要配置对应主键列信息。
{
"type":"STRING",
"value":"endValue"
},
{
"type":"INT",
"value":"100"
},
{
"type":"INF_MAX"
},
{
"type":"INF_MAX"
}
],
"begin":[//Tablestore中起始主键信息。如果需要导出全量数据,此处请配置为INF_MIN;如果只需导出部分数据,则按需配置。当数据表存在多个主键列时,此处begin中需要配置对应主键列信息。
{
"type":"STRING",
"value":"beginValue"
},
{
"type":"INT",
"value":"0"
},
{
"type":"INF_MIN"
},
{
"type":"INF_MIN"
}
]
},
"table":"datatable"//Tablestore中的数据表名称。
},
"name":"Reader",
"category":"reader"
},
{
"stepType": "oss",//插件名,不能修改。
"parameter": {
"nullFormat": "null", //定义null值的字符串标识符方式,可以是空字符串。
"dateFormat": "yyyy-MM-dd HH:mm:ss",//日期格式。
"datasource": "osssource", //OSS数据源名称,请根据实际填写。
"envType": 1,
"writeSingleObject": true, //将同步数据写入单个oss文件。
"writeMode": "truncate", //当同名文件存在时系统进行的操作,全量导出时请使用truncate,可选值包括truncate、append和nonConflict。truncate表示会清理已存在的同名文件,append表示会增加到已存在的同名文件内容后面,nonConflict表示当同名文件存在时会报错。
"encoding": "UTF-8", //编码类型。
"fieldDelimiter": ",", //每一列的分隔符。
"fileFormat": "csv", //导出的文本类型,取值范围包括csv、text、parquet和orc。
"object": "tablestore/20231130/myotsdata.csv" //Object的前缀,无需包括Bucket名称,例如tablestore/20231130/。如果是定时导出,则此处需要使用变量,例如tablestore/${date},然后在配置调度参数时配置${date}的值。
},
"name": "Writer",
"category": "writer"
},
{
"name": "Processor",
"stepType": null,
"category": "processor",
"copies": 1,
"parameter": {
"nodes": [],
"edges": [],
"groups": [],
"version": "2.0"
}
}
],
"setting": {
"executeMode": null,
"errorLimit": {
"record": "0" //当错误个数超过record个数时,导入任务会失败。
},
"speed": {
"concurrent": 2, //并发度。
"throttle": false
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
单击
图标,保存配置。
说明 执行后续操作时,如果未保存脚本,则系统会出现保存确认的提示,单击确认即可。
执行同步任务。
重要 全量数据一般只需要同步一次,无需配置调度属性。
单击
图标。
在参数对话框,选择运行资源组的名称。
单击运行。
运行结束后,在同步任务的运行日志页签,单击Detail log url对应的链接后。在任务的详细运行日志页面,查看Current task status
对应的状态。
当Current task status
的值为FINISH时,表示任务运行完成。
同步时序表数据的任务配置
在数据集成节点下,双击打开新建的离线同步任务节点。
配置同步网络链接。
选择离线同步任务的数据来源、数据去向以及用于执行同步任务的资源组,并测试连通性。
重要 数据同步任务的执行必须经过资源组来实现,请选择资源组并保证资源组与读写两端的数据源能联通访问。
在网络与资源配置步骤,选择数据来源为Tablestore,并选择数据源名称为步骤一:新增表格存储数据源中新增的源数据源。
选择资源组。
选择资源组后,系统会显示资源组的地域、规格等信息以及自动测试资源组与所选数据源之间连通性。
选择数据去向为OSS,并选择数据源名称为步骤二:新增OSS数据源中新增的目的数据源
系统会自动测试资源组与所选数据源之间连通性。
测试可连通后,单击下一步。
配置任务。
同步时序表数据时只支持使用脚本模式进行任务配置。全量数据的同步需要使用到Tablestore(OTS) Reader和OSS Writer插件。脚本配置规则请参见Tablestore数据源和OSS数据源。
重要 任务转为脚本模式后,将无法转为向导模式,请谨慎操作。
在配置任务步骤,单击
图标,然后在弹出的对话框中单击确认。
在脚本配置页面,请根据如下示例完成配置。
重要 由于全量导出一般是一次性的,所以无需配置自动调度参数。如果需要配置调度参数,请参见增量同步中的调度参数配置。
如果在脚本配置中存在变量,例如存在${date}
,则需要在运行同步任务时设置变量的具体值。
为了便于理解,在配置示例中增加了注释内容,实际使用脚本时请删除所有注释内容。
{
"type": "job",
"version": "2.0", //版本号,不能修改。
"steps": [
{
"stepType":"ots",//插件名,不能修改。
"parameter":{
"datasource":"otssource",//表格存储数据源名称,请根据实际填写。
"table": "timeseriestable",//时序表名称。
// 读时序数据mode必须为normal。
"mode": "normal",
// 读时序数据newVersion必须为true。
"newVersion": "true",
// 配置该表为时序表。
"isTimeseriesTable":"true",
// 配置需要读取时序数据的度量名称,非必需。如果置空则表示读取全表数据。
"measurementName":"measurement_1",
"column": [
// 度量名称,name固定取值为_m_name。如果不需要导出该列数据,则无需配置。
{
"name": "_m_name"
},
//数据源名称,name固定取值为_data_source。如果不需要导出该列数据,则无需配置。
{
"name": "_data_source"
},
//数据点的时间戳,单位为微秒。name固定取值为_time,type固定取值为INT。如果不需要导出该列数据,则无需配置。
{
//列名。
"name": "_time"
//列类型。
"type":"INT"
},
//时间线标签。如果时间线存在多个标签,您可以配置多个标签列信息。
{
//时间线标签名称,请根据实际填写。
"name": "tagA",
//是否为时间线标签。默认值为false,如果要指定列为标签,则需要设置此参数为true。
"is_timeseries_tag":"true"
},
{
"name": "double_0",
"type":"DOUBLE"
},
{
"name": "string_0",
"type":"STRING"
},
{
"name": "long_0",
"type":"INT"
},
{
"name": "binary_0",
"type":"BINARY"
},
{
"name": "bool_0",
"type":"BOOL"
}
]
},
"name":"Reader",
"category":"reader"
},
{
"stepType": "oss",//插件名,不能修改。
"parameter": {
"nullFormat": "null", //定义null值的字符串标识符方式,可以是空字符串。
"dateFormat": "yyyy-MM-dd HH:mm:ss",//日期格式。
"datasource": "osssource", //OSS数据源名称,请根据实际填写。
"envType": 1,
"writeSingleObject": true, //将同步数据写入单个oss文件。
"writeMode": "truncate", //当同名文件存在时系统进行的操作,全量导出时请使用truncate,可选值包括truncate、append和nonConflict。truncate表示会清理已存在的同名文件,append表示会增加到已存在的同名文件内容后面,nonConflict表示当同名文件存在时会报错。
"encoding": "UTF-8", //编码类型。
"fieldDelimiter": ",", //每一列的分隔符。
"fileFormat": "csv", //导出的文本类型,取值范围包括csv、text、parquet和orc。
"object": "tablestore/20231130/myotsdata.csv" //Object的前缀,无需包括Bucket名称,例如tablestore/20231130/。如果是定时导出,则此处需要使用变量,例如tablestore/${date},然后在配置调度参数时配置${date}的值。
},
"name": "Writer",
"category": "writer"
},
{
"name": "Processor",
"stepType": null,
"category": "processor",
"copies": 1,
"parameter": {
"nodes": [],
"edges": [],
"groups": [],
"version": "2.0"
}
}
],
"setting": {
"executeMode": null,
"errorLimit": {
"record": "0" //当错误个数超过record个数时,导入任务会失败。
},
"speed": {
"concurrent": 2, //并发度。
"throttle": false
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
单击
图标,保存配置。
说明 执行后续操作时,如果未保存脚本,则系统会出现保存确认的提示,单击确认即可。
执行同步任务。
重要 全量数据一般只需要同步一次,无需配置调度属性。
单击
图标。
在参数对话框,选择运行资源组的名称。
单击运行。
运行结束后,在同步任务的运行日志页签,单击Detail log url对应的链接后。在任务的详细运行日志页面,查看Current task status
对应的状态。
当Current task status
的值为FINISH时,表示任务运行完成。
步骤五:查看导出到OSS中的数据
登录OSS管理控制台。
在Bucket列表页面,找到目标Bucket后,单击Bucket名称。
在文件列表页签,选择相应文件,下载后可查看内容是否符合预期。
相关文档
将表格存储的全量数据导出到OSS后,您还可以将表格存储的增量数据同步到OSS存储。具体操作,请参见增量同步。
将表格存储的全量数据导出到OSS后,如果需要快速清理表格存储表中不再使用的历史数据,您可以通过数据生命周期功能实现。更多信息,请参见数据生命周期(数据表)或者更新时序表数据生命周期(时序表)。
如果要下载导出的OSS文件到本地,您可以使用OSS控制台、命令行工具ossutil等工具直接进行下载。更多信息,请参见简单下载。
为了防止由于误删、恶意篡改等导致重要数据不可用,您可以使用表格存储数据备份功能备份实例中宽表数据,并在数据丢失或受损时及时恢复。更多信息,请参见备份与恢复。
如果要实现表格存储数据表的冷热数据分层存储、全量数据备份表格存储数据以及大规模实时数据分析,您可以使用表格存储的数据湖投递功能实现。更多信息,请参见数据湖投递。