Let 문

let 문은 식 또는 함수와 같은 변수 이름을 설정하거나 를 만드는 데 사용됩니다.

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

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

변수가 이전에 중첩된 문과 같은 다른 값을 나타내는 경우 가장 let 안쪽 문이 적용됩니다.

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

참고

문은 let 계산의 평가된 값이 아닌 계산에 이름을 바인딩합니다. 이 동작은 계산이 여러 번 평가되므로 동일한 이름에 대한 여러 참조가 다른 값을 반환할 수 있음을 의미합니다. 원하는 동작이 아닌 경우 toscalar() 또는 materialize()를 사용합니다.

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

let이름=

중요

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

구문 규칙에 대해 자세히 알아보세요.

매개 변수

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

구문: 보기 또는 함수

let이름= [view] ([ 매개 변수 ]){FunctionBody}

중요

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

구문 규칙에 대해 자세히 알아보세요.

매개 변수

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

테이블 형식의 각 매개 변수에 대해 매개 변수는 TableName:TableSchema 형식이어야 하며, TableSchemaColumnName:ColumnType 형식의 쉼표로 구분된 열 목록이거나 와일드카드(*)입니다. 열을 지정하면 입력 테이블 형식 인수에 이러한 열이 포함되어야 합니다. 와일드카드를 지정하면 입력 테이블 형식 인수에 스키마가 있을 수 있습니다. 함수 본문의 열을 참조하려면 열을 지정해야 합니다. 예를 들어 스키마가 있는 테이블 형식 인수 및 와일드카드가 있는테이블 형식 인수를 참조하세요.

스칼라 형식의 각 매개 변수에 대해 매개 변수 이름 및 매개 변수 형식을 이름:형식으로 제공합니다. 이름은 FunctionBody 에 표시될 수 있으며 사용자 정의 함수가 호출될 때 특정 값에 바인딩됩니다. 지원되는 유일한 형식은 bool, , string, datetimelong, timespan, real, dynamic, 및 이러한 형식의 별칭입니다.

참고

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

예제

스칼라 값 정의

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

let n = 10;  // number
let place = "Dallas";  // string
let cutoff = ago(62d); // datetime 
Events 
| where timestamp > cutoff 
    and city == place 
| take n

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

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

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

다음 예제에서는 인수가 포함된 let 문을 스칼라 계산에 사용합니다. 쿼리는 두 숫자를 곱하는 MultiplyByN 함수를 정의합니다.

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

출력

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))

출력

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

출력

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

출력

$table MyColumn
Range10 5
Range20 5

구체화 함수 사용

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

let totalPagesPerDay = PageViews
| summarize by Page, Day = startofday(Timestamp)
| summarize count() by Day;
let materializedScope = PageViews
| summarize by Page, Day = startofday(Timestamp);
let cachedResult = materialize(materializedScope);
cachedResult
| project Page, Day1 = Day
| join kind = inner
(
    cachedResult
    | project Page, Day2 = Day
)
on Page
| where Day2 > Day1
| summarize count() by Day1, Day2
| join kind = inner
    totalPagesPerDay
on $left.Day1 == $right.Day
| project Day1, Day2, Percentage = count_*100.0/count_1

출력

Day1 Day2 백분율
2016-05-01 00:00:00.0000000 2016-05-02 00:00:00.0000000 34.0645725975255
2016-05-01 00:00:00.0000000 2016-05-03 00:00:00.0000000 16.618368960101
2016-05-02 00:00:00.0000000 2016-05-03 00:00:00.0000000 14.6291376489636

중첩된 let 문 사용

사용자 정의 함수 식 내에서 를 포함하여 중첩된 let 문이 허용됩니다. 함수 본문의 현재 및 내부 scope 문과 인수가 모두 적용되도록 합니다.

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

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

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

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

출력

시스템 상태 s_s
대서양 남부 대서양 남대서양 남부
FLORIDA 플로리다플로리다
FLORIDA 플로리다플로리다
GEORGIA GEORGIAGEORGIA
미시시피 MISSISSIPPIMISSISSIPPI
... ...

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

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

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

출력

개수
59,066