Как улучшить KQL-запрос для большого набора данных для тепловой карты

У меня есть запрос KQL ниже, который предоставит действительно хорошую тепловую карту для отображения верхнего доступа по странам для Azure WAF.

Проблема здесь в том, что этот запрос не может выходить за рамки 24 часов, так как количество записей у меня слишком велико. Как я могу улучшить это, чтобы даже отображать как еженедельную, так и ежемесячную статистику?

      // source: https://datahub.io/core/geoip2-ipv4
set notruncation;
let CountryDB=externaldata(Network:string, geoname_id:string, continent_code:string, continent_name:string, country_iso_code:string, country_name:string)
[@"https://datahub.io/core/geoip2-ipv4/r/geoip2-ipv4.csv"]
| extend Dummy=1;
let AppGWAccess = AzureDiagnostics
| where ResourceType == "APPLICATIONGATEWAYS"
| where Category == "ApplicationGatewayAccessLog"
| where userAgent_s !in ("bot")
| project TimeGenerated, clientIP_s;
AppGWAccess
| extend Dummy=1
| summarize count() by Hour=bin(TimeGenerated,6h), clientIP_s,Dummy
| partition by Hour(
                  lookup (CountryDB|extend Dummy=1) on Dummy
                | where ipv4_is_match(clientIP_s, Network)
                )
| summarize sum(count_) by country_name

1 ответ

То, что вы делаете, - это ежечасное агрегирование всех данных. Вместо этого вы должны создать материализованное представление, которое будет выполнять агрегирование в фоновом режиме за вас.

Цитата из документации:

Материализованные представления предоставляют запрос агрегирования по исходной таблице. Материализованные представления всегда возвращают актуальный результат запроса агрегирования (всегда свежий). Запрос к материализованному представлению более эффективен, чем выполнение агрегирования непосредственно над исходной таблицей, которое выполняется при каждом запросе.

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