我已配置Azure SQL服务器以将审核日志存储在存储帐户中。它创建了一个名为SQLDBAuditLogsMYDBNAME
的表。这很好,我也可以查看表格并查看日志。
问题是可用的过滤只能应用于PartitionKey和RowKey(而不是Timestamp,这是我需要的)。 PartitionKey包含服务器和数据库名称,因此没有任何帮助。但是,RowKeys按特定顺序排列,似乎与Timestamp有关(星号为GUID后的第二部分)。不幸的是,我无法找到如何根据DateTime猜测RowKey。
您可以在此处看到三个值对:
| Timestamp | RowKey |
| 2017-04-13T15:30:00.630Z | 2519102033993698531*7588f70d-0b4e-49... |
| 2017-04-13T16:15:00.615Z | 2519102006993841015*1667d291-bbef-40... |
| 2017-04-13T17:15:01.255Z | 2519101970987444854*6f4dca8f-e81a-4a... |
如您所见,数字按降序排列。
我尝试了很多种组合(例如,从long.MaxValue
中减去数字,然后将其作为Ticks等等),但没有成功。
你能看到从日期范围获得正确的RowKey范围的方法吗?
答案 0 :(得分:0)
你能看到从日期范围获得正确的RowKey范围的方法吗?
关系是:DateTime.MaxValue-TimeStamp=Rowkey
因为TimeStamp是一个除数,所以在TimeStamp中会忽略一些毫秒。因此,您可以使用DateTime.MaxValue-RowKey来实现模糊查询。 以下代码使用您提供的第一组数据。
var ticks = DateTime.MaxValue.Ticks - 2519102033993698531;
DateTime datetime = new DateTime(ticks);
Console.WriteLine(datetime.ToString());
屏幕截图:
与TimeStamp几乎相同。或者您可以使用此link来检查将ticks转换为datetime的结果。
问题是可用的过滤只能应用于PartitionKey和RowKey(而不是Timestamp,这是我需要的)。
但是,正如您所提到的,您认为只能使用PartitionKey和RowKey过滤表存储。
AFAIK,您还可以使用TimeStamp过滤表格存储空间。有关如何过滤的更多详细信息,请参阅此case。