innerunique join
Il innerunique
tipo di join rimuove le chiavi duplicate dal lato sinistro. Questo comportamento garantisce che l'output contenga una riga per ogni combinazione di tasti univoci sinistro e destro.
Per impostazione predefinita, il innerunique
tipo di join viene usato se il kind
parametro non è specificato. Questa implementazione predefinita è utile negli scenari di analisi dei log/traccia, in cui si intende correlare due eventi in base a un ID correlazione condiviso. Consente di recuperare tutte le istanze del fenomeno ignorando i record di traccia duplicati che contribuiscono alla correlazione.
Sintassi
LeftTable|
join
kind=innerunique
[ Hint ] RightTableon
Condizioni
Altre informazioni sulle convenzioni di sintassi.
Parametri
Nome | Tipo | Obbligatoria | Descrizione |
---|---|---|---|
LeftTable | string |
✔️ | Tabella sinistra o espressione tabulare, talvolta denominata tabella esterna, le cui righe devono essere unite. Indicata come $left . |
Hint | string |
Zero o più hint di join separati da spazi sotto forma di Valore nome= che controllano il comportamento dell'operazione di corrispondenza di riga e del piano di esecuzione. Per altre informazioni, vedere Hint. |
|
RightTable | string |
✔️ | Tabella destra o espressione tabulare, talvolta denominata tabella interna, le cui righe devono essere unite. Indicata come $right . |
Condizioni | string |
✔️ | Determina la corrispondenza delle righe di LeftTable con le righe di RightTable. Se le colonne corrispondenti hanno lo stesso nome in entrambe le tabelle, usare la sintassi ON ColumnName. In caso contrario, usare la sintassi ON $left. LeftColumn== $right. RightColumn. Per specificare più condizioni, è possibile usare la parola chiave "and" o separarle con virgole. Se si usano virgole, le condizioni vengono valutate usando l'operatore logico "and". |
Suggerimento
Per ottenere prestazioni ottimali, se una tabella è sempre più piccola rispetto all'altra, usarla come lato sinistro del join.
Hint
Nome dei parametri | Valori | Descrizione |
---|---|---|
hint.remote |
auto , left , local , right |
Vedere Join tra cluster |
hint.strategy=broadcast |
Specifica il modo in cui condividere il carico di query nei nodi del cluster. | Vedere broadcast join |
hint.shufflekey=<key> |
La shufflekey query condivide il carico delle query nei nodi del cluster, usando una chiave per partizionare i dati. |
Vedere la query casuale |
hint.strategy=shuffle |
La shuffle query di strategia condivide il carico di query nei nodi del cluster, in cui ogni nodo elabora una partizione dei dati. |
Vedere la query casuale |
Restituisce
Schema: tutte le colonne di entrambe le tabelle, incluse le chiavi corrispondenti.
Righe: tutte le righe deduplicate dalla tabella sinistra che corrispondono alle righe della tabella a destra.
Esempio
Usare il join interno predefinito
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
Output
Chiave | Value1 | Chiave1 | Value2 |
---|---|---|---|
b | 2 | b | 10 |
c | 4 | c | 20 |
c | 4 | c | 30 |
Nota
Le chiavi 'a' e 'd' non vengono visualizzate nell'output poiché non sono presenti chiavi corrispondenti su entrambi i lati destro e sinistro.
La query ha eseguito il join predefinito, ovvero un inner join dopo aver deduplicato il lato sinistro in base alla chiave di join. La deduplicazione mantiene solo il primo record. Il lato sinistro risultante del join dopo la deduplicazione è:
Chiave | Value1 |
---|---|
a | 1 |
b | 2 |
c | 4 |
Due possibili output da innerunique join
Nota
Il innerunique
tipo di join può produrre due output possibili ed entrambi sono corretti.
Nel primo output l'operatore di join ha selezionato in modo casuale la prima chiave visualizzata in t1, con valore "val1.1", e la ha associata con le chiavi t2.
Nel secondo output l'operatore di join ha selezionato in modo casuale la seconda chiave visualizzata in t1, con valore "val1.2", e la ha associata con le chiavi 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
Output
Key | Valore | 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
Output
Key | Valore | key1 | value1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
- Kusto è ottimizzato per il push di filtri che si trovano dopo
join
, verso il lato appropriato del join, a destra o sinistra, quando possibile. - Il tipo usato è a volte innerunique e il filtro viene propagato al lato sinistro del join. Il sapore viene propagato automaticamente e le chiavi che si applicano a tale filtro vengono visualizzate nell'output.
- Usare l'esempio precedente e aggiungere un filtro
where value == "val1.2"
. Fornisce il secondo risultato e non darà mai il primo risultato per i set di dati:
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"
Output
Key | Valore | key1 | value1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
Ottenere attività di accesso estese
Ottenere le attività estese da login
in cui alcune voci contrassegnano come inizio e fine di un'attività.
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
Contenuti correlati
- Informazioni su altri tipi di join
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per