すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:MaxCompute におけるデータ完全性の検証

最終更新日:Mar 26, 2026

Simple Log Service から MaxCompute にデータを転送する際は、パーティションレベルでデータの完全性を検証します。このチェックにより、MaxCompute テーブルの特定のパーティションのすべてのデータが配信されたことを確認します。

データ完全性の検証

予約済みフィールド

__partition_time__ フィールドの使用

__partition_time__ の値は、ログの time フィールドから派生します。Simple Log Service は、指定された時刻フォーマット文字列に基づいてログのイベント時間を切り捨てることで、この値を計算します。イベント時間とは、データが転送されたりサーバーに書き込まれたりした時間ではなく、ログの実際の時間です。

例えば、ログのイベント時間が 2017-05-19 10:43:00 で、パーティションのフォーマット文字列が yyyy_MM_dd_HH_mm に設定され、データが 1 時間ごとに転送される場合、MaxCompute はサーバーへの書き込み時間に関係なく、このログを 2017_05_19_10_00 パーティションに保存します。この計算の詳細については、「MaxCompute へのログの転送 (レガシー)」をご参照ください。

既存データではなくリアルタイムでログを書き込んでいる場合は、以下のいずれかの方法を使用して、パーティション内のデータが完全であるかを確認します。

  • API、SDK、またはコンソールを使用します。これは推奨される方法です。

    APISDK、またはコンソールを使用して、特定のプロジェクトと Logstore の転送タスクを取得します。API はタスクのリストを返し、コンソールはそれを可視化します。以下は API 応答の例です。

    {
      "count" : 10,
      "total" : 20,
      "statistics" : {
          "running" : 0,
          "success" : 20,
          "fail" : 0 
      }
      "tasks" : [
          ...
          {
              "id" : "abcdefghijk",
              "taskStatus" : "success",
              "taskMessage" : "",
              "taskCreateTime" : 1448925013,
              "taskLastDataReceiveTime" : 1448915013,
              "taskFinishTime" : 1448926013
          },
          {
              "id" : "xfegeagege",
              "taskStatus" : "success",
              "taskMessage" : "",
              "taskCreateTime" : 1448926813,
              "taskLastDataReceiveTime" : 1448930000,
              "taskFinishTime" : 1448936910
          }
      ]
    }

    taskLastDataReceiveTime は、Simple Log Service がデータを受信した時刻を示します。このパラメーターを使用して、時刻 T より前のすべてのデータが MaxCompute テーブルに配信されたかどうかを判断できます。

    • 時刻 T + 300s より前の taskLastDataReceiveTime を持つすべての転送タスクのステータスが success であれば、時刻 T より前のデータは完全であると見なすことができます。300 秒のバッファーは、一時的なエラーによるリトライの可能性を考慮したものです。

    • いずれかのタスクが ready または running 状態の場合、データ配信はまだ進行中です。これらのタスクが完了するまで待機してください。

    • いずれかのタスクが失敗した場合は、原因を調査して問題を解決し、タスクをリトライしてください。問題を修正するために、転送タスクの構成を変更する必要がある場合があります。

  • MaxCompute パーティションに基づいて完全性を推定する

    例えば、MaxCompute テーブルをパーティション分割し、転送タスクを 30 分ごとに実行すると、次のようなパーティションが表示されます。

    2017_05_19_10_00
    2017_05_19_10_30

    2017_05_19_11_00 パーティションが作成されると、それ以前のすべてのパーティション (11:00 より前) のデータは完全であると見なすことができます。

    この方法はより簡単で API を必要としませんが、精度は低く、おおよその推定しかできません。

カスタムフィールド

このメソッドの仕組み

例えば、ログには 2017051820170519 などの値を持つ date フィールドが含まれている場合があります。転送ルールを構成する際に、この date フィールドをパーティションキー列にマッピングできます。

この場合、date フィールドの値とログの書き込み時間の差も考慮する必要があります。完全性を検証するには、データ受信時刻に依存する「予約済みフィールドをパーティションキー列として使用してデータ完全性を検証する」で説明されている方法と組み合わせます。

トラブルシューティング

タスクは成功するがデータが欠落している場合

転送タスクが成功したにもかかわらず、MaxCompute テーブルにデータが欠落している場合は、次のいずれかの原因が考えられます。

  • パーティションキー列にマッピングされている Simple Log Service のソースフィールドが存在しない。これにより、パーティションキーの値が null になりますが、これは MaxCompute では許可されていません。

  • パーティションキー列にマッピングされている Simple Log Service フィールドの値に、スラッシュ (/) やその他の特殊文字が含まれている。MaxCompute はこれらの文字を予約語として扱うため、パーティションキーの値での使用を禁止しています。

これらの問題が発生すると、転送タスクは無効なログをスキップして処理を続行します。タスクは、他の有効なログを正しいパーティションに配信します。

したがって、タスクのステータスが success であっても、フィールドマッピングが正しくないとデータ損失が発生する可能性があります。これを解決するには、パーティション列の構成を修正してください。パーティション分割には、予約済みフィールドである __partition_time__ を使用することを推奨します。

詳細については、「制限事項」をご参照ください。