全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
日志服务

日志投递MaxCompute后,如何检查数据完整性

更新时间:2017-07-21 10:24:13

在日志服务数据投递MaxCompute场景下,需要在MaxCompute表分区维度上检查数据完整性,即MaxCompute表中某个分区中数据是否已经完整。

使用日志自定义字段作为表分区列

比如用户日志中由字段datetime(20170518,20170519等取值),将该列值映射到表分区列。

那么分区列的值是否完整,这种情况需要用户结合投递任务的间隔考虑方法来检查。

使用日志服务保留字段__partition_time__作为表分区列

__partition_time__由日志的time字段计算得到,表示日志本身时间,而不是投递数据的时间,参考MaxCompute投递字段说明

比如日志时间为2017-05-19 10:43:00,那么对应MaxCompute分区列的值为2017_05_19_10_00(具体格式请参考您配置的分区格式字符串)。

在考虑写入日志时间递增有序的情况下,有两个方法:

  • 通过API判断(推荐)

    使用API或者SDK获取指定Project/Logstore投递任务列表如下:

    1. {
    2. "count" : 10,
    3. "total" : 20,
    4. "statistics" : {
    5. "running" : 0,
    6. "success" : 20,
    7. "fail" : 0
    8. }
    9. "tasks" : [
    10. ...
    11. {
    12. "id" : "abcdefghijk",
    13. "taskStatus" : "success",
    14. "taskMessage" : "",
    15. "taskCreateTime" : 1448925013,
    16. "taskLastDataReceiveTime" : 1448915013,
    17. "taskFinishTime" : 1448926013
    18. },
    19. {
    20. "id" : "xfegeagege",
    21. "taskStatus" : "success",
    22. "taskMessage" : "",
    23. "taskCreateTime" : 1448926813,
    24. "taskLastDataReceiveTime" : 1448930000,
    25. "taskFinishTime" : 1448936910
    26. }
    27. ]
    28. }

    根据taskLastDataReceiveTime(该批任务中最后一条日志到达服务端时的机器系统时间)判断。

    比如判断指定时刻T以前的数据是否已经全部投递到MaxCompute表,需要保证taskLastDataReceiveTime + 300s(容忍数据发送服务端发生错误重试需要的时间)以前的每个投递任务状态是success的即可。

    如有任务在ready/running状态需要等待任务结束;如任务failed需要查看原因并重试。

  • 通过MaxCompute分区判断

    该方法不依赖API,判断方式会比较简单,但是结果有一定的不准确概率。

    比如在MaxCompute中以半小时做一次分区,投递任务为每30分钟一次,当表中包含以下分区时:

    1. 2017_05_19_10_00
    2. 2017_05_19_10_30
    3. 2017_05_19_11_00

    当发现分区2017_05_19_11_00出现时,说明11:00之前分区数据已经完整。

成功投递后表格数据缺失原因

MaxCompute投递任务状态成功,但表中数据缺失,一般是由以下原因造成的。

  • 表分区列映射的日志服务字段名在数据中不存在。此时投递过去的列值为null,而MaxCompute表不允许分区列值为null。
  • 表分区列映射的日志服务字段的值包含一些特殊符号(比如/)。MaxCompute将这些字符作为保留字,不允许在分区列中出现。

遇到这种情况时,目前的投递策略是忽略异常的日志行,将任务继续下去,使得同批任务中其它正确的日志行可以同步过去。

因此在配置字段映射不当的情况下,可能出现任务成功但是表中缺少数据的情况。

更多细节请参考MaxCompute投递相关限制说明

本文导读目录