innerunique join
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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.
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
Contenido relacionado
- Más información sobre otros tipos de combinación