innerunique join
Sprzężenia innerunique
usuwa zduplikowane klucze po lewej stronie. To zachowanie zapewnia, że dane wyjściowe zawierają wiersz dla każdej kombinacji unikatowych kluczy po lewej i prawej stronie.
Domyślnie smak sprzężenia jest używany, 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|
join
kind=innerunique
[ Wskazówki ] RightTableon
Warunki
Dowiedz się więcej o konwencjach składniowych.
Parametry
Nazwa | Typ | Wymagane | Opis |
---|---|---|---|
LeftTable | string |
✔️ | Lewa tabela lub wyrażenie tabelaryczne, czasami nazywane tabelą zewnętrzną, której wiersze mają być scalane. Oznaczono jako $left . |
Wskazówki | string |
Zero lub więcej wskazówek sprzężenia rozdzielanego spacjami w postaci wartości nazwy= , która kontroluje zachowanie operacji dopasowania wiersza i planu wykonywania. Aby uzyskać więcej informacji, zobacz Wskazówki. |
|
RightTable | string |
✔️ | Właściwa tabela lub wyrażenie tabelaryczne, czasami nazywane tabelą wewnętrzną, której wiersze mają być scalane. 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". |
Porada
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 sprzężenia między klastrami |
hint.strategy=broadcast |
Określa sposób udostępniania obciążenia zapytania w węzłach klastra. | Zobacz dołączanie do emisji |
hint.shufflekey=<key> |
shufflekey Zapytanie współudzieli obciążenie zapytania w węzłach klastra przy użyciu klucza do partycjonowania danych. |
Zobacz zapytanie shuffle |
hint.strategy=shuffle |
shuffle Zapytanie strategii współdzieli obciążenie zapytania w węzłach klastra, gdzie każdy węzeł przetwarza jedną partycję danych. |
Zobacz zapytanie shuffle |
Zwraca
Schemat: Wszystkie kolumny z obu tabel, w tym pasujące klucze.
Wiersze: wszystkie deduplikowane wiersze z lewej tabeli, które pasują 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
Dane wyjściowe
Klucz | Wartość1 | Klucz1 | Wartość2 |
---|---|---|---|
b | 2 | b | 10 |
c | 4 | c | 20 |
c | 4 | 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 utrzymuje tylko pierwszy rekord. Wynikowa lewa strona sprzężenia po deduplikacji to:
Klucz | Wartość1 |
---|---|
a | 1 |
b | 2 |
c | 4 |
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
Dane wyjściowe
key | wartość | key1 | 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
Dane wyjściowe
key | wartość | key1 | 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 pojawiają się po
join
obiekcie , w kierunku odpowiedniej strony sprzężenia, lewej lub prawej, jeśli jest to możliwe. - Czasami używany smak jest innyrunique , a filtr jest propagowany po lewej stronie sprzężenia. Smak jest automatycznie propagowany i 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 to drugi wynik i nigdy nie da 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"
Dane wyjściowe
key | wartość | key1 | wartość1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
Uzyskiwanie rozszerzonych działań związanych z logowaniem
Pobieranie rozszerzonych działań z login
tego, że 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
Zawartość pokrewna
- Dowiedz się więcej o innych odmianach sprzężeń
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla