このトピックでは、MaxComputeへのデータ同期に使用するフル同期タスクと増分同期タスクでエラーが発生する一般的なシナリオと、エラーのトラブルシューティング方法について説明します。
MaxComputeへのデータ同期に使用するフル同期タスクと増分同期タスクでエラーが発生する一般的なシナリオ
シナリオのカテゴリ | 参照 |
バイナリログが失われていないシナリオと解決策 | |
バイナリログが失われたシナリオと解決策 | |
マージサブタスクでエラーが発生するシナリオと解決策 |
バイナリログが失われていないシナリオ
ソーステーブルに対する特定のDDL操作によって発生したデータ変更を同期先に同期できないため、フル同期タスクと増分同期タスクによって生成されたリアルタイム同期サブタスクが失敗します。
解決策:
DataWorksコンソールの [ノード] ページの [データ統合] に移動し、フル同期タスクと増分同期タスクを見つけ、[詳細] 列の [編集] をクリックします。フル同期タスクと増分同期タスクの設定ページで、タスクからソーステーブルを削除し、変更を保存してから、タスクを実行するために送信します。同じ方法でリアルタイム同期サブタスクの設定ページに移動し、削除されたソーステーブルをタスクに追加してから、タスクを実行するために送信します。このようにして、フル同期タスクと増分同期タスクはソーステーブルからデータを再度同期でき、ソーステーブルで実行されるDDL操作は無視できます。
リアルタイム同期サブタスクを開始する前に、サブタスクに設定されているDDL処理ポリシーを変更します。次の図に示すように、関連するDDLメッセージの処理ポリシーを無視またはエラー報告に変更できます。
説明DDL処理ポリシーの変更は一時的な操作です。フル同期タスクと増分同期タスクが再実行されると、リアルタイム同期サブタスクに設定されているDDL処理ポリシーの変更は上書きされます。フル同期タスクと増分同期タスクに設定されているDDL処理ポリシーを直接変更することもできます。
データ同期の際にダーティデータが生成されるため、フル同期タスクと増分同期タスクによって生成されたリアルタイム同期サブタスクが失敗します。
同期先フィールドのデータ型がソースフィールドのデータ型と互換性がないために、ダーティデータが生成される場合があります。非互換性が発生した場合は、リアルタイム同期サブタスク用に生成された実行ログまたはダーティデータに関する出力情報を表示して、問題がソースまたは同期先に存在するかどうかを確認します。同期先テーブルのスキーマに問題が存在する場合は、同期先テーブルを手動で再作成して、リアルタイム同期サブタスクを回復します。
同期先テーブルのフィールドのデータ型がソーステーブルのフィールドのデータ型と互換性があることを確認するために、同期先テーブルを手動で再作成し、フィールドのデータ型が同期先テーブルのフィールドのデータ型と互換性のないソーステーブルをフル同期タスクと増分同期タスクから削除し、ソーステーブルをタスクに再度追加してから、同期先テーブルのテーブル生成方法をフル同期タスクと増分同期タスクに対して[既存のテーブルを使用]に変更します。最後に、フル同期タスクと増分同期タスクを実行して、リアルタイム同期サブタスクを回復します。
Tunnelサービスでエラーが発生したため、同期タスクによって生成されたリアルタイム同期サブタスクが失敗します。
リアルタイム同期サブタスク用に生成されたログを表示して、ログに
InternalServerError
およびException when calling callable. Exception Msg: Read timed out
エラーメッセージが含まれているかどうかを確認できます。次の図を参照してください。これらのエラーメッセージは、Tunnelサービスで問題が発生していることを示しています。ログにエラーメッセージが含まれている場合は、MaxComputeの担当エンジニアに連絡して問題を解決してください。問題が解決したら、リアルタイム同期サブタスクを再起動します。
バイナリログが失われたシナリオ
バイナリログが失われた場合、ソースの一部の増分データを同期先に同期できません。この場合、ソースから同期先へのフルデータと増分データを再同期する必要があります。次のいずれかの方法を使用して、フル同期タスクと増分同期タスクを再開できます。
フル同期タスクと増分同期タスクを強制的に再実行する
シナリオ
同期タスクによって生成されたリアルタイム同期サブタスクが長時間失敗します。その結果、バイナリログが削除され、ソースの増分データを同期できません。
さまざまな理由により、同期先テーブルにはソーステーブルに新しく追加されたフィールドが含まれていません。
さまざまな理由により、同期先テーブルに同期されたデータでデータ損失などのデータ精度の問題が発生します。
操作
DataWorksコンソールの [ノード] ページの [データ統合] に移動し、フル同期タスクと増分同期タスクを見つけます。
タスクの [アクション] 列の [詳細] をクリックし、[強制再実行] を選択して、タスクを強制的に再実行し、すべてのソーステーブルから同期先テーブルにフルデータと増分データを再同期します。
[アクション] 列の [実行の詳細] をクリックして、タスクの実行の詳細を表示できます。
重要MaxComputeにデータを同期するために使用されるフル同期タスクと増分同期タスクを強制的に再実行する前に、再実行操作によって強制再実行の前後にタスクによって生成されたマージサブタスクのインスタンス間で競合が発生するかどうかを確認する必要があります。タスクを強制的に再実行すると、強制再実行の前に生成されたマージサブタスクのインスタンスが実行中であるか、実行される可能性があります。強制再実行の前後にタスクによって生成されたマージサブタスクのデータタイムスタンプが同じで、マージサブタスクが同時に実行される場合、同期先パーティションまたはテーブルのデータが互いに上書きされる可能性があります。
[オペレーションセンター] の 自動トリガーされたインスタンスの表示 ページに移動し、強制再実行の前にフル同期タスクと増分同期タスクによって生成されたマージサブタスクのインスタンスの実行状況を表示できます。再実行操作によって強制再実行の前後にタスクによって生成されたマージサブタスクのインスタンス間で競合が発生する場合は、次のいずれかの操作を実行して問題を解決できます。
強制再実行の前にフル同期タスクと増分同期タスクによって生成されたマージサブタスクのインスタンスが実行中の場合は、インスタンスの実行が完了した後にタスクを再実行します。
強制再実行の前にフル同期タスクと増分同期タスクによって生成されたマージサブタスクのインスタンスが実行を開始していない場合は、インスタンスをフリーズします。再実行操作が完了したら、インスタンスのフリーズを解除します。
シャーディングデータベースのテーブルからデータを同期するために使用される同期タスクは、強制的に再実行できません。
同期タスクの強制再実行をトリガーした後、タスクにテーブルを追加したり、タスクからテーブルを削除したりするなどの操作を実行しないことをお勧めします。タスクで操作を実行する場合は、強制再実行が完了するまで待ちます。強制再実行中にタスクで他の操作を実行すると、強制再実行は無効になります。タスクに対して別の強制再実行をトリガーする必要があります。
同期タスクを強制的に再実行した翌日にデータが生成されない場合、またはマージサブタスクの自動スケジューリングが再開されない場合は、次の問題が存在するかどうかを確認し、マージサブタスクのインスタンスのスケジューリングを手動で再開する必要があります。
同期タスクでレイテンシが発生した場合は、レイテンシの問題を解決します。詳細については、「リアルタイム同期ノードのレイテンシの解決策」をご参照ください。
前のサイクルのマージサブタスクのインスタンスが実行されていないか、実行に失敗した場合は、現在のサイクルのマージサブタスクのインスタンスの前のサイクルのマージサブタスクのインスタンスへの依存関係を削除できます。詳細については、「自動トリガーされたインスタンスの表示」をご参照ください。
フル同期タスクと増分同期タスクのフルデータをバックフィルする
タスクによって生成されたリアルタイム同期サブタスクを再起動します。
DataWorksコンソールの [オペレーションセンター] の [リアルタイムDI] ページに移動し、タスクによって生成されたリアルタイム同期サブタスクを見つけ、[アクション]列の[開始]をクリックしてサブタスクを再起動し、増分データの同期を再開します。
フル同期タスクと増分同期タスクのフルデータをバックフィルします。
DataWorksコンソールの [データ統合] の [ノード] ページに移動し、フル同期タスクと増分同期タスクを見つけます。
[アクション] 列の[詳細]をクリックし、[フルデータのバックフィル] を選択します。[フルデータのバックフィル]ダイアログボックスで、フルデータのバックフィルの設定を行います。
データバックフィルインスタンスのデータタイムスタンプを選択します。
前日の日付をデータタイムスタンプとして選択します。
フルデータをバックフィルするソーステーブルを選択します。
左側のリストで、フルデータを同期するテーブルを選択します。フル同期タスクと増分同期タスク全体を回復する場合は、すべてのテーブルを選択します。
アイコンをクリックして、選択したテーブルを右側のリストに移動します。
[OK] をクリックします。
実行の詳細を表示します。
[アクション] 列の [実行の詳細] をクリックして、タスクの実行の詳細を表示できます。
重要MaxComputeにデータを同期するために使用されるフル同期タスクと増分同期タスクのフルデータをバックフィルする前に、データバックフィルインスタンスのデータタイムスタンプを確認する必要があります。データバックフィルインスタンスがフルデータバックフィル操作の前に生成されたマージサブタスクのインスタンスと競合しないことを確認する必要があります。同期タスクのフルデータをバックフィルすると、フルデータバックフィル前に生成されたマージサブタスクのインスタンスが実行中であるか、実行される可能性があります。インスタンスのデータタイムスタンプが同じで、インスタンスが同時に実行される場合、同期先パーティションまたはテーブルのデータが互いに上書きされる可能性があります。
[オペレーションセンター] の 自動トリガーされたインスタンスの表示 ページに移動し、マージサブタスクのインスタンスの実行状況を表示できます。データバックフィルインスタンスがマージサブタスクのインスタンスと競合する場合は、次のいずれかの操作を実行して問題を解決できます。
マージサブタスクのインスタンスが実行中の場合は、インスタンスの実行が完了した後にタスクのフルデータをバックフィルします。
マージサブタスクのインスタンスが実行を開始していない場合は、インスタンスをフリーズします。フルデータバックフィル操作が完了したら、インスタンスのフリーズを解除します。
シャーディングデータベースのテーブルからデータを同期するために使用される同期タスクは、フルデータバックフィルをサポートしていません。
フルデータバックフィルを実行する前に、関連する注意事項をよく理解していることを確認する必要があります。また、翌日のできるだけ早い機会にデータバックフィルの結果を確認する必要があります。データバックフィルの翌日にデータが生成されない場合、またはマージサブタスクの自動スケジューリングが再開されない場合は、マージサブタスクのインスタンスのスケジューリングを手動で再開する必要があります。
別のフル同期タスクと増分同期タスクを作成する
DataWorksコンソールの [オペレーションセンター] の [リアルタイムDI] ページに移動し、フル同期タスクと増分同期タスクによって生成されたリアルタイム同期サブタスクを見つけ、[アクション]列の[停止]をクリックしてサブタスクの実行を停止します。
DataStudioページに移動し、フル同期タスクと増分同期タスクによって生成されたオフラインサブタスク(チェック完了サブタスクとマージサブタスクを含む)を見つけます。サブタスクを削除し、削除操作をデプロイします。
サブタスクに指定または自動作成されたDataStudioワークフローでオフラインサブタスクを見つけることができます。
同期先テーブルの生成方法が[既存のテーブルを使用]に設定されている 別のフル同期タスクと増分同期タスクを作成 し、タスクを実行します。
一部のテーブルのデータ同期を回復する
DataWorksコンソールの [データ統合] の [ノード] ページに移動し、フル同期タスクと増分同期タスクを見つけ、[詳細] 列の [編集] をクリックします。タスクの設定ページで、データの同期に失敗したソーステーブルをタスクから削除し、変更を保存してから、タスクを実行するために送信します。同じ方法で設定ページに移動し、削除されたソーステーブルをタスクに追加し、変更を保存してから、タスクを実行するために送信します。このようにして、テーブルからのデータ同期を回復できます。
履歴パーティションへのデータの同期を回復します。
データベースからMaxComputeにすべてのデータを同期するために使用されるフル同期タスクと増分同期タスクの場合、このトピックの「フル同期タスクと増分同期タスクのフルデータをバックフィルする」サブセクションを参照して、タスクのフルデータをバックフィルし、ソースのフルデータを同期先の履歴パーティションに同期できます。時間範囲に基づいて履歴データをバックフィルすることはできません。
他のタイプの同期タスクの場合、バッチ同期タスク を作成して履歴データをバックフィルする必要があります。
マージサブタスクでエラーが発生するシナリオ
問題の解決方法については、「MaxComputeにデータを同期するために使用されるフル同期タスクと増分同期タスクによって生成されたマージサブタスクの問題のトラブルシューティング」をご参照ください。