Оператор parseparse operator

оценивает выражение строки и разбирает его на один или несколько вычисляемых столбцов.Evaluates a string expression and parses its value into one or more calculated columns. Вычисляемые столбцы будут иметь значения NULL для неудачно проанализированных строк.The calculated columns will have nulls, for unsuccessfully parsed strings. Если нет необходимости использовать строки, которые не удалось проанализировать, рекомендуем использовать оператор parse-where.If there is no need to use rows where parsing doesn't succeed, prefer using the parse-where operator.

T | parse Text with "ActivityName=" name ", ActivityType=" type

СинтаксисSyntax

T | parse [kind=regex [flags=regex_flags] |simple|relaxed] Expression with * (StringConstant ColumnName [: ColumnType]) *...T | parse [kind=regex [flags=regex_flags] |simple|relaxed] Expression with * (StringConstant ColumnName [: ColumnType]) *...

АргументыArguments

  • T — входная таблица.T: The input table.

  • kind:kind:

    • simple (по умолчанию) — StringConstant — это значение строки регулярного выражения, и соответствие является строгим.simple (the default): StringConstant is a regular string value and the match is strict. Все строковые разделители должны присутствовать в проанализированной строке, и все расширенные столбцы должны соответствовать требуемым типам.All string delimiters should appear in the parsed string, and all extended columns must match the required types.

    • regex — StringConstant может быть регулярным выражением, и соответствие является строгим.regex: StringConstant may be a regular expression and the match is strict. Все строковые разделители, которые могут быть регулярными выражениями при использовании этого режима, должны присутствовать в проанализированной строке, и все расширенные столбцы должны соответствовать требуемым типам.All string delimiters, which can be a regex for this mode, should appear in the parsed string, and all extended columns must match the required types.

    • flags — флаги для использования в режиме регулярных выражений, например U (нежадный), m (многострочный режим), s (соответствие для символов перехода строки \n), i (без учета регистра) во флагах RE2.flags: Flags to be used in regex mode like U (Ungreedy), m (multi-line mode), s (match new line \n), i (case-insensitive) in RE2 flags.

    • relaxed — StringConstant — это значение строки регулярного выражения, и соответствие является нестрогим.relaxed: StringConstant is a regular string value and the match is relaxed. Все строковые разделители должны присутствовать в проанализированной строке, но расширенные столбцы могут лишь частично соответствовать требуемым типам.All string delimiters should appear in the parsed string, but extended columns may partially match the required types. Расширенные столбцы, которые не соответствуют требуемым типам, получат значение NULL.Extended columns that didn't match the required types will get the value null.

  • Expression (Выражение). Выражение, результатом которого является строка.Expression: An expression that evaluates to a string.

  • ColumnName. Имя столбца, которому назначается значение. Извлекается из строкового выражения.ColumnName: The name of a column to assign a value to, extracted from the string expression.

  • ColumnType. Необязательный параметр.ColumnType: Optional. Скалярное значение, указывающее тип, в который необходимо преобразовать значение.The scalar value that indicates the type to convert the value to. Значение по умолчанию — тип string.The default is the string type.

Возвращаемое значениеReturns

Входная таблица, развернутая в соответствии со списком столбцов, которые были предоставлены оператором.The input table, extended according to the list of columns that are provided to the operator.

СоветыTips

  • Используйте project, если необходимо удалить или переименовать некоторые столбцы.Use project if you also want to drop or rename some columns.

  • Используйте * в шаблоне, чтобы пропустить ненужные значения.Use * in the pattern, to skip junk values.

    Примечание

    * нельзя использовать после столбца с типом string.The * can't be used after a string type column.

  • Шаблон анализа может начинаться с ColumnName, а не только со StringConstant.The parse pattern may start with ColumnName and not only with StringConstant.

  • Если проанализированное выражение не имеет тип string, оно будет преобразовано в string.If the parsed Expression isn't of type string, it will be converted to type string.

  • Если используется режим регулярных выражений, можно добавить флаги регулярных выражений для управления всем регулярным выражением, которое используется при анализе.If regex mode is used, there's an option to add regex flags to control the entire regex that is used in the parse.

  • В режиме регулярных выражений в ходе анализа шаблон преобразуется в регулярное выражение.In regex mode, parse will translate the pattern to a regex. Используйте синтаксис RE2, чтобы выполнить сопоставление, а также используйте нумерованные записанные группы, которые обрабатываются внутренними средствами.Use RE2 syntax to do the matching, and use numbered captured groups that are handled internally. Пример:For example:

    parse kind=regex Col with * <regex1> var1:string <regex2> var2:long
    

    В инструкции parse регулярное выражение, создаваемое внутренним анализом, имеет вид .*?<regex1>(.*?)<regex2>(\-\d+).In the parse statement, the regex that will be internally generated by the parse is .*?<regex1>(.*?)<regex2>(\-\d+).

    • * преобразовано в .*?.* was translated to .*?.

    • string преобразовано в .*?.string was translated to .*?.

    • long преобразовано в \-\d+.long was translated to \-\d+.

ПримерыExamples

Оператор parse предоставляет упрощенный способ использования extend для таблицы путем применения нескольких операторов extract в одном выражении string.The parse operator provides a streamlined way to extend a table by using multiple extract applications on the same string expression. Этот результат полезен, если в таблице есть столбец типа string, содержащий несколько значений, которые необходимо разделить на отдельные столбцы.This result is useful, when the table has a string column that contains several values that you want to break into individual columns. Например, столбец, созданный инструкцией трассировки разработчика ("printf"/"Console.WriteLine").For example, a column that was produced by a developer trace ("printf"/"Console.WriteLine") statement.

В примере ниже предполагается, что столбец EventText таблицы Traces содержит строки вида Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5}).In the example below, assume that the column EventText of table Traces contains strings of the form Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5}). Оператор включит в таблицу шесть столбцов: resourceName, totalSlices, sliceNumber, lockTime , releaseTime и previousLockTime.The operation will extend the table with six columns: resourceName, totalSlices, sliceNumber, lockTime , releaseTime, and previousLockTime.

let Traces = datatable(EventText:string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=23, 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=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=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 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
resourceNameresourceName totalSlicestotalSlices sliceNumbersliceNumber lockTimelockTime releaseTimereleaseTime previousLockTimepreviousLockTime
PipelineSchedulerPipelineScheduler 2727 1515 02/17/2016 08:40:0002/17/2016 08:40:00 2016-02-17 08:40:00.00000002016-02-17 08:40:00.0000000 2016-02-17 08:39:00.00000002016-02-17 08:39:00.0000000
PipelineSchedulerPipelineScheduler 2727 2323 02/17/2016 08:40:0102/17/2016 08:40:01 2016-02-17 08:40:01.00000002016-02-17 08:40:01.0000000 2016-02-17 08:39:01.00000002016-02-17 08:39:01.0000000
PipelineSchedulerPipelineScheduler 2727 2020 02/17/2016 08:40:0102/17/2016 08:40:01 2016-02-17 08:40:01.00000002016-02-17 08:40:01.0000000 2016-02-17 08:39:01.00000002016-02-17 08:39:01.0000000
PipelineSchedulerPipelineScheduler 2727 1616 02/17/2016 08:41:0002/17/2016 08:41:00 2016-02-17 08:41:00.00000002016-02-17 08:41:00.0000000 2016-02-17 08:40:00.00000002016-02-17 08:40:00.0000000
PipelineSchedulerPipelineScheduler 2727 2222 02/17/2016 08:41:0102/17/2016 08:41:01 2016-02-17 08:41:00.00000002016-02-17 08:41:00.0000000 2016-02-17 08:40:01.00000002016-02-17 08:40:01.0000000

Для режима регулярных выраженийFor regex mode

let Traces = datatable(EventText:string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=23, 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=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=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 kind = regex EventText with "(.*?)[a-zA-Z]*=" resourceName @", totalSlices=\s*\d+\s*.*?sliceNumber=" sliceNumber:long  ".*?(previous)?lockTime=" lockTime ".*?releaseTime=" releaseTime ".*?previousLockTime=" previousLockTime:date "\\)"  
| project resourceName , sliceNumber , lockTime , releaseTime , previousLockTime
resourceNameresourceName sliceNumbersliceNumber lockTimelockTime releaseTimereleaseTime previousLockTimepreviousLockTime
PipelineSchedulerPipelineScheduler 1515 02/17/2016 08:40:00,02/17/2016 08:40:00, 02/17/2016 08:40:00,02/17/2016 08:40:00, 2016-02-17 08:39:00.00000002016-02-17 08:39:00.0000000
PipelineSchedulerPipelineScheduler 2323 02/17/2016 08:40:01,02/17/2016 08:40:01, 02/17/2016 08:40:01,02/17/2016 08:40:01, 2016-02-17 08:39:01.00000002016-02-17 08:39:01.0000000
PipelineSchedulerPipelineScheduler 2020 02/17/2016 08:40:01,02/17/2016 08:40:01, 02/17/2016 08:40:01,02/17/2016 08:40:01, 2016-02-17 08:39:01.00000002016-02-17 08:39:01.0000000
PipelineSchedulerPipelineScheduler 1616 02/17/2016 08:41:00,02/17/2016 08:41:00, 02/17/2016 08:41:00,02/17/2016 08:41:00, 2016-02-17 08:40:00.00000002016-02-17 08:40:00.0000000
PipelineSchedulerPipelineScheduler 2222 02/17/2016 08:41:01,02/17/2016 08:41:01, 02/17/2016 08:41:00,02/17/2016 08:41:00, 2016-02-17 08:40:01.00000002016-02-17 08:40:01.0000000

Для режима регулярных выражений с использованием флагов регулярных выраженийFor regex mode using regex flags

Если вы хотите получать только значение resourceName, используйте следующий запрос:If you're interested in getting the resourceName only, use this query:

let Traces = datatable(EventText:string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=23, 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=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=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 kind = regex  EventText with * "resourceName=" resourceName ',' *
| project resourceName
resourceNameresourceName
PipelineScheduler, totalSlices=27, sliceNumber=23, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01PipelineScheduler, totalSlices=27, sliceNumber=23, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01
PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00
PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01
PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00
PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00

Вы не получите ожидаемые результаты, так как по умолчанию используется жадный режим.You won't get the expected results, since the default mode is greedy. Если есть несколько записей, в которых resourceName иногда указывается в нижнем регистре, а иногда в верхнем, вы можете получить NULL для некоторых значений.If you have a few records where the resourceName sometimes appears as lower-case and sometimes as upper-case, you may get nulls for some values.

Чтобы получить нужный результат, выполните запрос в нежадном режиме U и отключите флаги регулярных выражений i с учетом регистра.To get the wanted result, run the query with the non-greedy U, and disable case-sensitive i regex flags.

let Traces = datatable(EventText:string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=23, 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=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=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 kind = regex flags = Ui EventText with * "RESOURCENAME=" resourceName ',' *
| project resourceName
resourceNameresourceName
PipelineSchedulerPipelineScheduler
PipelineSchedulerPipelineScheduler
PipelineSchedulerPipelineScheduler
PipelineSchedulerPipelineScheduler
PipelineSchedulerPipelineScheduler

Если анализируемая строка содержит символы перевода строки, используйте флаг s для обработки текста.If the parsed string has newlines, use the flag s, to parse the text.

let Traces = datatable(EventText:string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler\ntotalSlices=27\nsliceNumber=23\nlockTime=02/17/2016 08:40:01\nreleaseTime=02/17/2016 08:40:01\npreviousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler\ntotalSlices=27\nsliceNumber=15\nlockTime=02/17/2016 08:40:00\nreleaseTime=02/17/2016 08:40:00\npreviousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler\ntotalSlices=27\nsliceNumber=20\nlockTime=02/17/2016 08:40:01\nreleaseTime=02/17/2016 08:40:01\npreviousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler\ntotalSlices=27\nsliceNumber=22\nlockTime=02/17/2016 08:41:01\nreleaseTime=02/17/2016 08:41:00\npreviousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler\ntotalSlices=27\nsliceNumber=16\nlockTime=02/17/2016 08:41:00\nreleaseTime=02/17/2016 08:41:00\npreviousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse kind=regex flags=s EventText with * "resourceName=" resourceName:string "(.*?)totalSlices=" totalSlices:long "(.*?)lockTime=" lockTime:datetime "(.*?)releaseTime=" releaseTime:datetime "(.*?)previousLockTime=" previousLockTime:datetime "\\)" 
| project-away EventText
resourceNameresourceName totalSlicestotalSlices lockTimelockTime releaseTimereleaseTime previousLockTimepreviousLockTime
PipelineSchedulerPipelineScheduler
2727 2016-02-17 08:40:00.00000002016-02-17 08:40:00.0000000 2016-02-17 08:40:00.00000002016-02-17 08:40:00.0000000 2016-02-17 08:39:00.00000002016-02-17 08:39:00.0000000
PipelineSchedulerPipelineScheduler
2727 2016-02-17 08:40:01.00000002016-02-17 08:40:01.0000000 2016-02-17 08:40:01.00000002016-02-17 08:40:01.0000000 2016-02-17 08:39:01.00000002016-02-17 08:39:01.0000000
PipelineSchedulerPipelineScheduler
2727 2016-02-17 08:40:01.00000002016-02-17 08:40:01.0000000 2016-02-17 08:40:01.00000002016-02-17 08:40:01.0000000 2016-02-17 08:39:01.00000002016-02-17 08:39:01.0000000
PipelineSchedulerPipelineScheduler
2727 2016-02-17 08:41:00.00000002016-02-17 08:41:00.0000000 2016-02-17 08:41:00.00000002016-02-17 08:41:00.0000000 2016-02-17 08:40:00.00000002016-02-17 08:40:00.0000000
PipelineSchedulerPipelineScheduler
2727 2016-02-17 08:41:01.00000002016-02-17 08:41:01.0000000 2016-02-17 08:41:00.00000002016-02-17 08:41:00.0000000 2016-02-17 08:40:01.00000002016-02-17 08:40:01.0000000

Нестрогий режимRelaxed mode

В этом примере для нестрогого режима расширенный столбец totalSlices должен иметь тип long.In this example for relaxed mode, totalSlices extended column must be of type long. Но в проанализированной строке он имеет значение nonValidLongValue.However, in the parsed string, it has the value nonValidLongValue. В расширенном столбце releaseTime значение nonValidDateTime не может быть проанализировано как datetime.In releaseTime extended column, the value nonValidDateTime can't be parsed as datetime. Эти два расширенных столбца получат значение NULL, а другие, например sliceNumber, получат правильные значения.These two extended columns will get the value null while the other ones, such as sliceNumber, still get the correct values.

Если вы укажете параметр kind = simple для этого же запроса ниже, вы получите значение NULL для всех расширенных столбцов.If you use option kind = simple for the same query below, you'll get null for all extended columns. Этот параметр является строгим для расширенных столбцов и представляет разницу между нестрогим и простым режимами.This option is strict on extended columns, and is the difference between relaxed and simple mode.

Примечание

В нестрогом режиме расширенные столбцы могут частично сопоставляться.In relaxed mode, extended columns can be partially matched.

let Traces = datatable(EventText:string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=23, lockTime=02/17/2016 08:40:01, releaseTime=nonValidDateTime 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=nonValidDateTime, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=nonValidLongValue, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=nonValidDateTime 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=nonValidLongValue, 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 kind=relaxed EventText with * "resourceName=" resourceName ", totalSlices=" totalSlices:long * "sliceNumber=" sliceNumber:long * "lockTime=" lockTime ", releaseTime=" releaseTime:date "," * "previousLockTime=" previousLockTime:date ")" *
| project-away EventText
resourceNameresourceName totalSlicestotalSlices sliceNumbersliceNumber lockTimelockTime releaseTimereleaseTime previousLockTimepreviousLockTime
PipelineSchedulerPipelineScheduler 2727 1515 02/17/2016 08:40:0002/17/2016 08:40:00 2016-02-17 08:39:00.00000002016-02-17 08:39:00.0000000
PipelineSchedulerPipelineScheduler 2727 2323 02/17/2016 08:40:0102/17/2016 08:40:01 2016-02-17 08:39:01.00000002016-02-17 08:39:01.0000000
PipelineSchedulerPipelineScheduler 2020 02/17/2016 08:40:0102/17/2016 08:40:01 2016-02-17 08:39:01.00000002016-02-17 08:39:01.0000000
PipelineSchedulerPipelineScheduler 1616 02/17/2016 08:41:0002/17/2016 08:41:00 2016-02-17 08:41:00.00000002016-02-17 08:41:00.0000000 2016-02-17 08:40:00.00000002016-02-17 08:40:00.0000000
PipelineSchedulerPipelineScheduler 2727 2222 02/17/2016 08:41:0102/17/2016 08:41:01 2016-02-17 08:41:00.00000002016-02-17 08:41:00.0000000 2016-02-17 08:40:01.00000002016-02-17 08:40:01.0000000