本文介紹了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”錯誤,如下圖所示。
可能原因
OTSStreamReader配置腳本中缺少增量數據時間范圍的配置。
解決方案
請通過以下方式配置增量數據范圍。
通過
parameter.date
參數配置導出數據的日期。通過
parameter.startTimestampMillis
和parameter.endTimestampMillis
參數分別配置開始導出的時間點和結束導出的時間點。
關于增量數據范圍配置的更多信息,請參見同步增量數據到OSS。
OTSStreamReader運行時出現“The stream of data table is not enabled”錯誤
問題現象
OTSStreamReader運行時出現“The stream of data table is not enabled”錯誤,如下圖所示。
可能原因
OTSStreamReader中配置的表格存儲數據表(
parameter.table
)未開啟Stream。解決方案
請通過以下方式為OTSStreamReader中配置的表格存儲數據表開啟Stream。
登錄表格存儲控制臺后,在目標數據表的表管理頁面中實時消費通道頁簽,開啟Stream。
通過不同SDK調用UpdateTable接口修改數據表屬性。更多信息,請參見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”錯誤,如下圖所示。
可能原因
OTSStreamReader讀取的增量日志存在過期時長,startTime參數配置錯誤。
解決方案
同步腳本中配置的startTime必須大于
任務啟動時間-日志過期時長+10分鐘
。請登錄表格存儲控制臺后,在目標數據表的表管理頁面中基本詳情頁簽,查看日志過期時長。
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”錯誤,如下圖所示。
可能原因
endTime參數配置錯誤。
解決方案
同步腳本中配置的endTime必須小于
任務啟動時間 - 5分鐘
。
OTSStreamReader運行時出現“配置中的源表的列個數和目的端表不一致,源表中您配置的列數是:xx大于目的端的列數是:xx ”錯誤
問題現象
OTSStreamReader運行時出現“配置中的源表的列個數和目的端表不一致,源表中您配置的列數是:xx 大于目的端的列數是:xx ”錯誤,如下圖所示。
可能原因
當在同步腳本中未配置
"mode": "single_version_and_update_only"
(即為行模式同步)時,OTSStreamReader中parameter.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.column和Writer中的parameter.column配置列個數是否不一致。
解決方案
在OTSStreamReader的parameter中增加
"mode": "single_version_and_update_only"
配置,并確保OTSStreamReader中的parameter.column和Writer中的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.
可能原因
OTSStreamReader中
parameter.column
配置的格式錯誤。解決方案
請確保parameter.column的配置正確。配置示例如下:
錯誤示例
"column":[ "col1", "col2" ]
正確示例
"column":[ { "name" : "col1" }, { "name" : "col2" } ]