Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
Вычисляет строковое выражение и анализирует его значение в одном или нескольких вычисляемых столбцах. Результатом являются только успешно проанализированные строки.
parse-where анализирует строки так же, как синтаксический анализ, и фильтрует строки, которые не были успешно проанализированы.
См. оператор синтаксического анализа, который создает значения NULL для неудачно проанализированных строк.
Syntax
Выражение T| parse-where [kind= [flags=regexFlags]]with* (stringConstantcolumnName [:columnType]) *...
Дополнительные сведения о соглашениях синтаксиса.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| T | string |
✔️ | Табличные входные данные для синтаксического анализа. |
| kind | string |
✔️ | Одно из поддерживаемых значений типа. Значение по умолчанию — simple. |
| regexFlags | string |
Если тип имеет regexвид, то можно указать флаги regex, которые будут использоваться как U для непрогрежденных, m для многострочный режим, s для соответствия новой строке \nи i для без учета регистра. Дополнительные флаги можно найти в флагах. |
|
| expression | string |
✔️ | Выражение, результатом которого является строка. |
| stringConstant | string |
✔️ | Строковая константа, для которой выполняется поиск и анализ. |
| columnName | string |
✔️ | Имя столбца, которому назначается значение. Извлекается из строкового выражения. |
| columnType | string |
Скалярное значение, указывающее тип, в который необходимо преобразовать значение. Значение по умолчанию — string. |
Note
- Используйте проект , если вы также хотите удалить или переименовать некоторые столбцы.
- Используйте
*шаблон для пропуска нежелательных значений. Это значение нельзя использовать послеstringстолбца. - Шаблон синтаксического анализа может начинаться с ColumnName в дополнение к StringConstant.
- Если проанализированное выражение не является типом
string, оно будет преобразовано в типstring.
Поддерживаемые значения типа
| Text | Description |
|---|---|
simple |
Это значение по умолчанию. stringConstant — это обычное строковое значение, и совпадение строго. Все строковые разделители должны присутствовать в проанализированной строке, и все расширенные столбцы должны соответствовать требуемым типам. |
regex |
stringConstant может быть регулярным выражением, и совпадение строго. Все строковые разделители, которые могут быть регулярными выражениями при использовании этого режима, должны присутствовать в проанализированной строке, и все расширенные столбцы должны соответствовать требуемым типам. |
Режим регулярных выражений
В режиме регулярных выражений синтаксический анализ преобразует шаблон в regex и использует регулярные выражения для выполнения сопоставления с использованием нумерованных записных групп, которые обрабатываются внутренне. Рассмотрим пример.
parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long
Регулярное выражение, которое будет создано внутренним .*?<regex1>(.*?)<regex2>(\-\d+)анализом.
-
*преобразовано в.*?. -
stringпреобразовано в.*?. -
longпреобразовано в\-\d+.
Returns
Входная таблица, которая расширяется в соответствии со списком столбцов, предоставляемых оператору.
Note
Только успешно проанализированные строки будут находиться в выходных данных. Строки, которые не соответствуют шаблону, будут отфильтрованы.
Examples
В примерах этого раздела показано, как использовать синтаксис для начала работы.
Примеры, приведенные в этой статье, используют общедоступные таблицы в кластере справки, например
StormEventsтаблицу в базе данных Samples .
В примерах этой статьи используются общедоступные таблицы, такие как
Weatherтаблица в коллекции примеров Weather Analytics. Возможно, потребуется изменить имя таблицы в примере запроса, чтобы она соответствовала таблице в рабочей области.
Оператор parse-where предоставляет упрощенный способ использования extend для таблицы путем применения нескольких операторов extract в одном выражении string. Это наиболее полезно, если в таблице есть string столбец, содержащий несколько значений, которые необходимо разбить на отдельные столбцы. Например, можно разбить столбец, созданный инструкцией трассировки разработчика ("printf/"Console.WriteLine").
С использованием parse
В приведенном ниже примере столбец EventText таблицы Traces содержит строки формы Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5}). Следующая операция расширяет таблицу с шестью столбцами: resourceName , totalSlicessliceNumber, lockTime, , , releaseTimepreviousLockTimeMonthи .Day
Несколько строк не имеют полного совпадения.
При использовании parseвычисляемые столбцы будут иметь значения NULL.
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=invalid_number, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=invalid_datetime, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=invalid_number, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse EventText with * "resourceName=" resourceName ", totalSlices=" totalSlices: long * "sliceNumber=" sliceNumber: long * "lockTime=" lockTime ", releaseTime=" releaseTime: date "," * "previousLockTime=" previouLockTime: date ")" *
| project
resourceName,
totalSlices,
sliceNumber,
lockTime,
releaseTime,
previouLockTime
Output
| resourceName | totalSlices | sliceNumber | lockTime | releaseTime | previousLockTime |
|---|---|---|---|---|---|
| PipelineScheduler | 27 | 20 | 02/17/2016 08:40:01 | 2016-02-17 08:40:01.0000000 | 2016-02-17 08:39:01.0000000 |
| PipelineScheduler | 27 | 22 | 02/17/2016 08:41:01 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:01.0000000 |
С использованием parse-where
При использовании "синтаксического анализа" отфильтруются неудачно проанализированные строки из результата.
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=invalid_number, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=invalid_datetime, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=invalid_number, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse-where EventText with * "resourceName=" resourceName ", totalSlices=" totalSlices: long * "sliceNumber=" sliceNumber: long * "lockTime=" lockTime ", releaseTime=" releaseTime: date "," * "previousLockTime=" previousLockTime: date ")" *
| project
resourceName,
totalSlices,
sliceNumber,
lockTime,
releaseTime,
previousLockTime
Output
| resourceName | totalSlices | sliceNumber | lockTime | releaseTime | previousLockTime |
|---|---|---|---|---|---|
| PipelineScheduler | 27 | 20 | 02/17/2016 08:40:01 | 2016-02-17 08:40:01.0000000 | 2016-02-17 08:39:01.0000000 |
| PipelineScheduler | 27 | 22 | 02/17/2016 08:41:01 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:01.0000000 |
Режим regex с помощью флагов regex
Чтобы получить имя ресурса и totalSlices, используйте следующий запрос:
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=11, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=44, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse-where kind = regex EventText with * "RESOURCENAME=" resourceName "," * "totalSlices=" totalSlices: long "," *
| project resourceName, totalSlices
Output
| resourceName | totalSlices |
|---|---|
parse-where с флагом регрессии без учета регистра
В приведенном выше запросе режим по умолчанию учитывает регистр, поэтому строки были успешно проанализированы. Результат не получен.
Чтобы получить необходимый результат, запустите parse-where с флагом регистра без учета регистра (i) regex.
Только три строки будут успешно проанализированы, поэтому результат — три записи (некоторые итоговые данные содержат недопустимые целые числа).
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=11, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=44, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse-where kind = regex flags=i EventText with * "RESOURCENAME=" resourceName "," * "totalSlices=" totalSlices: long "," *
| project resourceName, totalSlices
Output
| resourceName | totalSlices |
|---|---|
| PipelineScheduler | 27 |
| PipelineScheduler | 27 |
| PipelineScheduler | 27 |