日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

日志投遞MaxCompute后,如何檢查數據完整性

在日志服務數據投遞MaxCompute場景下,需要在MaxCompute表分區維度上檢查數據完整性,即MaxCompute表中某個分區中數據是否已經完整。

檢查數據完整性

使用保留字段作為表分區列,判斷數據完整性

使用保留字段__partition_time__作為表分區列,如何判斷分區數據是否已完整

__partition_time__由日志的time字段計算得到,由日志的真實時間按照時間格式字符串向下取整得出。其中,日志真實時間既不是投遞數據的時間,也不是日志寫入服務端時間。

舉例:日志時間為2017-05-19 10:43:00,分區字段格式字符串配置為yyyy_MM_dd_HH_mm,每1小時投遞一次。那么無論該日志是什么時刻寫入服務端,這條日志會存入MaxCompute的2017_05_19_10_00分區,計算細節參考投遞日志到MaxCompute(舊版)

如果不考慮寫入了歷史數據等問題,在日志實時寫入的情況下,有以下兩種方法判斷分區數據是否已完整:

  • 通過API、SDK或控制臺判斷(推薦)

    使用APISDK或者控制臺獲取指定Project/Logstore投遞任務列表。例如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表示日志服務接收到數據的時間,根據該參數判斷時間為T以前的數據是否已經全部投遞到MaxCompute表。

    • 如果taskLastDataReceiveTime < T + 300s(300秒是為了容忍數據發送服務端發生錯誤重試)以前的每個投遞任務狀態都是success,說明T時刻的數據都已經入庫。

    • 如果任務列表中有ready或者running狀態任務,說明數據還不完整,需要等待任務執行結束。

    • 如果任務列表中有failed狀態任務,請查看原因并在解決后重試任務。您可以嘗試修改投遞配置,以解決投遞問題。

  • 通過MaxCompute分區粗略估計

    比如在MaxCompute中以半小時做一次分區,投遞任務為每30分鐘一次,當表中包含以下分區:

    2017_05_19_10_00
    2017_05_19_10_30

    當發現分區2017_05_19_11_00出現時,說明11:00之前分區數據已經完整。

    該方法不依賴API,判斷方式簡單但結果并不精確,僅用作粗略估計。

自定義日志字段作為表分區列,判斷數據完整性

使用自定義日志字段作為表分區列,如何判斷分區數據已完整

比如日志中有一個字段date,取值:20170518,20170519,在配置投遞規則時將date列映射到表分區列。

這種情況下,需要考慮date字段與寫入服務端時間差,結合使用保留字段方法,根據接收日志數據時間判斷。

相關問題

投遞成功,但MaxCompute表數據有缺失,應如何解決?

MaxCompute投遞任務狀態成功,但表中數據缺失,一般有以下原因:

  • 表分區列映射的日志服務字段的名稱不存在。此時投遞過去的列值為null,而MaxCompute表不允許分區列值為null。

  • 表分區列映射的日志服務字段的值包含正斜線(/)或其他特殊符號。MaxCompute將這些字符作為保留字,不允許在分區列中出現。

遇到這些情況時,投遞策略為忽略異常的日志行,并繼續任務,在該次任務中其它分區正確的日志行可以成功同步。

因此,在配置字段映射不當的情況下,可能出現任務成功但是表中缺少數據的情況,請修改分區列配置。建議使用保留字段__partition_time__作為分區。

更多細節請參考使用限制