Instrucción Let
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Se let
usa una instrucción para establecer un nombre de variable igual a una expresión o una función, o para crear vistas.
Las instrucciones let
son útiles para:
- Dividir una expresión compleja en varias partes, cada una representada por una variable.
- Definir constantes fuera del cuerpo de la consulta para mejorar la legibilidad.
- Definir una variable una vez y usarla varias veces dentro de una consulta.
Si la variable anteriormente representaba otro valor, por ejemplo, en instrucciones anidadas, se aplicará la instrucción let
más interna.
Para optimizar varios usos de la instrucción let
en una sola consulta, vea Optimización de consultas que usan expresiones con nombre.
Nota:
La let
instrucción enlaza un nombre a un cálculo, no al valor evaluado de ese cálculo. Este comportamiento significa que varias referencias al mismo nombre pueden devolver valores diferentes debido a que el cálculo se evalúa varias veces. Si no es el comportamiento deseado, use toscalar() o materialize().
Sintaxis: expresiones escalares o tabulares
let
Nombre =
Expresión
Importante
Las instrucciones Let deben ir seguidas de punto y coma. No puede haber líneas en blanco entre instrucciones let o entre instrucciones let y otras instrucciones de consulta.
Obtenga más información sobre las convenciones de sintaxis.
Parámetros
Nombre | Type | Obligatorio | Descripción |
---|---|---|---|
Nombre | string |
✔️ | El nombre de la variable. Puede omitir el nombre entre corchetes. Por ejemplo, ["Name with spaces"] . |
Expression | string |
✔️ | Una expresión con un resultado escalar o tabular. Por ejemplo, una expresión con un resultado escalar sería let one=1; , y una expresión con un resultado tabular sería let RecentLog = Logs | where Timestamp > ago(1h) . |
Sintaxis: vista o función
let
Nombre =
[view
] (
[ Parámetros ])
{
FunctionBody }
Importante
Las instrucciones Let deben ir seguidas de punto y coma. No puede haber líneas en blanco entre instrucciones let o entre instrucciones let y otras instrucciones de consulta.
Obtenga más información sobre las convenciones de sintaxis.
Parámetros
Nombre | Type | Obligatorio | Descripción |
---|---|---|---|
FunctionBody | string |
✔️ | Una expresión que representa una función definida por el usuario. |
view |
string |
Solo es relevante para una instrucción let sin parámetros. Cuando se usa, la instrucción let se incluye en las consultas con un operador union y una selección de caracteres comodín de las tablas y vistas. Para obtener un ejemplo, consulte Creación de una vista o una tabla virtual. |
|
Parámetros | string |
Cero o más parámetros de función tabular o escalar separados por comas. En el caso de los parámetros de tipo tabular, el parámetro debe tener el formato TableName : TableSchema, en el que TableSchema es una lista separada por comas de columnas con el formato ColumnName: ColumnType o un carácter comodín (* ). Si se especifican columnas, el argumento tabular de entrada debe contener estas columnas. Si se especifica un carácter comodín, el argumento tabular de entrada puede tener cualquier esquema. Para hacer referencia a columnas en el cuerpo de la función, estas deben especificarse. Para obtener ejemplos, consulte Argumento tabular con esquema y Argumento tabular con caracteres comodín.Para cada parámetro de tipo escalar, proporcione el nombre y el tipo del parámetro con el formato Nombre : Tipo. El nombre puede aparecer en FunctionBody y se enlaza a un valor determinado cuando se invoca la expresión lambda. Los únicos tipos admitidos son bool , string , long , datetime , timespan , real , dynamic y su correspondientes alias. |
Nota:
- Los parámetros tabulares deben aparecer antes de los parámetros escalares.
- Las instrucciones deben estar separadas por un punto y coma.
Ejemplos
Definición de valores escalares
En el ejemplo siguiente se usa una instrucción de expresión escalar.
let n = 10; // number
let place = "Dallas"; // string
let cutoff = ago(62d); // datetime
Events
| where timestamp > cutoff
and city == place
| take n
En el ejemplo siguiente se enlaza el nombre some number
mediante la notación ['name']
y, a continuación, se usa en una instrucción de expresión tabular.
let ['some number'] = 20;
range y from 0 to ['some number'] step 5
Creación de una función definida por el usuario mediante cálculo escalar
En este ejemplo se usa la instrucción Let con argumentos para el cálculo escalar. La consulta define la función MultiplyByN
para multiplicar dos números.
let MultiplyByN = (val:long, n:long) { val * n };
range x from 1 to 5 step 1
| extend result = MultiplyByN(x, 5)
Salida
x | resultado |
---|---|
1 | 5 |
2 | 10 |
3 | 15 |
4 | 20 |
5 | 25 |
Creación de una función definida por el usuario que recorta la entrada
En el siguiente ejemplo se quitan los valores iniciales y finales de la entrada.
let TrimOnes = (s:string) { trim("1", s) };
range x from 10 to 15 step 1
| extend result = TrimOnes(tostring(x))
Salida
x | resultado |
---|---|
10 | 0 |
11 | |
12 | 2 |
13 | 3 |
14 | 4 |
15 | 5 |
Uso de varias instrucciones Let
En este ejemplo se definen dos instrucciones Let de manera que una instrucción (foo2
) usa a la otra (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
Salida
resultado |
---|
50 |
Creación de una vista o una tabla virtual
En este ejemplo se muestra cómo usar una instrucción let para crear una view
o tabla virtual.
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
Salida
$table | MyColumn |
---|---|
Range10 | 5 |
Range20 | 5 |
Uso de la función materialize
La función materialize()
permite almacenar en caché los resultados de la subconsulta durante la ejecución de la consulta. Cuando se usa la función materialize()
, los datos se almacenan en caché y cualquier invocación posterior del resultado usa datos almacenados en caché.
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
Salida
Día 1 | Día 2 | Porcentaje |
---|---|---|
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 |
Uso de instrucciones let anidadas
Se permite el uso de instrucciones let anidadas, incluida una expresión de función definida por el usuario. Las instrucciones y argumentos Let se aplican en el ámbito actual e interno del cuerpo de la función.
let start_time = ago(5h);
let end_time = start_time + 2h;
T | where Time > start_time and Time < end_time | ...
Argumento tabular con esquema
En el ejemplo siguiente se especifica que el parámetro T
de tabla debe tener una columna State
de tipo string
. La tabla T
también puede incluir otras columnas, pero no se puede hacer referencia a ellas en la función StateState
porque no se declaran.
let StateState=(T: (State: string)) { T | extend s_s=strcat(State, State) };
StormEvents
| invoke StateState()
| project State, s_s
Salida
State | s_s |
---|---|
ATLÁNTICO SUR | ATLANTIC SOUTHATLANTIC SOUTH |
FLORIDA | FLORIDAFLORIDA |
FLORIDA | FLORIDAFLORIDA |
GEORGIA | GEORGIAGEORGIA |
MISISIPÍ | MISSISSIPPIMISSISSIPPI |
... | ... |
Argumento tabular con carácter comodín
El parámetro T
de tabla puede tener cualquier esquema y la función CountRecordsInTable
funcionará.
let CountRecordsInTable=(T: (*)) { T | count };
StormEvents | invoke CountRecordsInTable()
Salida
Count |
---|
59 066 |