elemzési operátor
A következőkre vonatkozik: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Kiértékel egy sztringkifejezést, és az értékét egy vagy több számított oszlopba elemzi. A számított oszlopok null
értéket ad vissza a sikertelenül elemezett sztringekhez. Ha nem kell olyan sorokat használnia, ahol az elemzés nem sikerül, használja inkább a elemzési operátort.
Szintaxis
T| parse
[ kind=
típusú [ flags=
regexFlags ]] kifejezéswith
[ *
] stringConstantcolumnName [:
columnType] [ *
] ,
...
További információ szintaxiskonvenciákról.
Paraméterek
Név | Típus | Szükséges | Leírás |
---|---|---|---|
T | string |
✔️ | A elemezendő táblázatos bemenet. |
fajta | string |
✔️ | Az egyik támogatott típusérték. Az alapértelmezett érték a simple . |
regexFlags | string |
Ha típusúregex , akkor megadhat regex jelölőket, például U a megegyezés nélküli, m többsoros módhoz, s az új sor \n , és i a kis- és nagybetűk megkülönböztetéséhez. További jelölők találhatók jelzők. |
|
kifejezés | string |
✔️ | Sztringre kiértékelt kifejezés. |
stringConstant | string |
✔️ | Sztringállandó, amelynek keresésére és elemzésére van szüksége. |
columnName | string |
✔️ | A sztringkifejezésből kinyert érték hozzárendeléséhez tartozó oszlop neve. |
columnType | string |
A skaláris érték, amely azt a típust jelzi, amelybe az értéket konvertálni szeretné. Az alapértelmezett érték a string . |
Jegyzet
- Az elemzési minta a StringConstant mellett ColumnName is kezdődhet.
- A mintában
*
használatával kihagyhatja a levélszemétértékeket. A*
nem használhatóstring
típusú oszlop után. - Ha az elemzési kifejezés nem
string
típusú, akkor a programstring
típussá alakítja. - Használjon
project
, ha egyes oszlopokat is szeretne elvetni vagy átnevezni.
Támogatott kind
értékek
SMS | Leírás |
---|---|
simple |
Ez az alapértelmezett érték. stringConstant egy normál sztringérték, és az egyezés szigorú. Az elemzési sztringben minden sztringelválasztónak meg kell jelennie, és minden kiterjesztett oszlopnak meg kell egyeznie a szükséges típusokkal. |
regex |
stringConstant lehet egy normál kifejezés, és az egyezés szigorú. Minden sztringelválasztónak, amely regex lehet ehhez a módhoz, az elemzett sztringben kell megjelennie, és minden kiterjesztett oszlopnak meg kell egyeznie a szükséges típusokkal. |
relaxed |
stringConstant egy normál sztringérték, és az egyezés nyugodt. Az összes sztringelválasztónak szerepelnie kell az elemezett sztringben, de a kiterjesztett oszlopok részben megegyezhetnek a szükséges típusokkal. A szükséges típusoknak nem megfelelő kiterjesztett oszlopok a null értéket kapják. |
Regex mód
Regex módban az elemzés a mintát regexre fordítja. A reguláris kifejezések az egyeztetéshez és a belsőleg kezelt számozott rögzített csoportok használatához. Például:
parse kind=regex Col with * <regex1> var1:string <regex2> var2:long
Az elemzési utasításban az elemzés által belsőleg létrehozott regex .*?<regex1>(.*?)<regex2>(\-\d+)
.
*
.*?
lett lefordítva.string
.*?
lett lefordítva.long
\-\d+
lett lefordítva.
Visszatér
A bemeneti tábla az operátor számára biztosított oszlopok listájának megfelelően kiterjesztve.
Példák
Az ebben a szakaszban szereplő példák bemutatják, hogyan használhatja a szintaxist az első lépésekhez.
A cikkben szereplő példák a nyilvánosan elérhető tábláit használják a fürt, például a Minták adatbázis
StormEvents
tábláját.
A cikkben szereplő példák nyilvánosan elérhető táblákat használnak, például a Weather Analytics
StormEvents
táblát, mintaadatokat.
A parse
operátor egyszerűbb módot kínál a táblák extend
több extract
alkalmazás ugyanazon string
kifejezésre való használatával. Ez az eredmény akkor hasznos, ha a táblázat egy string
oszlopot tartalmaz, amely több olyan értéket tartalmaz, amelyeket egyes oszlopokra szeretne bontani. Például egy fejlesztői nyomkövetés ("printf
"/"Console.WriteLine
") utasítás által létrehozott oszlop.
Eredmények elemzése és kiterjesztése
Az alábbi példában a Traces
tábla EventText
oszlopa az Event: NotifySliceRelease (resourceName={0}, totalSlices={1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})
űrlap sztringeit tartalmazza.
A művelet hat oszlopból áll: resourceName
, totalSlices
, sliceNumber
, lockTime
, releaseTime
és 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
kimeneti
resourceName | totalSlices | sliceNumber | lockTime | releaseTime | previousLockTime |
---|---|---|---|---|---|
PipelineScheduler | 27 | 15 | 02/17/2016 08:40:00 | 2016-02-17 08:40:00.0000000 | 2016-02-17 08:39:00.0000000 |
PipelineScheduler | 27 | 23 | 02/17/2016 08:40:01 | 2016-02-17 08:40:01.0000000 | 2016-02-17 08:39:01.0000000 |
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 | 16 | 02/17/2016 08:41:00 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:00.0000000 |
PipelineScheduler | 27 | 22 | 02/17/2016 08:41:01 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:01.0000000 |
E-mail alias és DNS kinyerés
Az alábbi példában a Névjegyek táblából származó bejegyzések elemzésével kinyerjük az aliast és a tartományt egy e-mail-címből, a tartományt pedig egy webhely URL-címéből. A lekérdezés a EmailAddress
, EmailAlias
és WebsiteDomain
oszlopot adja vissza, ahol a fullEmail
oszlop egyesíti az elemzett e-mail-aliasokat és tartományokat.
let Leads=datatable(Contacts: string)
[
"Event: LeadContact (email=john@contosohotel.com, Website=https:contosohotel.com)",
"Event: LeadContact (email=abi@fourthcoffee.com, Website=https:www.fourthcoffee.com)",
"Event: LeadContact (email=nevena@treyresearch.com, Website=https:treyresearch.com)",
"Event: LeadContact (email=faruk@tailspintoys.com, Website=https:tailspintoys.com)",
"Event: LeadContact (email=ebere@relecloud.com, Website=https:relecloud.com)",
];
Leads
| parse Contacts with * "email=" alias:string "@" domain: string ", Website=https:" WebsiteDomain: string ")"
| project EmailAddress=strcat(alias, "@", domain), EmailAlias=alias, WebsiteDomain
kimeneti
E-mailcím | EmailAlias | WebsiteDomain |
---|---|---|
nevena@treyresearch.com | nevena | treyresearch.com |
john@contosohotel.com | John | contosohotel.com |
faruk@tailspintoys.com | faruk | tailspintoys.com |
ebere@relecloud.com | ebere | relecloud.com |
abi@fourthcoffee.com | Abi | www.fourthcoffee.com |
Regex mód
Az alábbi példában a reguláris kifejezések segítségével elemezhetők és kinyerhetők az adatok a EventText
oszlopból. A kinyert adatok új mezőkbe lesznek kivetítve.
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
kimeneti
resourceName | sliceNumber | lockTime | releaseTime | previousLockTime |
---|---|---|---|---|
PipelineScheduler | 15 | 02/17/2016 08:40:00, | 02/17/2016 08:40:00, | 2016-02-17 08:39:00.0000000 |
PipelineScheduler | 23 | 02/17/2016 08:40:01, | 02/17/2016 08:40:01, | 2016-02-17 08:39:01.0000000 |
PipelineScheduler | 20 | 02/17/2016 08:40:01, | 02/17/2016 08:40:01, | 2016-02-17 08:39:01.0000000 |
PipelineScheduler | 16 | 02/17/2016 08:41:00, | 02/17/2016 08:41:00, | 2016-02-17 08:40:00.0000000 |
PipelineScheduler | 22 | 02/17/2016 08:41:01, | 02/17/2016 08:41:00, | 2016-02-17 08:40:01.0000000 |
Regex mód regex jelzőkkel
Az alábbi példában resourceName
lesz kinyerve.
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
kimeneti
resourceName |
---|
PipelineScheduler, 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:00 |
PipelineScheduler, 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:00 |
PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00 |
Ha vannak olyan rekordok, amelyekben resourceName
néha kis- és nagybetűként jelenik meg, előfordulhat, hogy egyes értékek null értéket kapnak.
Az előző példában szereplő eredmények váratlanok, és teljes eseményadatokat tartalmaznak, mivel az alapértelmezett mód mohó.
Ha csak resourceName
szeretne kinyerni, futtassa az előző lekérdezést a nem mohó U
, és tiltsa le a kis- és nagybetűkre érzékeny i
regex jelzőket.
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
kimeneti
resourceName |
---|
PipelineScheduler |
PipelineScheduler |
PipelineScheduler |
PipelineScheduler |
PipelineScheduler |
Ha az elemzési sztring új vonalokkal rendelkezik, használja a jelölőt s
, hogy elemezni tudja a szöveget.
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
kimeneti
resourceName | totalSlices | lockTime | releaseTime | previousLockTime |
---|---|---|---|---|
PipelineScheduler |
27 | 2016-02-17 08:40:00.0000000 | 2016-02-17 08:40:00.0000000 | 2016-02-17 08:39:00.0000000 |
PipelineScheduler |
27 | 2016-02-17 08:40:01.0000000 | 2016-02-17 08:40:01.0000000 | 2016-02-17 08:39:01.0000000 |
PipelineScheduler |
27 | 2016-02-17 08:40:01.0000000 | 2016-02-17 08:40:01.0000000 | 2016-02-17 08:39:01.0000000 |
PipelineScheduler |
27 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:00.0000000 |
PipelineScheduler |
27 | 2016-02-17 08:41:01.0000000 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:01.0000000 |
Nyugodt mód
Az alábbi nyugodt módú példában a kiterjesztett oszlop totalSlices
long
típusúnak kell lennie. Az elemzési sztringben azonban az érték nonValidLongValue
.
A kiterjesztett oszlop esetében releaseTime
a nonValidDateTime
érték nem elemezhető datetime
.
Ez a két kiterjesztett oszlop null
értéket eredményez, míg a többi oszlop, például sliceNumber
, továbbra is a megfelelő értékeket eredményezi.
Ha a kind = simple
lehetőséget használja a következő lekérdezéshez, null
eredményeket kap az összes kiterjesztett oszlophoz. Ez a lehetőség szigorú a kiterjesztett oszlopokon, és ez a különbség a nyugodt és az egyszerű mód között.
Jegyzet
Nyugodt módban a kiterjesztett oszlopok részben megfeleltethetők.
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
kimeneti
resourceName | totalSlices | sliceNumber | lockTime | releaseTime | previousLockTime |
---|---|---|---|---|---|
PipelineScheduler | 27 | 15 | 02/17/2016 08:40:00 | 2016-02-17 08:39:00.0000000 | |
PipelineScheduler | 27 | 23 | 02/17/2016 08:40:01 | 2016-02-17 08:39:01.0000000 | |
PipelineScheduler | 20 | 02/17/2016 08:40:01 | 2016-02-17 08:39:01.0000000 | ||
PipelineScheduler | 16 | 02/17/2016 08:41:00 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:00.0000000 | |
PipelineScheduler | 27 | 22 | 02/17/2016 08:41:01 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:01.0000000 |