Шаблон RowKey журналов аудита SQL Azure

Я настроил SQL-сервер Azure для хранения журналов аудита в учетной записи хранения. Он создал таблицу под названием SQLDBAuditLogsMYDBNAME, Это хорошо, и я также могу заглянуть в таблицу и посмотреть журналы.

Проблема в том, что полезную фильтрацию можно применять только к PartitionKey и RowKey (не Timestamp, что мне и нужно). PartitionKey содержит имя сервера и базы данных, поэтому это не поможет. Однако RowKeys расположены в определенном порядке, и, похоже, это связано с меткой времени (вторая часть после звездочки - GUID). К сожалению, я не могу узнать, как угадать RowKey на основе DateTime.

Вы можете увидеть три пары значений здесь:

| 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 а потом принимайте это как галочки и тд) но безуспешно.

Можете ли вы увидеть способ получить правильный диапазон RowKey из диапазона дат?

1 ответ

Решение

Можете ли вы увидеть способ получить правильный диапазон 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. Или вы можете использовать эту ссылку, чтобы проверить, каков результат, который конвертирует отметки в datetime.

Проблема в том, что полезную фильтрацию можно применять только к PartitionKey и RowKey (не Timestamp, что мне и нужно).

Однако, как вы упомянули, вы думаете, что можете фильтровать хранилище таблиц только с помощью PartitionKey и RowKey.

AFAIK, вы также можете использовать TimeStamp для фильтрации хранения таблицы. Для получения более подробной информации о том, как фильтровать, вы можете обратиться к этому делу.

Другие вопросы по тегам