1

我在 azure 表存储中有大约 300 万行来自日志文件的数据。表中的每一行都是对某个事件的检测(这可能是每个客户端 1 或 100 行数据,直到它在那里我们才知道)并且有许多不同的事件。

对于每个事件,我需要从每个客户端的每一行的时间戳中找到事件的持续时间。如果结束时间和开始时间之间存在差距,则将被视为新事件。EventId 是该行的 Partition Key,由时间戳到 epoch 和客户端 ID 的组合键组成 rowKey。

Azure 表存储如下所示,带有一些示例数据:

PartitionKey     RowKey          ClientId     Epoch       Additional
1                1370966492_1    1            1370969592  34
1                1370967792_1    1            1370967792  63
2                1370969592_1    1            1370969592  34
1                1370972592_1    2            1370972592  47
1                1370973542_1    1            1370969592  44
2                1370976562_1    1            1370976562  18
1                1370978592_1    2            1370978592  92
3                1370981542_1    2            1370981542  34
2                1370982562_1    1            1370982562  37
1                1370982592_1    1            1370982592  73

我需要的输出是(与上述数据无关的示例:

EventId    ClientId    StartTime    EndTime      Max(additional)
1          1           1370966492   1370973492   78
1          2           1370967834   1370979536   29

处理数据的最有效方式是什么?是否将数据保存在表存储中?一旦我处理了这些日志,如果需要,就可以将导入过程更改为表存储。

4

1 回答 1

0

RowKey 中的日期可能需要不同的格式。问题是 RowKey 和 PartitionKey 都是字符串,那么比较总是 OrdinalCase。您必须提供一种格式来表示具有相同字符数的所有日期,并且 OrdinalCase 比较与 Dates 比较相同。例如:20130805122200 (yyyyMMddhhmmss)。

另一件事是 TableStorage 服务的工作方式如下: - 搜索给定的 PartitionKey - 对于匹配搜索给定 RowKey 的每个分区 - 对于匹配搜索任何其他条件的每个实体

然后在上面的示例中,您在 RowKey 中使用日期和事件。如果您总是按日期搜索,我建议您也将此属性包含在 PartitionKey 中。

于 2013-08-05T16:30:29.420 回答