Compartir a través de


innerunique join

Se aplica a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

El innerunique tipo de combinación quita las claves duplicadas del lado izquierdo. Este comportamiento garantiza que la salida contenga una fila para cada combinación de claves izquierda y derecha únicas.

De forma predeterminada, se usa el innerunique tipo de combinación si no se especifica el kind parámetro . Esta implementación predeterminada es útil en escenarios de análisis de registro y seguimiento, donde tiene como objetivo correlacionar dos eventos en función de un identificador de correlación compartido. Permite recuperar todas las instancias del fenómeno mientras se ignoran los registros de seguimiento duplicados que contribuyen a la correlación.

Diagrama que muestra cómo funciona la combinación.

Sintaxis

LeftTable [ Hints ] RightTable on | join kind=innerunique Conditions

Obtenga más información sobre las convenciones de sintaxis.

Parámetros

Nombre Type Obligatorio Descripción
LeftTable string ✔️ La tabla izquierda o expresión tabular, a veces denominada tabla externa, cuyas filas se van a combinar. Se indica como $left.
Sugerencias string Cero o más sugerencias de combinación separadas por espacios en forma de Valor de nombre = que controlan el comportamiento de la operación de coincidencia de fila y el plan de ejecución. Para más información, consulte Sugerencias.
RightTable string ✔️ La tabla derecha o expresión tabular, a veces denominada tabla interna, cuyas filas se van a combinar. Se indica como $right.
Condiciones string ✔️ Determina la correspondencia entre las filas de LeftTable y las de RightTable. Si las columnas que desea que coincidan tengan el mismo nombre en ambas tablas, use la sintaxis ON ColumnName. De lo contrario, use la sintaxis ON $left.LeftColumn $right.==RightColumn. Para especificar varias condiciones, puede usar la palabra clave "and" o separarlas con comas. Si usa comas, las condiciones se evalúan mediante el operador lógico "and".

Sugerencia

Para obtener el mejor rendimiento, si una tabla siempre es menor que la otra, úsela como lado izquierdo de la combinación.

Sugerencias

Nombre del parámetro Valores Descripción
hint.remote auto, left, , local, right Consulte Unión entre clústeres
hint.strategy=broadcast Especifica la manera de compartir la carga de consultas en los nodos del clúster. Ver combinación de difusión
hint.shufflekey=<key> La consulta shufflekey comparte la carga de consultas en los nodos del clúster mediante una clave para crear particiones de datos. Consulte la consulta aleatoria.
hint.strategy=shuffle La consulta de estrategia shuffle comparte la carga de consultas en los nodos del clúster, donde cada nodo procesa una partición de los datos. Consulte la consulta aleatoria.

Devoluciones

Esquema: todas las columnas de ambas tablas, incluidas las claves coincidentes.
Filas: todas las filas desduplicadas de la tabla izquierda que coinciden con las filas de la tabla derecha.

Ejemplos

Usar la combinación innerunique predeterminada

let X = datatable(Key:string, Value1:long)
[
    'a',1,
    'b',2,
    'b',3,
    'c',4
];
let Y = datatable(Key:string, Value2:long)
[
    'b',10,
    'c',20,
    'c',30,
    'd',40
];
X | join Y on Key

Salida

Clave Valor1 Tecla1 Valor2
b 2 b 10
c 4 c 20
c 4 c 30

Nota

Las claves "a" y "d" no aparecen en la salida, ya que no había ninguna clave coincidente en los lados izquierdo y derecho.

La consulta ejecutó la combinación predeterminada, que es una combinación interna después de desduplicar el lado izquierdo en función de la clave de combinación. La desduplicación mantiene solo el primer registro. El lado izquierdo resultante de la combinación después de la desduplicación es:

Clave Valor1
a 1
b 2
c 4

Dos posibles salidas de la combinación innerunique

Nota:

El innerunique sabor de combinación puede producir dos salidas posibles y ambas son correctas. En la primera salida, el operador de combinación seleccionó aleatoriamente la primera clave que aparece en t1, con el valor "val1.1" y la asoció con las claves de t2. En la segunda salida, el operador de combinación seleccionó aleatoriamente la segunda clave que aparece en t1, con el valor "val1.2" y la asoció con las claves de t2.

let t1 = datatable(key: long, value: string)  
    [
    1, "val1.1",  
    1, "val1.2"  
];
let t2 = datatable(key: long, value: string)  
    [  
    1, "val1.3",
    1, "val1.4"  
];
t1
| join kind = innerunique
    t2
    on key

Salida

key value key1 value1
1 val1.1 1 val1.3
1 val1.1 1 val1.4
let t1 = datatable(key: long, value: string)  
    [
    1, "val1.1",  
    1, "val1.2"  
];
let t2 = datatable(key: long, value: string)  
    [  
    1, "val1.3", 
    1, "val1.4"  
];
t1
| join kind = innerunique
    t2
    on key

Salida

key value key1 value1
1 val1.2 1 val1.3
1 val1.2 1 val1.4
  • Kusto está optimizado para insertar los filtros que aparecen después de join, hacia la parte de la combinación adecuada, a la izquierda o a la derecha, cuando sea posible.
  • A veces, el tipo utilizado es innerunique y el filtro se propaga al lado izquierdo de la combinación. El sabor se propaga automáticamente y las claves que se aplican a ese filtro aparecen en la salida.
  • Use el ejemplo anterior y agregue un filtro where value == "val1.2" . Proporciona el segundo resultado y nunca dará el primer resultado para los conjuntos de datos:
let t1 = datatable(key: long, value: string)  
    [
    1, "val1.1",  
    1, "val1.2"  
];
let t2 = datatable(key: long, value: string)  
    [  
    1, "val1.3", 
    1, "val1.4"  
];
t1
| join kind = innerunique
    t2
    on key
| where value == "val1.2"

Salida

key value key1 value1
1 val1.2 1 val1.3
1 val1.2 1 val1.4

Obtener actividades de inicio de sesión extendidas

Obtenga más actividades de un login que algunas entradas marquen como inicio y cierre de una actividad.

let Events = MyLogTable | where type=="Event" ;
Events
| where Name == "Start"
| project Name, City, ActivityId, StartTime=timestamp
| join (Events
    | where Name == "Stop"
        | project StopTime=timestamp, ActivityId)
    on ActivityId
| project City, ActivityId, StartTime, StopTime, Duration = StopTime - StartTime
let Events = MyLogTable | where type=="Event" ;
Events
| where Name == "Start"
| project Name, City, ActivityIdLeft = ActivityId, StartTime=timestamp
| join (Events
        | where Name == "Stop"
        | project StopTime=timestamp, ActivityIdRight = ActivityId)
    on $left.ActivityIdLeft == $right.ActivityIdRight
| project City, ActivityId, StartTime, StopTime, Duration = StopTime - StartTime