다음을 통해 공유


Let 문

적용 대상: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

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

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

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

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

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

참고 항목

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

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

let이름 =

Important

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

구문 규칙에 대해 자세히 알아봅니다.

매개 변수

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

구문: 보기 또는 함수

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

Important

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

구문 규칙에 대해 자세히 알아봅니다.

매개 변수

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

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

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

참고 항목

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

예제

스칼라 값 정의

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

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 문 사용

이 예제에서는 한 문()이 다른foo1 문(foo2)을 사용하는 두 개의 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

출력

1일차 2일차 백분율
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 문이 허용됩니다. Let 문과 인수는 함수 본문의 현재 범위와 내부 범위 모두에서 적용됩니다.

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

출력

State(상태) s_s
ATLANTIC SOUTH 대서양 남아틀란틱 사우스
플로리다 FLORIDAFLORIDA
플로리다 FLORIDAFLORIDA
그루지야 GEORGIAGEORGIA
미시시피 MISSISSIPPIMISSISSIPPI
... ...

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

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

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

출력

Count
59,066