Let 문
적용 대상: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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 , ,string long , datetime , 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 문 사용
이 예제에서는 한 문()이 다른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 |