このトピックでは、Tablestore リーダーの実行中に発生する可能性のあるエラーとそのトラブルシューティング方法について説明します。
エラーメッセージ:「Input size of values not equal size of primary key. input size: xx, primary key size: xx」
-
問題の説明
Tablestore リーダーのジョブを実行すると、「Input size of values not equal size of primary key. input size: xx, primary key size: xx」 というエラーメッセージが表示されます。
com.alibaba.datax.common.exception.DataXException: com.alibaba.datax.plugin.reader.otsreader.OtsReaderError@76f4b65 - IllegalArgumentException[ErrorMessage:Input size of values not equal size of primary key. input size:2, primary key size:1 .] - java.lang.IllegalArgumentException: Input size of values not equal size of primary key. input size:2, primary key size:1 . at com.alibaba.datax.plugin.reader.otsreader.utils.ParamChecker.checkInputPrimaryKeyAndGet(ParamChecker.java:119) at com.alibaba.datax.plugin.reader.otsreader.utils.ParamChecker.checkRangeAndGet(ParamChecker.java:151) at com.alibaba.datax.plugin.reader.otsreader.OtsReaderMasterProxy.init(OtsReaderMasterProxy.java:86) at com.alibaba.datax.plugin.reader.otsreader.OtsReader$Job.init(OtsReader.java:34) at com.alibaba.datax.core.job.JobContainer.initJobReader(JobContainer.java:1085) at com.alibaba.datax.core.job.JobContainer.init(JobContainer.java:497) at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:220) at com.alibaba.datax.core.Engine.start(Engine.java:100) at com.alibaba.datax.core.Engine.entry(Engine.java:321) at com.alibaba.datax.core.Engine.main(Engine.java:354) at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:41) at com.alibaba.datax.plugin.reader.otsreader.OtsReader$Job.init(OtsReader.java:47) at com.alibaba.datax.core.job.JobContainer.initJobReader(JobContainer.java:1085) at com.alibaba.datax.core.job.JobContainer.init(JobContainer.java:497) at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:220) at com.alibaba.datax.core.Engine.start(Engine.java:100) at com.alibaba.datax.core.Engine.entry(Engine.java:321) -
考えられる原因
Tablestore リーダーのスクリプトで指定されたプライマリキー列の数と、Tablestore データテーブルのプライマリキー列の数が異なっています。
-
解決策
Tablestore データテーブルのスキーマを確認し、データテーブル内のプライマリキー列の数を取得してから、取得した値を Tablestore リーダーのスクリプトでプライマリキー列の数として設定してください。
たとえば、Tablestore データテーブルに 2 つのプライマリキー列が含まれており、テーブル内のすべてのデータを同期するとします。 次のサンプルコードは、Tablestore リーダーのスクリプトでプライマリキー列の数を指定する方法を示しています。
"range": { "begin": [ { "type": "INF_MIN" }, { "type": "INF_MIN" } ], "end": [ { "type": "INF_MAX" }, { "type": "INF_MAX" } ] }
エラーメッセージ:「Input type of 'range-split' not match partition key. Item of 'range-split' type:xx, Partition type:xx」
-
問題の説明
Tablestore リーダーのジョブを実行すると、「Input type of 'range-split' not match partition key. Item of 'range-split' type:xx, Partition type:xx」 というエラーメッセージが表示されます。
com.alibaba.datax.common.exception.DataXException: com.alibaba.datax.plugin.reader.otsreader.OtsReaderError@22f31dec - IllegalArgumentException[ErrorMessage:Input type of 'range-split' not match partition key. Item of 'range-split' type:null, Partition type:STRING] - java.lang.IllegalArgumentException: Input type of 'range-split' not match partition key. Item of 'range-split' type:null, Partition type:STRING at com.alibaba.datax.plugin.reader.otsreader.utils.ParamChecker.checkInputSplitPoints(ParamChecker.java:231) at com.alibaba.datax.plugin.reader.otsreader.OtsReaderMasterProxy.init(OtsReaderMasterProxy.java:92) at com.alibaba.datax.plugin.reader.otsreader.OtsReader$Job.init(OtsReader.java:34) at com.alibaba.datax.core.job.JobContainer.initJobReader(JobContainer.java:1085) at com.alibaba.datax.core.job.JobContainer.init(JobContainer.java:497) at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:220) at com.alibaba.datax.core.Engine.start(Engine.java:100) at com.alibaba.datax.core.Engine.entry(Engine.java:321) at com.alibaba.datax.core.Engine.main(Engine.java:354) at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:41) at com.alibaba.datax.plugin.reader.otsreader.OtsReader$Job.init(OtsReader.java:47) at com.alibaba.datax.core.job.JobContainer.initJobReader(JobContainer.java:1085) at com.alibaba.datax.core.job.JobContainer.init(JobContainer.java:497) at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:220) at com.alibaba.datax.core.Engine.start(Engine.java:100) at com.alibaba.datax.core.Engine.entry(Engine.java:321) at com.alibaba.datax.core.Engine.main(Engine.java:354) -
考えられる原因
Tablestore リーダーのスクリプトで分割点が正しく設定されていません。 次のサンプルコードは、分割点が正しく設定されていない例です。
"split": [ { "type": "INF_MIN" }, { "type": "INF_MAX" } ] -
解決策
-
Tablestore リーダーのスクリプトから分割点の設定を削除してください。
-
分割点を再度設定してください。 詳細については、「Tablestore リーダーで全量データを同期する際の分割点の設定」をご参照ください。
-
エラーメッセージ:「Invalid 'column', Can not parse Object to 'OTSColumn', item of list is not a map」
-
問題の説明
Tablestore リーダーのジョブを実行すると、「Invalid 'column', Can not parse Object to 'OTSColumn', item of list is not a map」 というエラーメッセージが表示されます。
com.alibaba.datax.common.exception.DataXException: com.alibaba.datax.plugin.reader.otsreader.OtsReaderError@64bce832 – IllegalArgumentException[ErrorMessage:Invalid 'column', Can not parse Object to 'OTSColumn', item of list is not a map.] – java.lang.IllegalArgumentException: Invalid 'column', Can not parse Object to 'OTSColumn', item of list is not a map. at com.alibaba.datax.plugin.reader.otsreader.utils.ReaderModelParser.parseOTSColumnList(ReaderModelParser.java:104) at com.alibaba.datax.plugin.reader.otsreader.OtsReaderMasterProxy.init(OtsReaderMasterProxy.java:80) at com.alibaba.datax.plugin.reader.otsreader.OtsReader$Job.init(OtsReader.java:34) at com.alibaba.datax.core.job.JobContainer.initJobReader(JobContainer.java:1085) at com.alibaba.datax.core.job.JobContainer.init(JobContainer.java:497) at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:220) at com.alibaba.datax.core.Engine.start(Engine.java:100) at com.alibaba.datax.core.Engine.entry(Engine.java:321) at com.alibaba.datax.core.Engine.main(Engine.java:354) at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:41) at com.alibaba.datax.plugin.reader.otsreader.OtsReader$Job.init(OtsReader.java:47) at com.alibaba.datax.core.job.JobContainer.initJobReader(JobContainer.java:1085) at com.alibaba.datax.core.job.JobContainer.init(JobContainer.java:497) at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:220) at com.alibaba.datax.core.Engine.start(Engine.java:100) at com.alibaba.datax.core.Engine.entry(Engine.java:321) at com.alibaba.datax.core.Engine.main(Engine.java:354) -
考えられる原因
Tablestore リーダーのスクリプトで列パラメーターが正しく指定されていません。 次のサンプルコードは、列パラメーターが正しく指定されていない例です。
"column": [ "id", "name", "age" ] -
解決策
Tablestore リーダーのスクリプトで列パラメーターが正しく指定されていることを確認してください。 次のサンプルコードは、列パラメーターを指定する方法を示しています。
"column": [ { "name": "id" }, { "name": "name" }, { "name": "age" } ]