Applies to: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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 , ,string long , datetime , timespan , real dynamic 및 이러한 형식의 별칭뿐입니다. |
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 |