innerunique join
Dotyczy: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Sprzężenia innerunique
usuwa zduplikowane klucze po lewej stronie. To zachowanie gwarantuje, że dane wyjściowe zawierają wiersz dla każdej kombinacji unikatowych po lewej i prawej stronie.
Domyślnie opcja sprzężenia jest używana, innerunique
jeśli kind
parametr nie jest określony. Ta domyślna implementacja jest przydatna w scenariuszach analizy dzienników/śledzenia, w których celem jest skorelowanie dwóch zdarzeń na podstawie udostępnionego identyfikatora korelacji. Umożliwia pobieranie wszystkich wystąpień zjawiska, pomijając zduplikowane rekordy śledzenia, które przyczyniają się do korelacji.
Składnia
LeftTable [ Hints ] RightTable on
|
join
kind=innerunique
Conditions
Dowiedz się więcej na temat konwencji składni.
Parametry
Nazwisko | Type | Wymagania | opis |
---|---|---|---|
LeftTable | string |
✔️ | Lewa tabela lub wyrażenie tabelaryczne, czasami nazywane tabelą zewnętrzną, której wiersze mają zostać scalone. Oznaczono jako $left . |
Wskazówki | string |
Zero lub więcej wskazówek sprzężenia rozdzielanych spacjami w postaci wartości nazwy = , które kontrolują zachowanie operacji dopasowania wiersza i planu wykonania. Aby uzyskać więcej informacji, zobacz Wskazówki. |
|
RightTable | string |
✔️ | Prawa tabelaryczna lub tabelaryczna wyrażenie, czasami nazywane tabelą wewnętrzną, której wiersze mają zostać scalone. Oznaczono jako $right . |
Warunki | string |
✔️ | Określa, jak wiersze z tabeli LeftTable są dopasowywane do wierszy z tabeli RightTable. Jeśli kolumny, które chcesz dopasować, mają taką samą nazwę w obu tabelach, użyj składni ON ColumnName. W przeciwnym razie użyj składni ON $left. LeftColumn RightColumn== $right. . Aby określić wiele warunków, możesz użyć słowa kluczowego "and" lub oddzielić je przecinkami. Jeśli używasz przecinków, warunki są oceniane przy użyciu operatora logicznego "i". |
Napiwek
Aby uzyskać najlepszą wydajność, jeśli jedna tabela jest zawsze mniejsza niż druga, użyj jej jako lewej strony sprzężenia.
Wskazówki
Nazwa parametrów | Wartości | opis |
---|---|---|
hint.remote |
auto , , left , , local right |
Zobacz Łączenie między klastrami |
hint.strategy=broadcast |
Określa sposób udostępniania obciążenia zapytania w węzłach klastra. | Zobacz sprzężenia emisji |
hint.shufflekey=<key> |
Zapytanie shufflekey współudzieli obciążenie zapytania w węzłach klastra przy użyciu klucza do partycjonowania danych. |
Zobacz zapytanie mieszania |
hint.strategy=shuffle |
shuffle Zapytanie strategii współudzieli obciążenie zapytania w węzłach klastra, gdzie każdy węzeł przetwarza jedną partycję danych. |
Zobacz zapytanie mieszania |
Zwraca
Schemat: wszystkie kolumny z obu tabel, w tym pasujące klucze.
Wiersze: wszystkie deduplikowane wiersze z lewej tabeli pasujące do wierszy z prawej tabeli.
Przykłady
Użyj domyślnego sprzężenia innerunique
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
Wyjście
Klucz | Wartość1 | Klucz1 | Wartość2 |
---|---|---|---|
b | 2 | b | 10 |
c | 100 | c | 20 |
c | 100 | c | 30 |
Uwaga
Klucze "a" i "d" nie są wyświetlane w danych wyjściowych, ponieważ nie było pasujących kluczy po lewej i prawej stronie.
Zapytanie wykonało sprzężenie domyślne, czyli sprzężenie wewnętrzne po deduplikacji lewej strony na podstawie klucza sprzężenia. Deduplikacja przechowuje tylko pierwszy rekord. Wynikowa lewa strona sprzężenia po deduplikacji to:
Klucz | Wartość1 |
---|---|
a | 1 |
b | 2 |
c | 100 |
Dwa możliwe dane wyjściowe z sprzężenia innerunique
Uwaga
Smak innerunique
sprzężenia może przynieść dwa możliwe dane wyjściowe, a oba są poprawne.
W pierwszych danych wyjściowych operator sprzężenia losowo wybrał pierwszy klucz wyświetlany w t1 z wartością "val1.1" i dopasował go do kluczy t2.
W drugim danych wyjściowych operator sprzężenia losowo wybrał drugi klucz wyświetlany w t1 z wartością "val1.2" i dopasował go do kluczy 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
Wyjście
key | wartość | klucz1 | wartość1 |
---|---|---|---|
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
Wyjście
key | wartość | klucz1 | wartość1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
- Usługa Kusto jest zoptymalizowana pod kątem wypychania filtrów, które pochodzą po
join
stronie , w kierunku odpowiedniej strony sprzężenia, lewej lub prawej, gdy jest to możliwe. - Czasami używany smak jest innyrunique , a filtr jest propagowany po lewej stronie sprzężenia. Smak jest automatycznie propagowany, a klucze, które mają zastosowanie do tego filtru, są wyświetlane w danych wyjściowych.
- Użyj poprzedniego przykładu i dodaj filtr
where value == "val1.2"
. Daje drugi wynik i nigdy nie daje pierwszego wyniku dla zestawów danych:
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"
Wyjście
key | wartość | klucz1 | wartość1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
Uzyskiwanie rozszerzonych działań związanych z logowaniem
Pobierz działania rozszerzone od login
elementu, które niektóre wpisy oznaczają jako początek i koniec działania.
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
Powiązana zawartość
- Dowiedz się więcej o innych smakach sprzężenia