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 형식이어야 하며, TableSchema 는 ColumnName: ColumnType 형식의 쉼표로 구분된 열 목록이거나 와일드카드(* )입니다. 열을 지정하면 입력 테이블 형식 인수에 이러한 열이 포함되어야 합니다. 와일드카드를 지정하면 입력 테이블 형식 인수에 스키마가 있을 수 있습니다. 함수 본문의 열을 참조하려면 열을 지정해야 합니다. 예를 들어 스키마가 있는 테이블 형식 인수 및 와일드카드가 있는테이블 형식 인수를 참조하세요.스칼라 형식의 각 매개 변수에 대해 매개 변수 이름 및 매개 변수 형식을 이름 : 형식으로 제공합니다. 이름은 FunctionBody 에 표시될 수 있으며 사용자 정의 함수가 호출될 때 특정 값에 바인딩됩니다. 지원되는 유일한 형식은 bool , , string , datetime long , 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 |
피드백
https://aka.ms/ContentUserFeedback을 참조하세요.
출시 예정: 2024년 내내 콘텐츠 피드백 메커니즘인 GitHub 문제를 단계적으로 폐지하고 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은다음에 대한 사용자 의견 제출 및 보기