Oktatóanyag: Kusto-lekérdezések használata az Azure Adatkezelő és Azure MonitorTutorial: Use Kusto queries in Azure Data Explorer and Azure Monitor

A Kusto lekérdezési nyelvének megismerésére a legjobb módszer, ha megvizsgálunk néhány alapszintű lekérdezést a nyelv "Feel" lekérdezéséhez.The best way to learn about the Kusto Query Language is to look at some basic queries to get a "feel" for the language. Azt javasoljuk, hogy használjon egy adatbázist bizonyos mintaadatokhasználatával.We recommend using a database with some sample data. Az oktatóanyagban bemutatott lekérdezéseknek az adott adatbázisban kell futniuk.The queries that are demonstrated in this tutorial should run on that database. A StormEvents mintaadatbázis táblázata néhány információt tartalmaz a Egyesült Államokban történt viharokról.The StormEvents table in the sample database provides some information about storms that happened in the United States.

Sorok számlálásaCount rows

A példában szereplő adatbázishoz egy nevű tábla tartozik StormEvents .Our example database has a table called StormEvents. Ha szeretné megtudni, hogy mekkora a táblázat, a tartalmat egy operátorba fogjuk irányítani, amely egyszerűen megszámolja a tábla sorait.To find out how large the table is, we'll pipe its content into an operator that simply counts the rows in the table.

Szintaxis Megjegyzés: a lekérdezés egy adatforrás (általában egy Táblanév), amelyet opcionálisan követ a cső karakterének és néhány táblázatos operátornak egy vagy több párja.Syntax note: A query is a data source (usually a table name), optionally followed by one or more pairs of the pipe character and some tabular operator.

StormEvents | count

Ez a kimenet:Here's the output:

DarabszámCount
5906659066

További információ: Count operátor.For more information, see count operator.

Oszlopok részhalmazának kiválasztása: projektSelect a subset of columns: project

A Project használatával csak a kívánt oszlopokat válassza ki.Use project to pick out only the columns you want. Tekintse meg a következő példát, amely a projektet és a Take operátorokat is használja.See the following example, which uses both the project and the take operators.

Szűrés logikai kifejezés szerint: WhereFilter by Boolean expression: where

Lássuk, hogy csak az flood események szerepelnek a California Feb-2007-ben:Let's see only flood events in California in Feb-2007:

StormEvents
| where StartTime > datetime(2007-02-01) and StartTime < datetime(2007-03-01)
| where EventType == 'Flood' and State == 'CALIFORNIA'
| project StartTime, EndTime , State , EventType , EpisodeNarrative

Ez a kimenet:Here's the output:

StartTimeStartTime EndTimeEndTime ÁllamState EventTypeEventType EpisodeNarrativeEpisodeNarrative
2007-02-19 00:00:00.00000002007-02-19 00:00:00.0000000 2007-02-19 08:00:00.00000002007-02-19 08:00:00.0000000 KaliforniaCALIFORNIA ÁrvízFlood A Dél-San Joaquin-völgyben áthaladó rendszerindító rendszer rövid idő alatt bevezette a nyugati Kern megyei időszakot a 19. kora reggeli órákban.A frontal system moving across the Southern San Joaquin Valley brought brief periods of heavy rain to western Kern County in the early morning hours of the 19th. Kisebb mértékű árvizek történtek a 166-es állapotú országúton, a Taft közelében.Minor flooding was reported across State Highway 166 near Taft.

N sor megjelenítése: TakeShow n rows: take

Lássunk néhány információt.Let's see some data. Mi az öt sorból álló véletlenszerű minta?What's in a random sample of five rows?

StormEvents
| take 5
| project  StartTime, EndTime, EventType, State, EventNarrative  

Ez a kimenet:Here's the output:

StartTimeStartTime EndTimeEndTime EventTypeEventType ÁllamState EventNarrativeEventNarrative
2007-09-18 20:00:00.00000002007-09-18 20:00:00.0000000 2007-09-19 18:00:00.00000002007-09-19 18:00:00.0000000 Nagy mennyiségű esőHeavy Rain FLORIDAIFLORIDA A parti Volusia megye egyes részein 24 órás időszakra csökkent a 9 centiméteres csapadék.As much as 9 inches of rain fell in a 24-hour period across parts of coastal Volusia County.
2007-09-20 21:57:00.00000002007-09-20 21:57:00.0000000 2007-09-20 22:05:00.00000002007-09-20 22:05:00.0000000 TornádóTornado FLORIDAIFLORIDA A tornádó megérintette a Eustis városában, a West Crooked Lake északi végén.A tornado touched down in the Town of Eustis at the northern end of West Crooked Lake. A tornádó gyorsan fokozta a EF1 erejét, mivel az Észak-északnyugatot a Eustis-on keresztül helyezte át.The tornado quickly intensified to EF1 strength as it moved north northwest through Eustis. A pálya mindössze két mérföld hosszú volt, és a maximális szélessége 300 méter volt.The track was just under two miles long and had a maximum width of 300 yards. A tornádó 7 otthon megsemmisült.The tornado destroyed 7 homes. Húsz hét otthon kapott jelentős kárt, és a 81-es otthonok kisebb károkat jelentettek.Twenty seven homes received major damage and 81 homes reported minor damage. Nem voltak súlyos sérülések, és a vagyoni kár értéke $6 200 000.There were no serious injuries and property damage was set at $6.2 million.
2007-09-29 08:11:00.00000002007-09-29 08:11:00.0000000 2007-09-29 08:11:00.00000002007-09-29 08:11:00.0000000 WaterspoutWaterspout DÉL-ATLANTI RÉGIÓATLANTIC SOUTH A Melbourne-i Délkelet-waterspout alakult, röviden a part felé.A waterspout formed in the Atlantic southeast of Melbourne Beach and briefly moved toward shore.
2007-12-20 07:50:00.00000002007-12-20 07:50:00.0000000 2007-12-20 07:53:00.00000002007-12-20 07:53:00.0000000 Zivataros szélThunderstorm Wind MISSISSIPPIMISSISSIPPI Számos nagy fát vetettek fel a Power vonalakon.Numerous large trees were blown down with some down on power lines. Kár történt a Kelet-Adams megyében.Damage occurred in eastern Adams county.
2007-12-30 16:00:00.00000002007-12-30 16:00:00.0000000 2007-12-30 16:05:00.00000002007-12-30 16:05:00.0000000 Zivataros szélThunderstorm Wind GrúziaGEORGIA Több fát jelentettek a megye kiosztása során, amely a 206-as State Roadon közelíti meg a birsalma-kör hosszát.The county dispatch reported several trees were blown down along Quincey Batten Loop near State Road 206. A faszerkezetes eltávolítás költségeit becsültük.The cost of tree removal was estimated.

Azonban a tábla sorait nem külön sorrendben jeleníti meg, ezért rendezze őket.But take shows rows from the table in no particular order, so let's sort them. (améret a Take aliasa, és ugyanaz a hatása.)(limit is an alias for take and has the same effect.)

Sorrend eredményei: Rendezés, felülOrder results: sort, top

  • Szintaxis Megjegyzés: egyes operátorok olyan paraméterekkel rendelkeznek, amelyeket a (z) hasonló kulcsszavak vezetnek be by .Syntax note: Some operators have parameters that are introduced by keywords like by.
  • A következő példában a desc megrendelések csökkenő sorrendben, a asc megrendelések pedig növekvő sorrendet eredményeznek.In the following example, desc orders results in descending order and asc orders results in ascending order.

Az első n sor megjelenítése egy adott oszlop alapján rendezve:Show me the first n rows, ordered by a specific column:

StormEvents
| top 5 by StartTime desc
| project  StartTime, EndTime, EventType, State, EventNarrative  

Ez a kimenet:Here's the output:

StartTimeStartTime EndTimeEndTime EventTypeEventType ÁllamState EventNarrativeEventNarrative
2007-12-31 22:30:00.00000002007-12-31 22:30:00.0000000 2007-12-31 23:59:00.00000002007-12-31 23:59:00.0000000 Téli StormWinter Storm MICHIGANMICHIGAN Ez a nagy teljesítményű hó-esemény a kora reggeli órákig folytatódott az új év napján.This heavy snow event continued into the early morning hours on New Year's Day.
2007-12-31 22:30:00.00000002007-12-31 22:30:00.0000000 2007-12-31 23:59:00.00000002007-12-31 23:59:00.0000000 Téli StormWinter Storm MICHIGANMICHIGAN Ez a nagy teljesítményű hó-esemény a kora reggeli órákig folytatódott az új év napján.This heavy snow event continued into the early morning hours on New Year's Day.
2007-12-31 22:30:00.00000002007-12-31 22:30:00.0000000 2007-12-31 23:59:00.00000002007-12-31 23:59:00.0000000 Téli StormWinter Storm MICHIGANMICHIGAN Ez a nagy teljesítményű hó-esemény a kora reggeli órákig folytatódott az új év napján.This heavy snow event continued into the early morning hours on New Year's Day.
2007-12-31 23:53:00.00000002007-12-31 23:53:00.0000000 2007-12-31 23:53:00.00000002007-12-31 23:53:00.0000000 Magas szélHigh Wind KaliforniaCALIFORNIA A Ventura megye hegyei között észak-északkeleti szélek, körülbelül 58 mph. között számoltak be.North to northeast winds gusting to around 58 mph were reported in the mountains of Ventura county.
2007-12-31 23:53:00.00000002007-12-31 23:53:00.0000000 2007-12-31 23:53:00.00000002007-12-31 23:53:00.0000000 Magas szélHigh Wind KaliforniaCALIFORNIA A meleg források RAWS-érzékelője az északi szélek 58 km/s-es feltekercselését jelentette.The Warm Springs RAWS sensor reported northerly winds gusting to 58 mph.

Ugyanazt az eredményt a Rendezéshasználatával érheti el, majd a következőket teheti:You can achieve the same result by using sort, and then take:

StormEvents
| sort by StartTime desc
| take 5
| project  StartTime, EndTime, EventType, EventNarrative

Számítási származtatott oszlopok: kiterjesztésCompute derived columns: extend

Új oszlop létrehozása az egyes sorokban lévő értékek kiszámításával:Create a new column by computing a value in every row:

StormEvents
| limit 5
| extend Duration = EndTime - StartTime 
| project StartTime, EndTime, Duration, EventType, State

Ez a kimenet:Here's the output:

StartTimeStartTime EndTimeEndTime IdőtartamDuration EventTypeEventType ÁllamState
2007-09-18 20:00:00.00000002007-09-18 20:00:00.0000000 2007-09-19 18:00:00.00000002007-09-19 18:00:00.0000000 22:00:0022:00:00 Nagy mennyiségű esőHeavy Rain FLORIDAIFLORIDA
2007-09-20 21:57:00.00000002007-09-20 21:57:00.0000000 2007-09-20 22:05:00.00000002007-09-20 22:05:00.0000000 00:08:0000:08:00 TornádóTornado FLORIDAIFLORIDA
2007-09-29 08:11:00.00000002007-09-29 08:11:00.0000000 2007-09-29 08:11:00.00000002007-09-29 08:11:00.0000000 00:00:0000:00:00 WaterspoutWaterspout DÉL-ATLANTI RÉGIÓATLANTIC SOUTH
2007-12-20 07:50:00.00000002007-12-20 07:50:00.0000000 2007-12-20 07:53:00.00000002007-12-20 07:53:00.0000000 00:03:0000:03:00 Zivataros szélThunderstorm Wind MISSISSIPPIMISSISSIPPI
2007-12-30 16:00:00.00000002007-12-30 16:00:00.0000000 2007-12-30 16:05:00.00000002007-12-30 16:05:00.0000000 00:05:0000:05:00 Zivataros szélThunderstorm Wind GrúziaGEORGIA

Egy oszlop nevét újra lehet használni, és egy számítási eredményt is hozzárendelhet ugyanahhoz az oszlophoz.It's possible to reuse a column name and assign a calculation result to the same column.

Példa:Example:

print x=1
| extend x = x + 1, y = x
| extend x = x + 1

Ez a kimenet:Here's the output:

xx éy
33 11

A skaláris kifejezések tartalmazhatják az összes szokásos operátort ( + , - ,, * / , % ), és számos hasznos funkció elérhető.Scalar expressions can include all the usual operators (+, -, *, /, %), and a range of useful functions are available.

Sorok összesített csoportjai: ÖsszefoglalásAggregate groups of rows: summarize

Az egyes országokban előforduló események számának megszámlálása:Count the number of events occur in each country:

StormEvents
| summarize event_count = count() by State

összefoglalja a csoportokat olyan sorokkal, amelyek azonos értékekkel rendelkeznek a by záradékban, majd egy aggregációs függvényt (például) használ az count egyes csoportok egyetlen sorban való összekapcsolásához.summarize groups together rows that have the same values in the by clause, and then uses an aggregation function (for example, count) to combine each group in a single row. Ebben az esetben minden állapothoz tartozik egy sor, valamint egy oszlop az adott állapotban lévő sorok számának megadásához.In this case, there's a row for each state and a column for the count of rows in that state.

Számos aggregációs függvény érhető el.A range of aggregation functions are available. Egy operátor több összesítési függvényt is használhat summarize több számított oszlop létrehozásához.You can use several aggregation functions in one summarize operator to produce several computed columns. Előfordulhat például, hogy az egyes állapotokban megszerezjük a stormok számát, valamint az egyes állapotok egyedi típusának összegét is.For example, we could get the count of storms in each state and also a sum of a unique type of storms per state. Ezt követően a Top használatával elérheti a legtöbb Storm által érintett állapotot:Then, we could use top to get the most storm-affected states:

StormEvents 
| summarize StormCount = count(), TypeOfStorms = dcount(EventType) by State
| top 5 by StormCount desc

Ez a kimenet:Here's the output:

ÁllamState StormCountStormCount TypeOfStormsTypeOfStorms
TEXASTEXAS 47014701 2727
KANSASIKANSAS 31663166 2121
IOWAIOWA 23372337 1919
ILLINOISILLINOIS 20222022 2323
MISSOURIMISSOURI 20162016 2020

Egy operátor eredményeiben summarize :In the results of a summarize operator:

  • Mindegyik oszlop neve a (z by ).Each column is named in by.
  • Minden számított kifejezésnek van egy oszlopa.Each computed expression has a column.
  • Az értékek minden kombinációja by egy sorral rendelkezik.Each combination of by values has a row.

Összegzés skaláris értékek alapjánSummarize by scalar values

Használhatja a záradékban a skaláris (numerikus, idő vagy intervallum) értékeket by , de az értékeket a bin () függvény használatával kell raktárhelyekre helyeznie:You can use scalar (numeric, time, or interval) values in the by clause, but you'll want to put the values into bins by using the bin() function:

StormEvents
| where StartTime > datetime(2007-02-14) and StartTime < datetime(2007-02-21)
| summarize event_count = count() by bin(StartTime, 1d)

A lekérdezés az összes időbélyeget egy nap intervallumára csökkenti:The query reduces all the timestamps to intervals of one day:

StartTimeStartTime event_countevent_count
2007-02-14 00:00:00.00000002007-02-14 00:00:00.0000000 180180
2007-02-15 00:00:00.00000002007-02-15 00:00:00.0000000 6666
2007-02-16 00:00:00.00000002007-02-16 00:00:00.0000000 164164
2007-02-17 00:00:00.00000002007-02-17 00:00:00.0000000 103103
2007-02-18 00:00:00.00000002007-02-18 00:00:00.0000000 2222
2007-02-19 00:00:00.00000002007-02-19 00:00:00.0000000 5252
2007-02-20 00:00:00.00000002007-02-20 00:00:00.0000000 6060

A bin () ugyanaz, mint a floor () függvény számos nyelven.The bin() is the same as the floor() function in many languages. A szolgáltatás egyszerűen csökkenti az összes értéket a megadott modulus legközelebbi többszörösére, így az összesítéssel a sorok hozzárendelhetők a csoportokhoz.It simply reduces every value to the nearest multiple of the modulus that you supply, so that summarize can assign the rows to groups.

Diagram vagy táblázat megjelenítése: megjelenítésDisplay a chart or table: render

Két oszlopot is felhasználhat, és egy diagram y tengelye használhatja őket:You can project two columns and use them as the x-axis and the y-axis of a chart:

StormEvents 
| summarize event_count=count(), mid = avg(BeginLat) by State 
| sort by mid
| where event_count > 1800
| project State, event_count
| render columnchart

Képernyőkép, amely megjeleníti a Storm Event Counts szerinti oszlopdiagram állapotát.

Bár mid a művelet során eltávolítottank project , továbbra is szükség van rá, ha azt szeretnénk, hogy a diagramon megjelenjenek az adott sorrendben lévő országok.Although we removed mid in the project operation, we still need it if we want the chart to display the countries in that order.

Szigorúan véve az render ügyfél egy funkciója, nem pedig a lekérdezés nyelvének része.Strictly speaking, render is a feature of the client rather than part of the query language. Továbbra is integrálva van a nyelvbe, és hasznos lehet az eredmények megtervezése.Still, it's integrated into the language, and it's useful for envisioning your results.

TimechartsTimecharts

A numerikus raktárhelyekre visszatérve megjelenítünk egy idősorozatot:Going back to numeric bins, let's display a time series:

StormEvents
| summarize event_count=count() by bin(StartTime, 1d)
| render timechart

Képernyőfelvétel az események dobozolni az idő alapján.

Több sorozatMultiple series

Egy záradék több értékének használatával summarize by hozzon létre külön sort az értékek minden kombinációja számára:Use multiple values in a summarize by clause to create a separate row for each combination of values:

StormEvents 
| where StartTime > datetime(2007-06-04) and StartTime < datetime(2007-06-10) 
| where Source in ("Source","Public","Emergency Manager","Trained Spotter","Law Enforcement")
| summarize count() by bin(StartTime, 10h), Source

Képernyőkép, amely a tábla darabszámát jeleníti meg forrás szerint.

Csak adja hozzá a render kifejezést az előző példához: | render timechart .Just add the render term to the preceding example: | render timechart.

Képernyőkép, amely megjeleníti a diagramok darabszámát forrás szerint.

Figyelje render timechart meg, hogy az első oszlopot használja x tengelyként, majd a többi oszlopot külön sorként jeleníti meg.Notice that render timechart uses the first column as the x-axis, and then displays the other columns as separate lines.

Napi átlagos ciklusDaily average cycle

Hogyan változik a tevékenység az átlagos napon?How does activity vary over the average day?

Események számlálása egy nap dobozolni.Count events by the time modulo one day, binned into hours. Itt floor a következő helyett használjuk bin :Here, we use floor instead of bin:

StormEvents
| extend hour = floor(StartTime % 1d , 1h)
| summarize event_count=count() by hour
| sort by hour asc
| render timechart

Képernyőkép, amely egy idődiagramját számlálót jelenít meg óránként.

Jelenleg az render időtartamok nem megfelelőek, de ehelyett a következőket tudjuk használni | render columnchart :Currently, render doesn't label durations properly, but we could use | render columnchart instead:

Képernyőkép, amely egy oszlopdiagram darabszámát jeleníti meg óránként.

Több napi adatsorozat összehasonlításaCompare multiple daily series

Hogyan változik a tevékenység a különböző állapotú napokon?How does activity vary over the time of day in different states?

StormEvents
| extend hour= floor( StartTime % 1d , 1h)
| where State in ("GULF OF MEXICO","MAINE","VIRGINIA","WISCONSIN","NORTH DAKOTA","NEW JERSEY","OREGON")
| summarize event_count=count() by hour, State
| render timechart

Képernyőfelvétel egy idődiagramját óra és állapot alapján.

Ossza 1h meg az x tengelyt az időtartam helyett egy órányi értékre:Divide by 1h to turn the x-axis into an hour number instead of a duration:

StormEvents
| extend hour= floor( StartTime % 1d , 1h)/ 1h
| where State in ("GULF OF MEXICO","MAINE","VIRGINIA","WISCONSIN","NORTH DAKOTA","NEW JERSEY","OREGON")
| summarize event_count=count() by hour, State
| render columnchart

Képernyőkép, amely egy oszlopdiagram óra és állapot szerinti diagramot jelenít meg.

Csatlakozás adattípusokhozJoin data types

Hogyan talál két konkrét eseménytípus és milyen állapotban történtek?How would you find two specific event types and in which state each of them happened?

A Storm-eseményeket az elsővel EventType és a másodikmal is lehívhatja EventType , majd a két készlethez csatlakoztathatja a következőt State :You can pull storm events with the first EventType and the second EventType, and then join the two sets on State:

StormEvents
| where EventType == "Lightning"
| join (
    StormEvents 
    | where EventType == "Avalanche"
) on State  
| distinct State

Képernyőkép, amely az események villám és a lavina csatlakoztatását mutatja be.

Csatlakozás felhasználói munkamenetre – példaUser session example of join

Ez a szakasz nem használja a StormEvents táblát.This section doesn't use the StormEvents table.

Tegyük fel, hogy olyan adatmennyiséget tartalmaz, amely az egyes felhasználói munkamenetek kezdetét és végét jelöli az egyes munkamenetek egyedi azonosítójával.Assume you have data that includes events that mark the start and end of each user session with a unique ID for each session.

Honnan tudhatja meg, hogy mennyi ideig tart az egyes felhasználói munkamenetek?How would you find out how long each user session lasts?

A használatával extend megadhatja a két időbélyeg aliasát, majd kiszámíthatja a munkamenet időtartamát:You can use extend to provide an alias for the two timestamps, and then compute the session duration:

Events
| where eventName == "session_started"
| project start_time = timestamp, stop_time, country, session_id
| join ( Events
    | where eventName == "session_ended"
    | project stop_time = timestamp, session_id
    ) on session_id
| extend duration = stop_time - start_time
| project start_time, stop_time, country, duration
| take 10

Képernyőkép: a felhasználói munkamenet kiterjesztésére szolgáló eredmények táblázata.

Célszerű a használatával project kijelölni csak azokat az oszlopokat, amelyekre szüksége van a JOIN művelet végrehajtása előtt.It's a good practice to use project to select only the columns you need before you perform the join. Ugyanebben a záradékban nevezze át az timestamp oszlopot.In the same clauses, rename the timestamp column.

Eloszlás ábrázolásaPlot a distribution

Visszatér a StormEvents táblázatba, hány Storm van különböző hosszúságú?Returning to the StormEvents table, how many storms are there of different lengths?

StormEvents
| extend  duration = EndTime - StartTime
| where duration > 0s
| where duration < 3h
| summarize event_count = count()
    by bin(duration, 5m)
| sort by duration asc
| render timechart

Képernyőkép az események idődiagramját eredményeiről időtartam szerint.

Vagy a | render columnchart következőket használhatja:Or, you can use | render columnchart:

Képernyőfelvétel az események számának idődiagramját az időtartam alapján.

PercentilisekPercentiles

Milyen időtartamokat találunk a Storms különböző százalékában?What ranges of durations do we find in different percentages of storms?

Ezen információk beszerzéséhez használja a fenti lekérdezést, de cserélje le a következőre render :To get this information, use the preceding query, but replace render with:

| summarize percentiles(duration, 5, 20, 50, 80, 95)

Ebben az esetben nem használunk by záradékot, így a kimenet egyetlen sor:In this case, we didn't use a by clause, so the output is a single row:

A százalékos értékeknek az időtartam szerinti összesítésére szolgáló eredmények táblázata.

A következő kimenetből láthatjuk:We can see from the output that:

  • a stormek 5%-a időtartama kevesebb, mint 5 perc.5% of storms have a duration of less than 5 minutes.
  • a viharok 50%-a volt kevesebb, mint egy óra és 25 perc.50% of storms lasted less than one hour and 25 minutes.
  • a viharok 5%-a legalább két órát és 50 percet tartott.5% of storms lasted at least two hours and 50 minutes.

Az egyes állapotok külön bontásához használja az state oszlopot mindkét summarize operátorral:To get a separate breakdown for each state, use the state column separately with both summarize operators:

StormEvents
| extend  duration = EndTime - StartTime
| where duration > 0s
| where duration < 3h
| summarize event_count = count()
    by bin(duration, 5m), State
| sort by duration asc
| summarize percentiles(duration, 5, 20, 50, 80, 95) by State

A tábla összegzi a százalékos időtartamot állapot szerint.

Eredmény kiosztása változóhoz: letAssign a result to a variable: let

Használja az előző példában szereplő lekérdezési kifejezés részeinek elkülönítését join .Use let to separate out the parts of the query expression in the preceding join example. Az eredmények változatlanok:The results are unchanged:

let LightningStorms = 
    StormEvents
    | where EventType == "Lightning";
let AvalancheStorms = 
    StormEvents
    | where EventType == "Avalanche";
LightningStorms 
| join (AvalancheStorms) on State
| distinct State

Tipp

A Kusto Explorerben a teljes lekérdezés végrehajtásához ne adjon hozzá üres sorokat a lekérdezés részei között.In Kusto Explorer, to execute the entire query, don't add blank lines between parts of the query.

Több adatbázisból származó adatok egyesítése egy lekérdezésbenCombine data from several databases in a query

A következő lekérdezésben a Logs táblának az alapértelmezett adatbázisban kell lennie:In the following query, the Logs table must be in your default database:

Logs | where ...

Egy másik adatbázisban lévő tábla eléréséhez használja a következő szintaxist:To access a table in a different database, use the following syntax:

database("db").Table

Ha például a (z) és a (z) és a Diagnostics Telemetry két tábla egyes adatait szeretné összekapcsolni, használja a következő lekérdezést (feltéve, hogy az Diagnostics alapértelmezett adatbázis):For example, if you have databases named Diagnostics and Telemetry and you want to correlate some of the data in the two tables, you might use the following query (assuming Diagnostics is your default database):

Logs | join database("Telemetry").Metrics on Request MachineId | ...

Akkor használja ezt a lekérdezést, ha az alapértelmezett adatbázis Telemetry :Use this query if your default database is Telemetry:

union Requests, database("Diagnostics").Logs | ...

Az előző két lekérdezés feltételezi, hogy mindkét adatbázis abban a fürtben található, amelyhez jelenleg csatlakozik.The preceding two queries assume that both databases are in the cluster you're currently connected to. Ha az Telemetry adatbázis egy TelemetryCluster.kusto.Windows.net nevű fürtben található, akkor a következő lekérdezéssel férhet hozzá:If the Telemetry database was in a cluster named TelemetryCluster.kusto.windows.net, to access it, use this query:

Logs | join cluster("TelemetryCluster").database("Telemetry").Metrics on Request MachineId | ...

Megjegyzés

Ha a fürt meg van adva, az adatbázis kötelező.When the cluster is specified, the database is mandatory.

A lekérdezésekben található több adatbázisból származó adatok egyesítésével kapcsolatos további információkért lásd: adatbázisok közötti lekérdezések.For more information about combining data from several databases in a query, see cross-database queries.

További lépésekNext steps

A Kusto lekérdezési nyelvének megismerésére a legjobb módszer, ha megvizsgálunk néhány alapszintű lekérdezést a nyelv "Feel" lekérdezéséhez.The best way to learn about the Kusto Query Language is to look at some basic queries to get a "feel" for the language. Ezek a lekérdezések hasonlóak az Azure Adatkezelő oktatóanyagban használt lekérdezésekhez, de ehelyett az Azure Log Analytics-munkaterület általános tábláiból származó adatok használatát használják.These queries are similar to queries that are used in the Azure Data Explorer tutorial, but they instead use data from common tables in an Azure Log Analytics workspace.

Ezeket a lekérdezéseket a Azure Portal Log Analytics használatával futtathatja.Run these queries by using Log Analytics in the Azure portal. A Log Analytics egy olyan eszköz, amellyel a naplók írására használható.Log Analytics is a tool you can use to write log queries. A naplózási adatAzure Monitor, majd a napló lekérdezési eredményeinek kiértékelése.Use log data in Azure Monitor, and then evaluate log query results. Ha nem ismeri a Log Analyticst, végezze el a log Analytics oktatóanyagot.If you aren't familiar with Log Analytics, complete the Log Analytics tutorial.

Az oktatóanyagban szereplő összes lekérdezés a log Analytics bemutató környezetéthasználja.All queries in this tutorial use the Log Analytics demo environment. Használhatja saját környezetét is, de előfordulhat, hogy nem rendelkezik az itt használt táblák némelyikével.You can use your own environment, but you might not have some of the tables that are used here. Mivel a bemutató környezet adatai nem statikusak, a lekérdezések eredményei az itt látható eredményektől némileg eltérőek lehetnek.Because the data in the demo environment isn't static, the results of your queries might vary slightly from the results shown here.

Sorok számlálásaCount rows

A InsightsMetrics tábla olyan teljesítményadatokat tartalmaz, amelyeket az elemzések, például a Azure monitor for VMS és a tárolók Azure monitor gyűjtenek.The InsightsMetrics table contains performance data that's collected by insights such as Azure Monitor for VMs and Azure Monitor for containers. Ha szeretné megtudni, hogy mekkora a táblázat, a tartalmat egy operátorba fogjuk irányítani, amely egyszerűen megszámolja a sorokat.To find out how large the table is, we'll pipe its content into an operator that simply counts the rows.

A lekérdezés egy adatforrás (általában egy Táblanév), amelyet opcionálisan követ a cső karakterének és néhány táblázatos operátornak egy vagy több párja.A query is a data source (usually a table name), optionally followed by one or more pairs of the pipe character and some tabular operator. Ebben az esetben a rendszer a táblából származó összes rekordot InsightsMetrics visszaadja, majd elküldi a Count operátornak.In this case, all records from the InsightsMetrics table are returned and then sent to the count operator. Az count operátor megjeleníti az eredményeket, mert az operátor a lekérdezés utolsó parancsa.The count operator displays the results because the operator is the last command in the query.

InsightsMetrics | count

Ez a kimenet:Here's the output:

DarabszámCount
1 263 1911,263,191

Szűrés logikai kifejezés szerint: WhereFilter by Boolean expression: where

A AzureActivity táblában szerepelnek az Azure-tevékenység naplóból származó bejegyzések, amely betekintést nyújt az Azure-ban bekövetkezett előfizetési szintű vagy felügyeleti csoport szintű eseményekre.The AzureActivity table has entries from the Azure activity log, which provides insight into any subscription-level or management group-level events that occurred in Azure. Lássunk Critical egy adott héten belül csak bejegyzéseket.Let's see only Critical entries during a specific week.

A Where operátor a Kusto lekérdezési nyelvben gyakori.The where operator is common in the Kusto Query Language. where tábla szűrése adott feltételeknek megfelelő sorokrawhere filters a table to rows that match specific criteria. Az alábbi példa több parancsot használ.The following example uses multiple commands. Először a lekérdezés lekérdezi a tábla összes rekordját.First, the query retrieves all records for the table. Ezt követően csak az adott időtartományban lévő rekordok adatait szűri.Then, it filters the data for only records that are in the time range. Végül pedig csak a szinttel rendelkező rekordok esetében szűri az eredményeket Critical .Finally, it filters those results for only records that have a Critical level.

Megjegyzés

A szűrőnek az oszlop használatával történő megadásán kívül megadhatja TimeGenerated az időtartományt log Analyticsban.In addition to specifying a filter in your query by using the TimeGenerated column, you can specify the time range in Log Analytics. További információ: Azure Monitor log Analytics naplózási lekérdezési hatóköre és időtartománya.For more information, see Log query scope and time range in Azure Monitor Log Analytics.

AzureActivity
| where TimeGenerated > datetime(10-01-2020) and TimeGenerated < datetime(10-07-2020)
| where Level == 'Critical'

Képernyőkép, amely az adott operátor példájának eredményeit jeleníti meg.

Oszlopok részhalmazának kiválasztása: projektSelect a subset of columns: project

A Project használatával csak a kívánt oszlopokat vegye fel.Use project to include only the columns you want. Az előző példára építve a kimenetet bizonyos oszlopokra szűkítheti:Building on the preceding example, let's limit the output to certain columns:

AzureActivity
| where TimeGenerated > datetime(10-01-2020) and TimeGenerated < datetime(10-07-2020)
| where Level == 'Critical'
| project TimeGenerated, Level, OperationNameValue, ResourceGroup, _ResourceId

Képernyőkép, amely a projekt operátorának eredményeit jeleníti meg.

N sor megjelenítése: TakeShow n rows: take

A NetworkMonitoring az Azure Virtual Networks figyelési szolgáltatásait tartalmazza.NetworkMonitoring contains monitoring data for Azure virtual networks. A Take operátor használatával tíz véletlenszerű mintát is megvizsgálhat ebben a táblázatban.Let's use the take operator to look at ten random sample rows in that table. A Take bizonyos számú sort mutat egy táblából a megadott sorrendben:The take shows a certain number of rows from a table in no particular order:

NetworkMonitoring
| take 10
| project TimeGenerated, Computer, SourceNetwork, DestinationNetwork, HighLatency, LowLatency

Képernyőkép, amely a Take operátor példáját mutatja.

Sorrend eredményei: Rendezés, felülOrder results: sort, top

Véletlenszerű rekordok helyett a legújabb öt rekordot az első rendezési idő szerint tudjuk visszaadni:Instead of random records, we can return the latest five records by first sorting by time:

NetworkMonitoring
| sort by TimeGenerated desc
| take 5
| project TimeGenerated, Computer, SourceNetwork, DestinationNetwork, HighLatency, LowLatency

Ezt a pontos viselkedést a felső operátor használatával érheti el:You can get this exact behavior by instead using the top operator:

NetworkMonitoring
| top 5 by TimeGenerated desc
| project TimeGenerated, Computer, SourceNetwork, DestinationNetwork, HighLatency, LowLatency

Képernyőkép, amely a legfelső szintű operátor eredményeit jeleníti meg.

Számítási származtatott oszlopok: kiterjesztésCompute derived columns: extend

A kibővítő operátor hasonló a projekthez, de az oszlopok halmaza helyett az oszlopokat adja hozzá.The extend operator is similar to project, but it adds to the set of columns instead of replacing them. Mindkét operátor használatával létrehozhat egy új oszlopot az egyes sorokon számított számítások alapján.You can use both operators to create a new column based on a computation on each row.

A perf tábla a log Analytics ügynököt futtató virtuális gépekről összegyűjtött teljesítményadatokat tartalmaz.The Perf table has performance data that's collected from virtual machines that run the Log Analytics agent.

Perf
| where ObjectName == "LogicalDisk" and CounterName == "Free Megabytes"
| project TimeGenerated, Computer, FreeMegabytes = CounterValue
| extend FreeGigabytes = FreeMegabytes / 1000

A kibővítő operátor példájának eredményeit bemutató képernyőkép.

Sorok összesített csoportjai: ÖsszefoglalásAggregate groups of rows: summarize

Az Összefoglaló operátor csoportosítja azokat a sorokat, amelyek azonos értékekkel rendelkeznek a by záradékban.The summarize operator groups together rows that have the same values in the by clause. Ezt követően egy összesítési függvényt használ, count amellyel az egyes csoportokat egyetlen sorban egyesítheti.Then, it uses an aggregation function like count to combine each group in a single row. Számos aggregációs függvény érhető el.A range of aggregation functions are available. Egy operátor több összesítési függvényt is használhat summarize több számított oszlop létrehozásához.You can use several aggregation functions in one summarize operator to produce several computed columns.

A SecurityEvent tábla olyan biztonsági eseményeket tartalmaz, mint a figyelt számítógépeken indított bejelentkezések és folyamatok.The SecurityEvent table contains security events like logons and processes that started on monitored computers. Megszámolhatja, hogy az egyes szinteken hány esemény történt az egyes számítógépeken.You can count how many events of each level occurred on each computer. Ebben a példában egy sor jön létre az egyes számítógépekhez és szintekhez.In this example, a row is produced for each computer and level combination. Az oszlopok az események számát tartalmazzák.A column contains the count of events.

SecurityEvent
| summarize count() by Computer, Level

Képernyőkép, amely az összegzési szám operátorának eredményeit jeleníti meg.

Összegzés skaláris értékek alapjánSummarize by scalar values

Egy skaláris értékek, például a számok és az időértékek összesítése, de a bin () függvényt kell használnia a sorok különböző adatkészletekben való csoportosításához.You can aggregate by scalar values like numbers and time values, but you should use the bin() function to group rows into distinct sets of data. Ha például összesíti a-t TimeGenerated , egy sor jelenik meg szinte minden alkalommal.For example, if you aggregate by TimeGenerated, you'll get a row for almost every time value. bin()Ezeket az értékeket egy órára vagy napra összesítheti.Use bin() to consolidate those values into hour or day.

A InsightsMetrics tábla olyan teljesítményadatokat tartalmaz, amelyeket az elemzések, például a Azure monitor for VMS és a tárolók Azure monitor gyűjtenek.The InsightsMetrics table contains performance data that's collected by insights such as Azure Monitor for VMs and Azure Monitor for containers. A következő lekérdezés a processzorok óránkénti átlagos kihasználtságát mutatja több számítógép esetén:The following query shows the hourly average processor utilization for multiple computers:

InsightsMetrics
| where Computer startswith "DC"
| where Namespace  == "Processor" and Name == "UtilizationPercentage"
| summarize avg(Val) by Computer, bin(TimeGenerated, 1h)

Képernyőkép, amely az átlagos operátori példa eredményeit jeleníti meg.

Diagram vagy táblázat megjelenítése: megjelenítésDisplay a chart or table: render

A Render operátor megadja a lekérdezés kimenetének megjelenítését.The render operator specifies how the output of the query is rendered. A Log Analytics alapértelmezés szerint táblázatként jeleníti meg a kimenetet.Log Analytics renders output as a table by default. A lekérdezés futtatása után különböző diagramtípusok közül választhat.You can select different chart types after you run the query. Az render operátor hasznos lehet olyan lekérdezésekben is, amelyekben az adott típusú diagram általában előnyben részesített.The render operator is useful to include in queries in which a specific chart type usually is preferred.

Az alábbi példa egy adott számítógép óránkénti átlagos processzor-kihasználtságát mutatja be.The following example shows the hourly average processor utilization for a single computer. A kimenetet idődiagramját jeleníti meg.It renders the output as a timechart.

InsightsMetrics
| where Computer == "DC00.NA.contosohotels.com"
| where Namespace  == "Processor" and Name == "UtilizationPercentage"
| summarize avg(Val) by Computer, bin(TimeGenerated, 1h)
| render timechart

A render operátor példájának eredményét bemutató képernyőkép.

Több adatsorozat használataWork with multiple series

Ha egy záradékban több értéket is használ summarize by , a diagram egy külön sorozatot jelenít meg az egyes értékeknél:If you use multiple values in a summarize by clause, the chart displays a separate series for each set of values:

InsightsMetrics
| where Computer startswith "DC"
| where Namespace  == "Processor" and Name == "UtilizationPercentage"
| summarize avg(Val) by Computer, bin(TimeGenerated, 1h)
| render timechart

Képernyőfelvétel: a render operátor eredményeinek megjelenítése több adatsorozatos példával.

Adatok csatlakoztatása két táblábólJoin data from two tables

Mi a teendő, ha két tábla adatait kell lekérnie egyetlen lekérdezésben?What if you need to retrieve data from two tables in a single query? A JOIN operátor használatával egyetlen eredményhalmaz sorait egyesítheti több táblából.You can use the join operator to combine rows from multiple tables in a single result set. Minden táblának rendelkeznie kell egy egyező értékkel rendelkező oszloppal, hogy a JOIN megértse, hogy mely sorok egyeznek meg.Each table must have a column that has a matching value so that the join understands which rows to match.

A VMComputer olyan tábla, amelyet a virtuális gépek Azure monitor használ az általa figyelt virtuális gépek adatainak tárolására.VMComputer is a table that Azure Monitor uses for VMs to store details about virtual machines that it monitors. A InsightsMetrics a virtuális gépekről összegyűjtött teljesítményadatokat tartalmaz.InsightsMetrics contains performance data that's collected from those virtual machines. A InsightsMetrics -ben összegyűjtött egyik érték elérhető memória, nem pedig az elérhető százalékos memória.One value collected in InsightsMetrics is available memory, but not the percentage memory that's available. A százalék kiszámításához az egyes virtuális gépek fizikai memóriára van szükségük.To calculate the percentage, we need the physical memory for each virtual machine. Ez az érték a-ben van VMComputer .That value is in VMComputer.

A következő példában a lekérdezés egy illesztés használatával hajtja végre ezt a számítást.The following example query uses a join to perform this calculation. A rendszer a DISTINCT operátort használja, VMComputer mivel a részleteket rendszeresen gyűjti az egyes számítógépekről.The distinct operator is used with VMComputer because details are regularly collected from each computer. Ennek eredményeképpen több sor jön létre a tábla minden számítógépe számára.As result, multiple rows are created for each computer in the table. A két tábla az oszlop használatával csatlakozik Computer .The two tables are joined by using the Computer column. Egy sor jön létre az eredményhalmazban, amely mindkét táblázat oszlopait tartalmazza a összes sorában InsightsMetrics , és az érték megegyezik a Computer Computer oszlopban található oszlop értékével VMComputer .A row is created in the result set that includes columns from both tables for each row in InsightsMetrics, with a value in Computer that matches the same value in the Computer column in VMComputer.

VMComputer
| distinct Computer, PhysicalMemoryMB
| join kind=inner (
    InsightsMetrics
    | where Namespace == "Memory" and Name == "AvailableMB"
    | project TimeGenerated, Computer, AvailableMemoryMB = Val
) on Computer
| project TimeGenerated, Computer, PercentMemory = AvailableMemoryMB / PhysicalMemoryMB * 100

Képernyőkép, amely az összekapcsolási operátor eredményét jeleníti meg.

Eredmény kiosztása változóhoz: letAssign a result to a variable: let

A használata lehetővé teszi, hogy a lekérdezések könnyebben olvashatók és kezelhetők legyenek.Use let to make queries easier to read and manage. Ezt az operátort használhatja egy lekérdezés eredményeinek egy olyan változóhoz való hozzárendeléséhez, amelyet később használhat.You can use this operator to assign the results of a query to a variable that you can use later. Az utasítás használatával az let előző példában szereplő lekérdezés a következőképpen írható újra:By using the let statement, the query in the preceding example can be rewritten as:

let PhysicalComputer = VMComputer
    | distinct Computer, PhysicalMemoryMB;
    let AvailableMemory = 
InsightsMetrics
    | where Namespace == "Memory" and Name == "AvailableMB"
    | project TimeGenerated, Computer, AvailableMemoryMB = Val;
PhysicalComputer
| join kind=inner (AvailableMemory) on Computer
| project TimeGenerated, Computer, PercentMemory = AvailableMemoryMB / PhysicalMemoryMB * 100

Képernyőkép, amely a let operátor példájának eredményeit jeleníti meg.

További lépésekNext steps