Конвейерный запрос Kusto Query
Я пытаюсь создать еще один столбец из данных конвейера с помощью проводника данных Azure / запросов Kusto. Я новичок в Кусто и не знаю, как это сделать. Цель для каждого покупателя,
- Если предыдущий прогон не удался, а последний прогон не удался, получите разницу в днях / часах между сбоями.
- Если предыдущий запуск был успешным, а последний - неудачным, получите разницу в днях / часах между событиями.
- Если предыдущее событие не удалось, а последнее событие было успешным, игнорируйте.
Набор данных
Customers PipelineType PipelineState TimeStamp
CustomerA PipelineA Succes 2021-08-13 12:59:03.0073653
CustomerA PipelineA Fail 2021-08-13 09:59:03.0124853
CustomerA PipelineB Succes 2021-08-13 11:56:03.0151948
CustomerA Pipeline B Fail 2021-08-12 17:56:03.0019445
CustomerA Pipeline C Succes 2021-08-13 13:16:03.0015617
CustomerA Pipeline C Fail 2021-07-30 21:52:03.0157372
CustomerB PipelineA Succes 2021-08-13 12:59:03.0073331
CustomerB PipelineA Succes 2021-08-13 12:57:03.0099138
CustomerB PipelineB Fail 2021-07-30 03:33:03.0123262
CustomerB Pipeline B Succes 2021-08-13 13:16:03.0015297
CustomerB Pipeline C Fail 2021-08-13 12:57:03.0099499
CustomerB Pipeline C Succes 2021-08-13 13:16:03.0016348
CustomerC PipelineA Succes 2021-08-13 13:16:03.0016999
CustomerC PipelineA Succes 2021-08-13 12:59:03.0074113
CustomerC PipelineB Succes 2021-08-13 10:56:03.0075546
CustomerC Pipeline B Fail 2021-08-11 06:54:03.0118628
CustomerC Pipeline C Fail 2021-08-13 13:16:03.0016233
CustomerC Pipeline C Fail 2021-08-13 12:59:03.0072337
``
1 ответ
Если я правильно понимаю требования, вы можете отсортировать свой набор данных, а затем использовать
case()
и
prev()
функции.
Например:
datatable(customer:string, PipelineType:string, PipelineState:string, TimeStamp:datetime)
[
'CustomerA', 'Pipeline A', 'Fail', datetime(2021-08-13 12:59:03.0073653),
'CustomerA', 'Pipeline A', 'Fail', datetime(2021-08-13 09:59:03.0124853),
'CustomerA', 'Pipeline B', 'Success', datetime(2021-08-13 11:56:03.0151948),
'CustomerA', 'Pipeline B', 'Fail', datetime(2021-08-12 17:56:03.0019445),
'CustomerA', 'Pipeline C', 'Success', datetime(2021-08-13 13:16:03.0015617),
'CustomerA', 'Pipeline C', 'Fail', datetime(2021-07-30 21:52:03.0157372),
'CustomerB', 'Pipeline A', 'Fail', datetime(2021-08-13 12:59:03.0073331),
'CustomerB', 'Pipeline A', 'Success', datetime(2021-08-13 12:57:03.0099138),
'CustomerB', 'Pipeline B', 'Fail', datetime(2021-07-30 03:33:03.0123262),
'CustomerB', 'Pipeline B', 'Success', datetime(2021-08-13 13:16:03.0015297),
'CustomerB', 'Pipeline C', 'Fail', datetime(2021-08-13 12:57:03.0099499),
'CustomerB', 'Pipeline C', 'Success', datetime(2021-08-13 13:16:03.0016348),
'CustomerC', 'Pipeline A', 'Fail', datetime(2021-08-13 13:16:03.0016999),
'CustomerC', 'Pipeline A', 'Fail', datetime(2021-08-13 12:59:03.0074113),
'CustomerC', 'Pipeline B', 'Success', datetime(2021-08-13 10:56:03.0075546),
'CustomerC', 'Pipeline B', 'Fail', datetime(2021-08-11 06:54:03.0118628),
'CustomerC', 'Pipeline C', 'Fail', datetime(2021-08-13 13:16:03.0016233),
'CustomerC', 'Pipeline C', 'Fail', datetime(2021-08-13 12:59:03.0072337),
]
| order by customer asc, PipelineType asc, TimeStamp asc
| extend result = case(prev(customer) == customer and prev(PipelineType) == PipelineType and PipelineState == 'Fail', TimeStamp - prev(TimeStamp), timespan(null))