Compartir a través de


Let statement

Applies to: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

A let statement is used to set a variable name equal to an expression or a function, or to create views.

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.

Note

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. If this is not the desired behavior, use toscalar() or materialize().

Sintaxis: expresiones escalares o tabulares

let Name=Expression

Important

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.

Learn more about syntax conventions.

Parameters

Name Type Required Description
Name 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 Name= [view] ([ Parameters ]){FunctionBody}

Important

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.

Learn more about syntax conventions.

Parameters

Name Type Required Description
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.
Parameters string Cero o más parámetros de función tabular o escalar separados por comas.

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 (*). 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.

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. Los únicos tipos admitidos son bool, string, long, datetime, timespan, real, dynamic y su correspondientes alias.

Note

  • Los parámetros tabulares deben aparecer antes de los parámetros escalares.
  • Las instrucciones deben estar separadas por un punto y coma.

Examples

Los ejemplos de consulta muestran la sintaxis y el uso de ejemplo del operador, la instrucción o la función.

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. Es posible que tenga que modificar el nombre de la tabla en la consulta de ejemplo para que coincida con la tabla del área de trabajo.

Definición de valores escalares

En el ejemplo siguiente se usa una instrucción de expresión escalar.

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

Definición de expresiones tabulares

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

Output

y
0
5
10
15
20

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)

Output

x result
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))

Output

x result
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

Output

result
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

Output

$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 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
... ... ... ...

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

Output

State s_s
ATLANTIC SOUTH SUR ATLÁNTICO SURATLANTICO
FLORIDA FLORIDAFLORIDA
FLORIDA FLORIDAFLORIDA
GEORGIA GEORGIAGEORGIA
MISSISSIPPI 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()

Output

Count
59,066