let ステートメント
適用対象: ✅Microsoft Fabric✅Azure データ エクスプローラー✅Azure Monitor✅Microsoft Sentinel
let
ステートメントは、式または関数と等しい変数名を設定したり、viewsを作成したりするために使用されます。
let
ステートメントは、次の場合に役立ちます。
- 複雑な式を、それぞれが変数によって表される複数の部分に分割する。
- 読みやすくするため、クエリ本体の外部で定数を定義する。
- 変数を一度定義し、1 つのクエリ内で複数回それを使用する。
入れ子になったステートメントなど、変数が前に別の値を表していた場合は、最も内側の let
ステートメントが適用されます。
1 つのクエリ内での let
ステートメントの複数使用を最適化するには、「名前付き式を使用するクエリを最適化する」を参照してください。
Note
let
ステートメントは、その計算の評価値ではなく、名前を計算にバインドします。 この動作は、計算が複数回評価されるため、同じ名前への複数の参照が異なる値を返す可能性があることを意味します。 これが望ましい動作でない場合は、 toscalar() または materialize()を使用します。
構文: スカラーまたは表形式の式
let
Name =
Expression
重要
let ステートメントの後には、セミコロンを付ける必要があります。 let ステートメントの間、または let ステートメントと他のクエリ ステートメントの間には、空白行を指定することはできません。
構文規則について詳しく知る。
パラメーター
件名 | タイプ | Required | 内容 |
---|---|---|---|
名前 | string |
✔️ | 変数名。 名前は角かっこでエスケープできます。 たとえば、「 ["Name with spaces"] 」のように入力します。 |
Expression | string |
✔️ | スカラーまたは表形式の結果を含む式。 たとえば、スカラーの結果を含む式は let one=1; となり、表形式の結果を含む式は let RecentLog = Logs | where Timestamp > ago(1h) となります。 |
構文: ビューまたは関数
let
Name =
[view
] (
[ Parameters ])
{
FunctionBody }
重要
let ステートメントの後には、セミコロンを付ける必要があります。 let ステートメントの間、または let ステートメントと他のクエリ ステートメントの間には、空白行を指定することはできません。
構文規則について詳しく知る。
パラメーター
件名 | タイプ | Required | 説明 |
---|---|---|---|
FunctionBody | string |
✔️ | ユーザー定義関数を生成する式。 |
view |
string |
パラメーターのない let ステートメントにのみ関連します。 使用すると、let ステートメントは、union 演算子とテーブルまたはビューのワイルドカード選択が使用されているクエリに含められます。 例については、「ビューまたは仮想テーブルを作成する」を参照してください。 |
|
パラメーター | string |
0 個以上のコンマ区切りの表形式またはスカラー関数のパラメーター。 表形式の各パラメーターについて、パラメーターは TableName : TableSchema 形式である必要があります。TableSchema は、ColumnName: ColumnType 形式の列のコンマ区切りリストまたはワイルドカード (* ) です。 列が指定されている場合は、入力の表形式引数にこれらの列が含まれている必要があります。 ワイルドカードが指定されている場合、入力の表形式引数には任意のスキーマを指定できます。 関数本体の列を参照するには、列を指定する必要があります。 例については、「スキーマを使用した表形式の引数」と「ワイルドカードを使用した表形式の引数」を参照してください。スカラー型の各パラメーターに対して、パラメーター名とパラメーター型を Name : Type の形式で指定します。 この名前は FunctionBody で使用でき、ユーザー定義関数が呼び出されると特定の値にバインドされます。 サポートされている型は、bool 、string 、long 、datetime 、timespan 、real 、dynamic 、およびこれらの型の別名のみです。 |
Note
- 表形式パラメーターは、スカラー パラメーターの前に指定する必要があります。
- 2 つのステートメントは、セミコロンで区切る必要があります。
例
スカラー値を定義する
次の例では、スカラー式のステートメントを使用しています。
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 ステートメントを使用します。 2 つの数値を乗算する関数 MultiplyByN
をクエリで定義します。
let MultiplyByN = (val:long, n:long) { val * n };
range x from 1 to 5 step 1
| extend result = MultiplyByN(x, 5)
出力
x | 結果 |
---|---|
1 | 5 |
2 | 10 |
3 | 15 |
4 | 20 |
5 | 25 |
入力をトリミングするユーザー定義関数を作成する
次の例では、入力の先頭と末尾から 1 を削除します。
let TrimOnes = (s:string) { trim("1", s) };
range x from 10 to 15 step 1
| extend result = TrimOnes(tostring(x))
出力
x | 結果 |
---|---|
10 | 0 |
11 | |
12 | 2 |
13 | 3 |
14 | 4 |
15 | 5 |
複数の let ステートメントを使用する
この例では、2 つの let ステートメントを定義し、一方のステートメント (foo2
) で他方 (foo1
) を使用します。
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
出力
結果 |
---|
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()
関数を使用すると、クエリの実行時に、サブクエリの結果をキャッシュすることができます。 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 ステートメントを使用できます。 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 | ATLANTIC SOUTHATLANTIC SOUTH |
FLORIDA | FLORIDAFLORIDA |
FLORIDA | FLORIDAFLORIDA |
GEORGIA | GEORGIAGEORGIA |
MISSISSIPPI | MISSISSIPPIMISSISSIPPI |
... | ... |
ワイルドカードを使用した表形式の引数
表パラメーター T
には任意のスキーマを指定でき、関数 CountRecordsInTable
は機能します。
let CountRecordsInTable=(T: (*)) { T | count };
StormEvents | invoke CountRecordsInTable()
出力
Count |
---|
59,066 |