Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
Извлекает структурированные сведения из строкового выражения и представляет сведения в форме key/value.
Поддерживаются следующие режимы извлечения:
- Указанный разделитель: извлечение на основе указанных разделителей, которые определяют, как ключи и значения и пары отделены друг от друга.
- не указанного разделителя: извлечение без необходимости указывать разделители. Любой неэлементный символ считается разделителем.
- Regex: извлечение на основе регулярных выражений.
Синтаксис
Указанный разделитель
T|parse-kv[ as() [with( ...]] [ ]pair_delimiter=,kv_delimiter
Неопределенный разделитель
| [ parse-kvas [( ...]])
Регулярное выражение
|
parse-kv
as
( KeyList)with(regex= RegexPattern))
Дополнительные сведения о соглашениях синтаксиса.
Параметры
| Имя (название) | Type | Обязательно | Описание |
|---|---|---|---|
| Выражение | string |
✔️ | Выражение, из которого необходимо извлечь значения ключей. |
| KeyList | string |
✔️ | Разделенный запятыми список имен ключей и их типов данных значений. Порядок ключей не должен соответствовать порядку, в котором они отображаются в тексте. |
| PairDelimiter | string |
Разделитель, разделитель, разделяющий пары значений ключей друг от друга. | |
| KvDelimiter | string |
Разделитель, который отделяет ключи от значений. | |
| Кавычки | string |
Одно-или двухзначный строковый литерал, представляющий открывающие и закрывающие кавычки, с которыми может быть заключено имя ключа или извлеченное значение. Параметр может повторяться, чтобы указать отдельный набор открывающих и закрывающих кавычки. | |
| EscapeChar | string |
Однозначный строковый литерал, описывающий символ, который может использоваться для экранирования специальных символов в кавычках. Параметр может повторяться, если используются несколько escape-символов. | |
| RegexPattern | string |
Регулярное выражение , содержащее две группы записи точно. Первая группа представляет имя ключа, а вторая группа представляет значение ключа. |
Возвраты
Исходное табличное выражение ввода T, расширенное столбцами на указанные ключи для извлечения.
Примечание.
- Если ключ не отображается в записи, соответствующее значение столбца равно
nullили пустой строке в зависимости от типа столбца. - Извлекаются только ключи, перечисленные в операторе.
- Первый вид ключа извлекается, а последующие значения игнорируются.
- При извлечении ключей и значений начальные и конечные пробелы игнорируются.
Примеры
В примерах этого раздела показано, как использовать синтаксис для начала работы.
Извлечение с четко определенными разделителями
В этом запросе ключи и значения разделены четко определенными разделителями. Эти делиметры являются символами запятых и двоеточий.
print str="ThreadId:458745723, Machine:Node001, Text: The service is up, Level: Info"
| parse-kv str as (Text: string, ThreadId:long, Machine: string) with (pair_delimiter=',', kv_delimiter=':')
| project-away str
Выходные данные
| Текст | ThreadId | Компьютер |
|---|---|---|
| Служба выполняется | 458745723 | Node001 |
Извлечение с кавычением значений
Иногда имена ключей или значения упаковываются в кавычки, что позволяет самим значениям содержать символы разделителя. В следующих примерах показано, как quote аргумент используется для извлечения таких значений.
print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure="connection aborted" "event time"=2021-01-01T10:00:54'
| parse-kv str as (['event time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='"')
| project-away str
Выходные данные
| время события. | src | dst | байт | сбой, |
|---|---|---|---|---|
| 2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | прервано подключение |
Этот запрос использует различные кавычки открытия и закрытия:
print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure=(connection aborted) (event time)=(2021-01-01 10:00:54)'
| parse-kv str as (['event time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='()')
| project-away str
Выходные данные
| время события. | src | dst | байт | сбой, |
|---|---|---|---|---|
| 2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | прервано подключение |
Сами значения могут содержать правильно экранированные символы кавычки, как показано в следующем примере:
print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure="the remote host sent \\"bye!\\"" time=2021-01-01T10:00:54'
| parse-kv str as (['time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='"', escape='\\')
| project-away str
Выходные данные
| Время | src | dst | байт | сбой, |
|---|---|---|---|---|
| 2021-01-01 10:00:54.0000000 | 10.1.1.123 | 10.1.1.124 | 125 | удаленный узел отправил "bye!" |
Извлечение в жадном режиме
Существуют случаи, когда неквотируемые значения могут содержать разделители пар. В этом случае используйте greedy режим, чтобы указать оператору, чтобы проверить до следующего внешнего вида ключа (или конца строки) при поиске окончания значения.
В следующих примерах сравнивается работа оператора с заданным режимом и без нее greedy .
print str='name=John Doe phone=555 5555 city=New York'
| parse-kv str as (name:string, phone:string, city:string) with (pair_delimiter=' ', kv_delimiter='=')
| project-away str
Выходные данные
| name | phone | city |
|---|---|---|
| Джон | 555 | Новый |
print str='name=John Doe phone=555 5555 city=New York'
| parse-kv str as (name:string, phone:string, city:string) with (pair_delimiter=' ', kv_delimiter='=', greedy=true)
| project-away str
Выходные данные
| name | phone | city |
|---|---|---|
| Александр Демидов | 555 5555 | Нью-Йорк |
Извлечение без четко определенных разделителей
В следующем примере любой нефанумерный символ считается допустимым разделителем:
print str="2021-01-01T10:00:34 [INFO] ThreadId:458745723, Machine:Node001, Text: Started"
| parse-kv str as (Text: string, ThreadId:long, Machine: string)
| project-away str
Выходные данные
| Текст | ThreadId | Компьютер |
|---|---|---|
| Запуск | 458745723 | Node001 |
В этом режиме разрешены кавыки и экранирование значений, как показано в следующем примере:
print str="2021-01-01T10:00:34 [INFO] ThreadId:458745723, Machine:Node001, Text: 'The service \\' is up'"
| parse-kv str as (Text: string, ThreadId:long, Machine: string) with (quote="'", escape='\\')
| project-away str
Выходные данные
| Текст | ThreadId | Компьютер |
|---|---|---|
| Служба " работает | 458745723 | Node001 |
Извлечение с помощью regex
Если разделители не определяют структуру текста достаточно, извлечение на основе регулярных выражений может оказаться полезным.
print str=@'["referer url: https://hostname.com/redirect?dest=/?h=1234", "request url: https://hostname.com/?h=1234", "advertiser id: 24fefbca-cf27-4d62-a623-249c2ad30c73"]'
| parse-kv str as (['referer url']:string, ['request url']:string, ['advertiser id']: guid) with (regex=@'"([\w ]+)\s*:\s*([^"]*)"')
| project-away str
Выходные данные
| URL-адрес ссылки на ссылку | URL-адрес запроса | идентификатор рекламодателя |
|---|---|---|
https://hostname.com/redirect?dest=/?h=1234 |
https://hostname.com/?h=1234 |
24fefbca-cf27-4d62-a623-249c2ad30c73 |