导出全量数据到OSS

如果要以更低成本备份表格存储中的全量数据或者以文件形式导出表格存储数据到本地,您可以通过DataWorks数据集成服务将表格存储中的全量数据导出到OSS。全量数据导出到OSS后,您可以自由下载文件到本地。

注意事项

此功能适用于表格存储宽表模型和时序模型。

  • 宽表模型:导出表格存储数据表中的数据到OSS时支持使用向导模式或者脚本模式。

  • 时序模型:导出表格存储时序表中的数据到OSS时只支持使用脚本模式。

准备工作

  • 已开通OSS服务并创建存储空间Bucket。具体操作,请参见开通OSS服务通过控制台创建存储空间

  • 已确认和记录表格存储中要同步到OSS的实例、数据表或者时序表信息。

  • 已开通DataWorks服务并创建工作空间。具体操作,请参见开通DataWorks服务创建工作空间

  • 已创建RAM用户并为RAM用户授予OSS完全管理权限(AliyunOSSFullAccess)和管理表格存储权限(AliyunOTSFullAccess)。具体操作,请参见创建RAM用户RAM用户授权

    重要

    由于配置时需要填写访问密钥AccessKey(AK)信息来执行授权,为避免阿里云账号泄露AccessKey带来的安全风险,建议您通过RAM用户来完成授权和AccessKey的创建。

  • 已为RAM用户创建AccessKey。具体操作,请参见创建AccessKey

步骤一:新增表格存储数据源

表格存储数据库添加为数据源,具体步骤如下:

  1. 进入数据集成页面。

    1. 以项目管理员身份登录DataWorks控制台

    2. 在左侧导航栏,单击工作空间列表后,选择地域。

    3. 工作空间列表页面,在目标工作空间操作列选择快速进入>数据集成

  2. 在左侧导航栏,单击数据源

  3. 数据源页面,单击新增数据源

  4. 新增数据源对话框,找到Tablestore区块,单击Tablestore

  5. 新增OTS数据源对话框,根据下表配置数据源参数。

    参数

    说明

    数据源名称

    数据源名称必须以字母、数字、下划线(_)组合,且不能以数字和下划线(_)开头。

    数据源描述

    对数据源进行简单描述,不得超过80个字符。

    Endpoint

    Tablestore实例的服务地址。更多信息,请参见服务地址

    如果Tablestore实例和目标数据源的资源在同一个地域,填写VPC地址;如果Tablestore实例和目标数据源的资源不在同一个地域,填写公网地址。

    Table Store实例名称

    Tablestore实例的名称。更多信息,请参见实例

    AccessKey ID

    阿里云账号或者RAM用户的AccessKey IDAccessKey Secret。获取方式请参见创建AccessKey

    AccessKey Secret

  6. 测试资源组连通性。

    创建数据源时,您需要测试资源组的连通性,以保证同步任务使用的资源组能够与数据源连通,否则将无法正常执行数据同步任务。

    重要
    • 数据同步时,一个任务只能使用一种资源组。资源组列表默认仅显示独享数据集成资源组,为确保数据同步的稳定性和性能要求,推荐使用独享数据集成资源组。

    • 如果未创建资源组,请单击新建独享数据集成资源组进行创建。具体操作,请参见新增和使用独享数据集成资源组

    单击相应资源组操作列的测试连通性,当连通状态为可连通时,表示连通成功。

  7. 测试连通性通过后,单击完成

    在数据源列表中,可以查看新建的数据源。

步骤二:新增OSS数据源

具体操作与步骤一类似,只需在新增数据源对话框,找到OSS区块,单击OSS

本示例中,该数据源名称使用OTS2OSS,如下图所示。

重要
  • 配置OSS数据源的参数时,请注意Endpoint中不能包括Bucket的名称,且必须以http://或者https://开头。

  • OSS的访问支持Access Key模式和RAM角色授权模式,请根据实际选择。

    • Access Key模式:通过阿里云账号或者RAM用户的AccessKey IDAccessKey Secret访问数据源。

    • RAM角色授权模式:通过STS授权的方式允许云产品服务账号扮演相关角色来访问数据源,具备更高安全性。更多信息,请参见通过RAM角色授权模式配置数据源

      首次选择访问模式RAM角色授权模式时,系统会显示警告对话框,提示创建相关服务关联角色的信息,单击开启授权进行授权。开启授权后,选择角色为新建的服务关联角色。

image.png

步骤三:新建同步任务节点

  1. 进入数据开发页面。

    1. 以项目管理员身份登录DataWorks控制台

    2. 选择地域,在左侧导航栏,单击工作空间列表

    3. 工作空间列表页面,在目标工作空间操作列选择快速进入>数据开发

  2. DataStudio控制台的数据开发页面,单击业务流程节点下的目标业务流程。

    如果需要新建业务流程,请参见创建业务流程

  3. 数据集成节点上右键选择新建节点 > 离线同步

  4. 新建节点对话框,选择路径并填写节点名称。

  5. 单击确认

    数据集成节点下会显示新建的离线同步节点。

步骤四:配置离线同步任务并启动

配置表格存储OSS的全量数据同步任务,请根据所用数据存储模型选择相应任务配置方式。

  • 如果所用的数据存储模型是宽表模型(即使用数据表存储数据),则需要同步数据表中的数据,请按照同步数据表数据的任务配置进行配置。

  • 如果所用的数据存储模型是时序模型(即使用时序表存储数据),则需要同步时序表中的数据,请按照同步时序表数据的任务配置进行配置。

同步数据表数据的任务配置

  1. 数据集成节点下,双击打开新建的离线同步任务节点。

  2. 配置同步网络链接。

    选择离线同步任务的数据来源、数据去向以及用于执行同步任务的资源组,并测试连通性。

    重要

    数据同步任务的执行必须经过资源组来实现,请选择资源组并保证资源组与读写两端的数据源能联通访问。

    1. 网络与资源配置步骤,选择数据来源Tablestore,并选择数据源名称步骤一:新增表格存储数据源中新增的源数据源。

    2. 选择资源组。

      选择资源组后,系统会显示资源组的地域、规格等信息以及自动测试资源组与所选数据源之间连通性。

      重要

      请与新增数据源时选择的资源组保持一致。

    3. 选择数据去向OSS,并选择数据源名称步骤二:新增OSS数据源中新增的目的数据源。

      系统会自动测试资源组与所选数据源之间连通性。

    4. 测试可连通后,单击下一步

  3. 配置任务。

    您可以通过向导模式或者脚本模式配置同步任务,请根据实际需要选择。

    (推荐)向导模式

    1. 配置任务步骤的配置数据来源与去向区域,根据实际配置数据来源和数据去向。

      数据来源配置

      参数

      说明

      表格存储中的数据表名称。

      主键区间分布(起始)

      数据读取的起始主键和结束主键,格式为JSON数组。

      起始主键和结束主键需要是有效的主键或者是由INF_MININF_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。

      说明

      不同文件类型支持的配置有差异,请以实际界面为准。

      文件名(含路径)

      当设置文本类型textcsvorc时才能配置该参数。

      OSS中的文件名称,支持带有路径,例如tablestore/20231130/myotsdata.csv

      文件路径

      当设置文本类型parquet时才能配置该参数。

      文件在OSS上的路径,例如tablestore/20231130/

      文件名

      当设置文本类型parquet时才能配置该参数。

      OSS中的文件名称。

      列分隔符

      当设置文本类型textcsv时才能配置该参数。

      写入OSS文件时,列之间使用的分隔符。

      行分隔符

      当设置文本类型text时才能配置才参数。

      自定义的行分隔符,用来分隔不同数据行。例如配置为 \u0001。您需要使用数据中不存在的分隔符作为行分隔符。

      如果要使用LinuxWindows平台的默认行分隔符(\n\r\n)建议置空此配置,平台能自适应读取。

      编码

      当设置文本类型textcsv时才能配置该参数。

      写入文件的编码配置。

      null

      当设置文本类型textcsvorc时才能配置该参数。

      源数据源中可以表示为null的字符串,例如配置为null,如果源数据是null,则系统会视作null字段。

      时间格式

      当设置文本类型textcsv时才能配置该参数。

      日期类型的数据写入到OSS文件时的时间格式,例如yyyy-MM-dd

      前缀冲突

      当设置的文件名与OSS中已有文件名冲突时的处理方法。取值范围如下:

      • 替换:删除原始文件,重建一个同名文件。

      • 保留:保留原始文件,重建一个新文件,名称为原文件名加随机后缀。

      • 报错:同步任务停止执行。

      切分文件

      当设置文本类型textcsv时才能配置该参数。

      写入OSS文件时,单个Object文件的最大大小。单位为MB。最大值为100 GB。当文件大小超过指定的切分文件大小时,系统会生成新文件继续写入数据,直到完成所有数据写入。

      写为一个文件

      当设置文本类型textcsv时才能配置该参数。

      写入数据到OSS时,是否写单个文件。默认写多个文件,当读不到任何数据时,如果配置了文件头,则会输出只包含文件头的空文件,否则只输出空文件。

      如果需要写入到单个文件,请选中写为一个文件复选框。此时当读不到任何数据时, 不会产生空文件。

      首行输出表头

      当设置文本类型textcsv时才能配置该参数。

      写入文件时第一行是否输出表头。默认不输出表头。如果需要在第一行输出表头,请选中首行输出表头复选框。

    2. 字段映射区域,单击来源字段后的image.png图标,手动编辑要同步到OSS的来源字段,目标字段无需配置。

    3. 通道控制区域,配置任务运行参数,例如同步速率、脏数据同步策略等。关于参数配置的更多信息,请参见配置通道

    4. 单击image.png图标,保存配置。

      说明

      执行后续操作时,如果未保存配置,则系统会出现保存确认的提示,单击确认即可。

    脚本模式

    全量数据的同步需要使用到Tablestore(OTS) ReaderOSS Writer插件。脚本配置规则请参见Tablestore数据源OSS数据源

    重要

    任务转为脚本模式后,将无法转为向导模式,请谨慎操作。

    1. 配置任务步骤,单击image.png图标,然后在弹出的对话框中单击确认

    2. 在脚本配置页面,请根据如下示例完成配置。

      重要
      • 由于全量导出一般是一次性的,所以无需配置自动调度参数。如果需要配置调度参数,请参见增量同步中的调度参数配置。

      • 如果在脚本配置中存在变量,例如存在${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、appendnonConflict。truncate表示会清理已存在的同名文件,append表示会增加到已存在的同名文件内容后面,nonConflict表示当同名文件存在时会报错。
                      "encoding": "UTF-8", //编码类型。
                      "fieldDelimiter": ",", //每一列的分隔符。
                      "fileFormat": "csv", //导出的文本类型,取值范围包括csv、text、parquetorc。
                      "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"
                  }
              ]
          }
      }
    3. 单击image.png图标,保存配置。

      说明

      执行后续操作时,如果未保存脚本,则系统会出现保存确认的提示,单击确认即可。

  4. 执行同步任务。

    重要

    全量数据一般只需要同步一次,无需配置调度属性。

    1. 单击1680170333627-a1e19a43-4e2a-4340-9564-f53f2fa6806e图标。

    2. 参数对话框,选择运行资源组的名称。

    3. 单击运行

      运行结束后,在同步任务的运行日志页签,单击Detail log url对应的链接后。在任务的详细运行日志页面,查看Current task status对应的状态。

      Current task status的值为FINISH时,表示任务运行完成。

同步时序表数据的任务配置

  1. 数据集成节点下,双击打开新建的离线同步任务节点。

  2. 配置同步网络链接。

    选择离线同步任务的数据来源、数据去向以及用于执行同步任务的资源组,并测试连通性。

    重要

    数据同步任务的执行必须经过资源组来实现,请选择资源组并保证资源组与读写两端的数据源能联通访问。

    1. 网络与资源配置步骤,选择数据来源Tablestore,并选择数据源名称步骤一:新增表格存储数据源中新增的源数据源。

    2. 选择资源组。

      选择资源组后,系统会显示资源组的地域、规格等信息以及自动测试资源组与所选数据源之间连通性。

      重要

      请与新增数据源时选择的资源组保持一致。

    3. 选择数据去向OSS,并选择数据源名称步骤二:新增OSS数据源中新增的目的数据源

      系统会自动测试资源组与所选数据源之间连通性。

    4. 测试可连通后,单击下一步

  3. 配置任务。

    同步时序表数据时只支持使用脚本模式进行任务配置。全量数据的同步需要使用到Tablestore(OTS) ReaderOSS Writer插件。脚本配置规则请参见Tablestore数据源OSS数据源

    重要

    任务转为脚本模式后,将无法转为向导模式,请谨慎操作。

    1. 配置任务步骤,单击image.png图标,然后在弹出的对话框中单击确认

    2. 在脚本配置页面,请根据如下示例完成配置。

      重要
      • 由于全量导出一般是一次性的,所以无需配置自动调度参数。如果需要配置调度参数,请参见增量同步中的调度参数配置。

      • 如果在脚本配置中存在变量,例如存在${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、appendnonConflict。truncate表示会清理已存在的同名文件,append表示会增加到已存在的同名文件内容后面,nonConflict表示当同名文件存在时会报错。
                      "encoding": "UTF-8", //编码类型。
                      "fieldDelimiter": ",", //每一列的分隔符。
                      "fileFormat": "csv", //导出的文本类型,取值范围包括csv、text、parquetorc。
                      "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"
                  }
              ]
          }
      }
    3. 单击image.png图标,保存配置。

      说明

      执行后续操作时,如果未保存脚本,则系统会出现保存确认的提示,单击确认即可。

  4. 执行同步任务。

    重要

    全量数据一般只需要同步一次,无需配置调度属性。

    1. 单击1680170333627-a1e19a43-4e2a-4340-9564-f53f2fa6806e图标。

    2. 参数对话框,选择运行资源组的名称。

    3. 单击运行

      运行结束后,在同步任务的运行日志页签,单击Detail log url对应的链接后。在任务的详细运行日志页面,查看Current task status对应的状态。

      Current task status的值为FINISH时,表示任务运行完成。

步骤五:查看导出到OSS中的数据

  1. 登录OSS管理控制台

  2. Bucket列表页面,找到目标Bucket后,单击Bucket名称。

  3. 文件列表页签,选择相应文件,下载后可查看内容是否符合预期。

常见问题

相关文档

  • 表格存储的全量数据导出到OSS后,您还可以将表格存储的增量数据同步到OSS存储。具体操作,请参见增量同步

  • 表格存储的全量数据导出到OSS后,如果需要快速清理表格存储表中不再使用的历史数据,您可以通过数据生命周期功能实现。更多信息,请参见数据生命周期(数据表)或者更新时序表数据生命周期(时序表)

  • 如果要下载导出的OSS文件到本地,您可以使用OSS控制台、命令行工具ossutil等工具直接进行下载。更多信息,请参见简单下载

  • 为了防止由于误删、恶意篡改等导致重要数据不可用,您可以使用表格存储数据备份功能备份实例中宽表数据,并在数据丢失或受损时及时恢复。更多信息,请参见数据备份概述

  • 如果要实现表格存储数据表的冷热数据分层存储、全量数据备份表格存储数据以及大规模实时数据分析,您可以使用表格存储的数据湖投递功能实现。更多信息,请参见数据湖投递