全部产品
Search
文档中心

表格存储:通过控制台投递数据到OSS

更新时间:Jan 09, 2024

通过表格存储控制台创建投递任务,将表格存储数据表中的数据投递到OSS Bucket中存储。

前提条件

已开通OSS服务且在表格存储实例所在地域创建Bucket,详情请参见开通OSS服务

说明

数据湖投递支持投递到和表格存储相同地域的任意OSS Bucket中。如需投递到其他数仓存储(例如MaxCompute),请提交工单申请。

注意事项

  • 目前支持使用数据湖投递功能的地域有华东1(杭州)、华东2(上海)、华北2(北京)和华北3(张家口)。

  • 数据湖投递不支持同步删除操作,表格存储中的删除操作在数据投递时会被忽略,已投递到OSS中的数据不会被删除。

  • 新建数据投递任务时存在最多1分钟的初始化时间。

  • 数据同步存在延迟,写入速率稳定时,延迟在3分钟内。数据同步的P99延迟在10分钟内。

    说明

    P99延迟表示过去10秒内最慢的1%的请求的平均延迟。

创建投递任务

  1. 进入实例管理页面。

    1. 登录表格存储控制台

    2. 在页面上方选择资源组和地域,单击实例名称或者实例操作列的实例管理

  2. 实例管理页面,单击数据湖投递

  3. (可选)创建服务关联角色AliyunServiceRoleForOTSDataDelivery。

    首次配置数据湖投递时,需要创建表格存储服务关联角色AliyunServiceRoleForOTSDataDelivery,该角色用于授权表格存储服务写入OSS Bucket的权限,具体操作,请参见表格存储服务关联角色

    说明

    关于服务关联角色的更多信息,请参见服务关联角色

    1. 数据湖投递页面,单击数据湖投递关联角色说明

    2. 数据湖投递服务关联角色对话框,查看相关说明,单击确认创建

  4. 创建投递任务。

    1. 数据湖投递页面,单击创建投递任务

    2. 新建投递任务对话框,配置投递参数。

      参数

      说明

      任务名称

      投递任务名称。

      名称只能包含英文小写字母(a~z)、数字和短横线(-),开头和结尾必须为英文小写字母或数字,且长度为3~16字符。

      目标region

      表格存储实例和OSS Bucket所在地域。

      目标Table

      表格存储数据表名称。

      目标OSS Bucket

      OSS Bucket名称。

      重要

      该OSS Bucket必须已存在且与表格存储实例在同一地域。

      投递路径(前缀)

      OSS Bucket中的目录前缀,将表格存储的数据投递到该OSS Bucket目录中。投递路径中支持引用$yyyy、$MM、$dd、$HH、$mm五种时间变量。更多信息,请参见按时间分区

      • 当投递路径中引用时间变量时,可以按数据的写入时间动态生成OSS目录,实现hive partition naming style的数据时间分区,从而按照时间分区组织OSS中的文件分布。

      • 当投递路径中不引用时间变量时,所有文件会被投递到固定的OSS前缀目录中。

      投递类型

      投递任务的类型,包括如下选项:

      • 增量:只同步增量数据。

      • 全量:一次性全表扫描数据同步。

      • 全量&增量:全量数据同步完成后,再同步增量数据

      其中增量数据同步时可以获取最新投递时间和了解当前投递状态。

      投递文件格式

      投递的数据以Parquet列存格式存储,数据湖投递默认使用PLAIN编码方式,PLAIN编码方式支持任意类型数据。

      Schema生成方式

      指定需要投递的数据列,可以选择任意字段以任意顺序、名称写入列存文件,OSS的列存数据会按Schema数组中的数据列先后顺序分布。

      根据选择的Schema生成方式配置投递Schema。

      • Schema生成方式配置为手动录入时,需要手动配置投递字段的源表字段、目标字段名和目标字段类型。

      • Schema生成方式配置为自动生成时,系统会自动匹配识别投递字段。

      重要

      投递数据的字段类型必须与数据源的字段类型匹配,否则会作为脏数据丢弃。关于字段类型映射的更多信息,请参见数据格式映射

      配置投递Schema时,可以执行如下操作:

      • 单击新增投递字段,新增投递字段。

      • 操作列单击down11图标或up图标,调整投递字段的顺序。

      • 操作列单击delete图标,删除投递字段。

      Schema配置

  5. 单击确定

    建表语句对话框,您可以查看自动生成的EMR外表的建表语句,直接复制建表语句可以在EMR中快速创建外表,便于访问OSS中的数据。

    创建投递任务后,您可以执行如下操作:

    • 查看数据投递的详细信息,例如任务名称、表名、投递OSS Bucket、前缀路径、最新同步时间、状态等。

    • 查看或复制建表语句。

      操作列单击建表语句,可以查看或复制通过计算分析引擎(例如EMR)创建外表的建表语句,具体操作,请分别使用EMR

    • 查看投递的错误信息。

      当OSS Bucket、投递权限相关配置不正确时,数据投递会无法成功完成,此时在投递任务的状态界面可以查看相关的错误信息。错误信息的处理详情请参见错误处理

    • 删除投递任务。

      操作列单击删除,可以删除投递任务。删除处于初始化阶段的投递任务时,系统会返回错误,请稍后重试删除。

查看OSS数据

投递任务初始化完成且有数据投递后,可以通过OSS的控制台、API或者SDK,计算分析引擎(例如EMR等)查看投递到OSS的数据,具体操作,请参见文件概览

OSS Object的地址格式如下所示。

oss://BucketName/TaskPrefix/TaskName_ConcurrentID_TaskPrefix__SequenceID

其中BucketName为Bucket名称,TaskPrefix为目录前缀,TaskName为投递任务名称,ConcurrentID为投递系统内部的并发编号,从0开始流量增大时任务并发会自动增加,TaskPrefix为任务的前缀信息,SequenceID为投递的文件编号,从1开始递增。

按时间分区

数据投递支持提取数据写入表格存储的时间,写入时间$yyyy(年份数字)、$MM(两位月份数字)、$dd(两位日期数字)、$HH(两位小时数字)、$mm(两位分钟数字)转化后可以作为投递到OSS Bucket中的目录前缀。

说明

OSS中的文件大小不宜过小,推荐4 MB或者更大,同时计算分析引擎加载OSS时,分区越多,加载事务的执行时间也会越长,因此时间分区粒度不宜过细,在多数实时写入流量场景中,宜按天或者按小时分区,不需要到分钟的分区粒度。

以2020年08月31日16点03分写入表格存储的数据投递为例,OSS中该日志的第一个数据文件目录,根据投递前缀配置,不同的文件路径请参见下表。

OSS Bucket

TaskName

投递前缀

OSS实际文件路径

myBucket

testTask

myPrefix

oss://myBucket/myPrefix/testTask_0_myPrefix__1

myBucket

testTaskTimeParitioned

myPrefix/$yyyy/$MM/$dd/$HH/$mm

oss://myBucket/myPrefix/2020/08/31/16/03/testTaskTimeParitioned_0_myPrefix_2020_08_31_16_03__1

myBucket

testTaskTimeParitionedHiveNamingStyle

myPrefix/year=$yyyy/month=$MM/day=$dd

oss://myBucket/myPrefix/year=2020/month=08/day=31/testTaskTimeParitionedHiveNamingStyle_0_myPrefix_year=2020_month=08

myBucket

testTaskDs

ds=$yyyy$MM$dd

oss://myBucket/ds=20200831/testTaskDs_0_ds=20200831__0

数据格式映射

Parquet Logical Type

表格存储数据类型

Boolean

Boolean

Int64

Int64

Double

Double

UTF8

String

错误处理

错误信息

错误原因

处理方法

UnAuthorized

没有权限。

确认RAM中的服务关联角色AliyunServiceRoleForOTSDataDelivery是否存在。

当服务关联角色不存在时需要重新新建投递任务触发表格存储为用户创建该角色。

InvalidOssBucket

OSS Bucket不存在。

  • 确认OSS Bucket所在地域是否与表格存储实例相同。

  • 确认OSS Bucket是否存在。

当OSS Bucket重新创建后,所有数据会重试写入OSS Bucket,投递进度也会正常更新。