OTSStreamReader常见问题

本文介绍了OTSStreamReader运行时可能出现的问题,请根据实际问题排查处理错误。

OTSStreamReader运行时出现“Must set date or time range millis or time range string, please check your config”错误

问题现象

OTSStreamReader运行时出现“Must set date or time range millis or time range string, please check your config”错误,如下图所示。

fig_setdate

可能原因

OTSStreamReader配置脚本中缺少增量数据时间范围的配置。

解决方案

请通过以下方式配置增量数据范围。

  • 通过parameter.date参数配置导出数据的日期。

  • 通过parameter.startTimestampMillisparameter.endTimestampMillis参数分别配置开始导出的时间点和结束导出的时间点。

关于增量数据范围配置的更多信息,请参见同步增量数据到OSS

OTSStreamReader运行时出现“The stream of data table is not enabled”错误

问题现象

OTSStreamReader运行时出现“The stream of data table is not enabled”错误,如下图所示。fig_datatablestream

可能原因

OTSStreamReader中配置的表格存储数据表(parameter.table)未开启Stream。

解决方案

请通过以下方式为OTSStreamReader中配置的表格存储数据表开启Stream。

通过表格存储控制台进行操作

  1. 进入表管理页面。

    1. 登录表格存储控制台

    2. 在页面顶部选择资源组和地域。

    3. 概览页面的实例列表中,单击实例名称。

    4. 实例详情页签的数据表列表区域,单击数据表名称。

  2. 表管理页面的实时消费通道页签中,单击Stream信息右侧的开启

    fig_streamopen

  3. 开启Stream功能对话框中,按需修改日志过期时长,单击开启

通过表格存储SDK进行操作

通过不同SDK调用UpdateTable接口修改数据表属性。

OTSStreamReader运行时出现“As expiration time is xx, so the start timestamp must greater than xx”错误

问题现象

OTSStreamReader运行时出现“As expiration time is xx, so the start timestamp must greater than xx”错误,如下图所示。

fig_greaterthan

可能原因

OTSStreamReader读取的增量日志存在过期时长,startTime参数配置错误。

解决方案

同步脚本中配置的startTime必须大于任务启动时间-日志过期时长+10分钟

您可以通过如下步骤查看日志过期时长。

  1. 进入表管理页面。

    1. 登录表格存储控制台

    2. 在页面顶部选择资源组和地域。

    3. 概览页面的实例列表中,单击实例名称。

    4. 实例详情页签的数据表列表区域,单击数据表名称。

  2. 表管理页面的基本详情页签中,查看日志过期时长。

    image

OTSStreamReader运行时出现“To avoid timing error between different machines, the end timestamp must smaller than xx”错误

问题现象

OTSStreamReader运行时出现“To avoid timing error between different machines, the end timestamp must smaller than xx”错误,如下图所示。fig_smallerthan

可能原因

endTime参数配置错误。

解决方案

同步脚本中配置的endTime必须小于任务启动时间 - 5分钟

OTSStreamReader运行时出现“配置中的源表的列个数和目的端表不一致,源表中您配置的列数是:xx大于目的端的列数是:xx ”错误

问题现象

OTSStreamReader运行时出现“配置中的源表的列个数和目的端表不一致,源表中您配置的列数是:xx 大于目的端的列数是:xx ”错误,如下图所示。fig_numbererror

可能原因

  • 当在同步脚本中未配置"mode": "single_version_and_update_only"(即为行模式同步)时,OTSStreamReaderparameter.column的配置会失效,实际会按照pk,colname,version,colvalue,optype结构来同步数据。

    例如表格存储数据表的结构为primary key: id,name,column name: col1,col2。如果Writer中配置为parameter.column = { id,name,col1,col2 },则实际同步的结构为schema = { id,name,colname,version,colvalue,optype }。此时会出现“源表中您配置的列数是:6 大于目的端的列数是:4”错误。

  • 当在同步脚本中配置了"mode": "single_version_and_update_only"(即为列模式同步)时,请检查OTSStreamReader中的parameter.columnWriter中的parameter.column配置列个数是否不一致。

解决方案

OTSStreamReaderparameter中增加"mode": "single_version_and_update_only"配置,并确保OTSStreamReader中的parameter.columnWriter中的parameter.column配置列个数一致。

OTSStreamReader运行时出现“The item of column must be map object”错误

问题现象

OTSStreamReader运行时出现“The item of column must be map object”错误,示例如下:

[code:OTSStreamReaderError,messageOTSStreamReaderError]-com.alibaba.datax.plugin.reader.otsstreamreader.internal.OTSStreamReaderException:Parsecolumnfail,pleasecheckyourconfig.-com.alibaba.datax.plugin.reader.otsstreamreader.internal.OTSStreamReaderException:Parsecolumnfail,pleasecheckyourconfig.
atcom.alibaba.datax.plugin.reader.otsstreamreader.internal.config.OTSStreamReaderConfig.parseConfigForSingleVersionAndUpdateOnlyMode(OTSStreamReaderConfig.java:178)
atcom.alibaba.datax.plugin.reader.otsstreamreader.internal.config.OTSStreamReaderConfig.load(OTSStreamReaderConfig.java:267)
atcom.alibaba.datax.plugin.reader.otsstreamreader.internal.OTSStreamReader$Job.init(OTSStreamReader.java:30)
atcom.alibaba.datax.core.job.JobContainer.initJobReader(JobContainer.java:1083)
atcom.alibaba.datax.core.job.JobContainer.init(JobContainer.java:497)
atcom.alibaba.datax.core.job.JobContainer.start(JobContainer.java:220)
atcom.alibaba.datax.core.Engine.start(Engine.java:100)
atcom.alibaba.datax.core.Engine.entry(Engine.java:318)
atcom.alibaba.datax.core.Engine.main(Engine.java:351)
Causedby:java.lang.IllegalArgumentException:Theitemofcolumnmustbemapobject,pleasecheckyourinput.

可能原因

OTSStreamReaderparameter.column配置的格式错误。

解决方案

请确保parameter.column的配置正确。配置示例如下:

  • 错误示例

    "column":[
      "col1",
      "col2"
    ]
  • 正确示例

    "column":[
      {
    
         "name" : "col1"
    
      },
      {
    
         "name" : "col2"
    
      }
    ]