Share via


Operador lookup

Extiende las columnas de una tabla de hechos con valores buscados en una tabla de dimensiones.

FactTable | lookup kind=leftouter (DimensionTable) on CommonColumn, $left.Col1 == $right.Col2

Aquí, el resultado es una tabla que extiende (FactTable$left) con datos de DimensionTable (a los que hace $rightreferencia ) realizando una búsqueda de cada par (CommonColumn,Col) de la tabla anterior con cada par (CommonColumn1,Col2) en la última tabla. Para conocer las diferencias entre las tablas de hechos y dimensiones, vea tablas de hechos y dimensiones.

El lookup operador realiza una operación similar al operador join con las siguientes diferencias:

  • El resultado no repite las columnas de la $right tabla que son la base de la operación de combinación.
  • Solo se admiten dos tipos de búsqueda, leftouter y inner, siendo leftouter el valor predeterminado.
  • En términos de rendimiento, el sistema supone de forma predeterminada que la $left tabla es la tabla más grande (hechos) y la $right tabla es la tabla más pequeña (dimensiones). Esto es completamente opuesto a la suposición que usa el operador join.
  • El lookup operador difunde automáticamente la $right tabla a la $left tabla (básicamente, se comporta como si hint.broadcast se especificara). Esto limita el tamaño de la $right tabla.

Nota:

Si el lado derecho de la búsqueda es mayor que varias decenas de MB, se producirá un error en la consulta.

Puede ejecutar la siguiente consulta para calcular el tamaño del lado derecho en bytes:

rightSide
| summarize sum(estimate_data_size(*))

Sintaxis

LeftTable|lookup [kind= (leftouter|inner)] (Condicionesde RightTable)on

Más información sobre las convenciones de sintaxis.

Parámetros

Nombre Tipo Requerido Descripción
LeftTable string ✔️ La tabla o expresión tabular que es la base de la búsqueda. Se indica como $left.
RightTable string ✔️ La tabla o expresión tabular que se usa para "rellenar" columnas nuevas en la tabla de hechos. Se indica como $right.
Atributos string ✔️ Una lista delimitada por comas de una o varias reglas que describen cómo se coinciden las filas de LeftTable con las filas de RightTable. Se evalúan varias reglas mediante el operador lógico and. Consulte Reglas.
kind string Determina cómo tratar las filas de LeftTable que no tienen ninguna coincidencia en RightTable. De forma predeterminada, leftouter se usa , lo que significa que todas esas filas aparecerán en la salida con valores NULL usados para los valores que faltan de las columnas RightTable agregadas por el operador . Si inner se usa , estas filas se omiten de la salida. El operador no admite lookup otros tipos de combinación.

Reglas

Tipo de regla Sintaxis Predicate
Igualdad por nombre ColumnName whereLeftTable.ColumnName==RightTable.ColumnName
Igualdad por valor $left.LeftColumn==$right.RightColumn where$left.LeftColumn==$right.*RightColumn

Nota:

En el caso de "igualdad por valor", los nombres de columna deben calificarse con la tabla propietaria aplicable indicada por $left las notaciones y $right .

Devoluciones

Una tabla con:

  • Una columna por cada columna en cada una de las dos tablas, incluidas las claves coincidentes. Las columnas del lado derecho se cambiarán automáticamente si hay conflictos de nombres.
  • Una fila por cada correspondencia entre las tablas de entrada. Una coincidencia es una fila seleccionada de una tabla que tiene el mismo valor para todos los campos on que una fila en la otra tabla.
  • Los atributos (claves de búsqueda) solo aparecerán una vez en la tabla de salida.
  • Si kind no se especifica o kind=leftouter, además de las coincidencias internas, hay una fila para cada fila de la izquierda (y/o derecha), incluso si no tiene ninguna coincidencia. En este caso, las celdas de salida sin coincidencias contienen valores NULL.
  • Si kind=inneres , hay una fila en la salida para cada combinación de filas coincidentes de izquierda y derecha.

Ejemplos

let FactTable=datatable(Row:string,Personal:string,Family:string) [
  "1", "Bill",   "Gates",
  "2", "Bill",   "Clinton",
  "3", "Bill",   "Clinton",
  "4", "Steve",  "Ballmer",
  "5", "Tim",    "Cook"
];
let DimTable=datatable(Personal:string,Family:string,Alias:string) [
  "Bill",  "Gates",   "billg",
  "Bill",  "Clinton", "billc",
  "Steve", "Ballmer", "steveb",
  "Tim",   "Cook",    "timc"
];
FactTable
| lookup kind=leftouter DimTable on Personal, Family
Row Personal Familia Alias
1 Bill Puertas billg
2 Bill Clinton billc
3 Bill Clinton billc
4 Steve Ballmer steveb
5 Tim Cocinar timc