다음을 통해 공유


Let statement

Applies to: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

A let statement is used to set a variable name equal to an expression or a function, or to create views.

let 문은 다음에 유용합니다.

  • 복잡한 식을 각각 변수로 나타내는 여러 부분으로 나타낸다.
  • 가독성을 위해 쿼리 본문 외부의 상수 정의
  • 변수를 한 번 정의하고 쿼리 내에서 여러 번 사용합니다.

변수가 이전에 다른 값을 나타내는 경우(예: 중첩된 문에서) 가장 let 안쪽 문이 적용됩니다.

단일 쿼리 내에서 문의 여러 사용을 let 최적화하려면 명명된 식을 사용하는 쿼리 최적화를 참조 하세요.

Note

이 문은 let 계산의 계산 값이 아닌 계산에 이름을 바인딩합니다. 이 동작은 계산이 여러 번 평가되므로 동일한 이름에 대한 여러 참조가 다른 값을 반환할 수 있음을 의미합니다. If this is not the desired behavior, use toscalar() or materialize().

구문: 스칼라 또는 테이블 형식 식

let Name=Expression

Important

Let 문 뒤에 세미콜론이 있어야 합니다. let 문 사이 또는 let 문과 다른 쿼리 문 사이에는 빈 줄이 있을 수 없습니다.

Learn more about syntax conventions.

Parameters

Name Type Required Description
Name string ✔️ 변수 이름입니다. 대괄호로 이름을 이스케이프할 수 있습니다. 예들 들어 ["Name with spaces"]입니다.
Expression string ✔️ 스칼라 또는 테이블 형식 결과가 있는 식입니다. 예를 들어 스칼라 결과가 let one=1;있는 식은 테이블 형식 결과가 let RecentLog = Logs | where Timestamp > ago(1h)있는 식입니다.

구문: 보기 또는 함수

let Name= [view] ([ Parameters ]){FunctionBody}

Important

Let 문 뒤에 세미콜론이 있어야 합니다. let 문 사이 또는 let 문과 다른 쿼리 문 사이에는 빈 줄이 있을 수 없습니다.

Learn more about syntax conventions.

Parameters

Name Type Required Description
FunctionBody string ✔️ 사용자 정의 함수를 생성하는 식입니다.
view string 매개 변수가 없는 let 문에만 관련됩니다. 이 문을 사용하면 let 테이블/뷰가 와일드카드로 선택된 연산자가 union 있는 쿼리에 문이 포함됩니다. 예를 들어 보기 또는 가상 테이블 만들기를 참조 하세요.
Parameters string 쉼표로 구분된 테이블 형식 또는 스칼라 함수 매개 변수가 0개 이상입니다.

For each parameter of tabular type, the parameter should be in the format TableName:TableSchema, in which TableSchema is either a comma-separated list of columns in the format ColumnName:ColumnType or a wildcard (*). 열을 지정하면 입력 테이블 형식 인수에 이러한 열이 포함되어야 합니다. 와일드카드를 지정하면 입력 테이블 형식 인수에 스키마가 있을 수 있습니다. 함수 본문의 열을 참조하려면 열을 지정해야 합니다. 예를 들어 스키마가 있는 테이블 형식 인수와 와일드카드가 있는 테이블 형식 인수를 참조하세요.

For each parameter of scalar type, provide the parameter name and parameter type in the format Name:Type. The name can appear in the FunctionBody and is bound to a particular value when the user defined function is invoked. 지원되는 형식은 bool, ,stringlong, datetime, timespan, realdynamic및 이러한 형식의 별칭뿐입니다.

Note

  • 테이블 형식 매개 변수는 스칼라 매개 변수 앞에 나타나야 합니다.
  • 두 문은 세미콜론으로 구분해야 합니다.

Examples

쿼리 예제는 연산자, 문 또는 함수의 구문 및 사용 예제를 보여 줍니다.

The examples in this article use publicly available tables in the help cluster, such as the StormEvents table in the Samples database.

The examples in this article use publicly available tables, such as the Weather table in the Weather analytics sample gallery. 작업 영역의 테이블과 일치하도록 예제 쿼리에서 테이블 이름을 수정해야 할 수 있습니다.

스칼라 값 정의

다음 예제에서는 스칼라 식 문을 사용합니다.

let threshold = 50;
let region = "West";
datatable(Name:string, Score:int, Region:string)
[
    "Alice", 45, "West",
    "Bob", 60, "East",
    "Charlie", 55, "West",
    "Dana", 70, "North"
]
| where Score > threshold and Region == region

Output

Name Score Region
Charlie 55 West

테이블 형식 식 정의

다음 예제에서는 표기법을 사용하여 some number 이름을 ['name'] 바인딩한 다음 테이블 형식 식 문에서 사용합니다.

let ['some number'] = 20;
range y from 0 to ['some number'] step 5

Output

y
0
5
10
15
20

스칼라 계산을 사용하여 사용자 정의 함수 만들기

이 예제에서는 스칼라 계산에 대한 인수와 함께 let 문을 사용합니다. 쿼리는 두 숫자를 곱하는 함수 MultiplyByN 를 정의합니다.

let MultiplyByN = (val:long, n:long) { val * n };
range x from 1 to 5 step 1 
| extend result = MultiplyByN(x, 5)

Output

x result
1 5
2 10
3 15
4 20
5 25

입력을 자르는 사용자 정의 함수 만들기

다음 예제에서는 입력에서 선행 및 후행을 제거합니다.

let TrimOnes = (s:string) { trim("1", s) };
range x from 10 to 15 step 1 
| extend result = TrimOnes(tostring(x))

Output

x result
10 0
11
12 2
13 3
14 4
15 5

다중 let 문 사용

이 예제에서는 한 문()이 다른foo2 문(foo1)을 사용하는 두 개의 let 문을 정의합니다.

let foo1 = (_start:long, _end:long, _step:long) { range x from _start to _end step _step};
let foo2 = (_step:long) { foo1(1, 100, _step)};
foo2(2) | count

Output

result
50

뷰 또는 가상 테이블 만들기

이 예제에서는 let 문을 사용하여 또는 가상 테이블을view 방법을 보여줍니다.

let Range10 = view () { range MyColumn from 1 to 10 step 1 };
let Range20 = view () { range MyColumn from 1 to 20 step 1 };
search MyColumn == 5

Output

$table MyColumn
Range10 5
Range20 5

구체화 함수 사용

materialize() 함수를 사용하면 쿼리 실행 시간 동안 하위 쿼리 결과를 캐시할 수 있습니다. 함수를 materialize() 사용하면 데이터가 캐시되고, 이후의 결과 호출에서 캐시된 데이터를 사용합니다.

let TotalEventsbyLocation = StormEvents
| summarize TotalCount = count() by Location = BeginLocation;
let materializedScope = StormEvents
| summarize by EventType, Location = EndLocation;
let cachedResult = materialize(materializedScope);
cachedResult
| project EventType, Location
| join kind = inner
(
    cachedResult
    | project EventType, Location
)
on EventType
| where Location != ""
| summarize EventCount = count() by Location
| join kind = inner
    TotalEventsbyLocation
on $left.Location == $right.Location
| project Location, EventCount, TotalCount, Percentage = EventCount * 100.0 / TotalCount

Output

Location EventCount TotalCount Percentage
MELBOURNE BEACH 112 1 11,200
EUSTIS 13,854 12 115,450
LOTTS 6,910 1 691,000
SERVICE 997 1 99,700
... ... ... ...

중첩된 let 문 사용

사용자 정의 함수 식 내를 포함하여 중첩된 let 문이 허용됩니다. Let 문과 인수는 함수 본문의 현재 범위와 내부 범위 모두에서 적용됩니다.

let start_time = ago(5h); 
let end_time = start_time + 2h; 
T | where Time > start_time and Time < end_time | ...

스키마가 있는 테이블 형식 인수

다음 예제에서는 테이블 매개 변수 T 에 형식State의 열 string 이 있어야 하며 테이블에 T 는 다른 열도 포함될 수 있지만 선언되지 않았기 때문에 함수 StateState 에서 참조할 수 없습니다.

let StateState=(T: (State: string)) { T | extend s_s=strcat(State, State) };
StormEvents
| invoke StateState()
| project State, s_s

Output

State s_s
ATLANTIC SOUTH 대서양 남아틀란틱 사우스
FLORIDA FLORIDAFLORIDA
FLORIDA FLORIDAFLORIDA
GEORGIA GEORGIAGEORGIA
MISSISSIPPI MISSISSIPPIMISSISSIPPI
... ...

와일드카드가 있는 테이블 형식 인수

테이블 매개 변수 T 에는 스키마가 있을 수 있으며 함수 CountRecordsInTable 가 작동합니다.

let CountRecordsInTable=(T: (*)) { T | count };
StormEvents | invoke CountRecordsInTable()

Output

Count
59,066