innerunique 結合
適用対象: ✅Microsoft Fabric✅Azure データ エクスプローラー✅Azure Monitor✅Microsoft Sentinel
innerunique
結合フレーバーは、左側から重複するキーを削除します。 この動作により、一意の左キーと右キーの組み合わせごとに出力に行が含まれるようにします。
既定では、kind
パラメーターが指定されていない場合は、innerunique
結合フレーバーが使用されます。 この既定の実装は、共有相関 ID に基づいて 2 つのイベントを関連付けるログ/トレース分析シナリオで役立ちます。 これにより、相関関係に寄与する重複するトレース レコードを無視しながら、現象のすべてのインスタンスを取得できます。
構文
LeftTable |
join
kind=innerunique
[ Hints ] RightTable on
Conditions
構文規則について詳しく知る。
パラメーター
件名 | タイプ | Required | 説明 |
---|---|---|---|
LeftTable | string |
✔️ | 行をマージする左側のテーブルまたは表形式の式。外部テーブルとも呼ばれます。 $left と示されます。 |
[ヒント] | string |
行一致操作と実行プランの動作を制御する、 Name = Value の形式の 0 個以上のスペース区切り結合ヒント。 詳細については、「ヒント」を参照してください。 |
|
RightTable | string |
✔️ | 行をマージする右側のテーブルまたは表形式の式。内部テーブルとも呼ばれます。 $right と示されます。 |
条件 | string |
✔️ | LeftTable の行を RightTable の行と照合する方法を指定します。 一致する列の名前が両方のテーブルで同じである場合は、構文 ON ColumnName を使用します。 それ以外の場合は、構文 ON $left. LeftColumn == $right. RightColumn を使用します。 複数の条件を指定するには、"and" キーワードを使用するか、コンマで区切ります。 コンマを使用する場合、条件は "and" 論理演算子を使用して評価されます。 |
ヒント
パフォーマンスを最高にするには、一方のテーブルが他より常に小さい場合は、それを結合の左側として使用します。
[ヒント]
パラメーター名 | 値 | 説明 |
---|---|---|
hint.remote |
auto 、 left 、 local 、 right |
「クラスター間の結合」を参照してください |
hint.strategy=broadcast |
クラスター ノードでクエリ負荷を共有する方法を指定します。 | ブロードキャスト結合を参照してください。 |
hint.shufflekey=<key> |
shufflekey クエリは、データをパーティション化するキーで、クラスター ノードのクエリ負荷を共有します。 |
シャッフル クエリに関するページを参照してください |
hint.strategy=shuffle |
shuffle 戦略クエリは、クラスター ノードのクエリ負荷を共有します。各ノードで 1つずつ、データのパーティション化を処理します。 |
クエリ*のシャッフルを参照 |
返品
スキーマ: 両方のテーブルのすべての列 (一致するキーを含む)。
行: 右側のテーブルの行と一致する左側のテーブルから重複除去されたすべての行。
例
既定の 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
出力
Key | Value1 | Key1 | Value2 |
---|---|---|---|
b | 2 | b | 10 |
c | 4 | c | 20 |
c | 4 | c | 30 |
Note
キー "a" と "d" は、左側と右側に一致するキーがなかったため、出力には含まれません。
クエリによって既定の結合が実行されました。これは、結合キーに基づいて左側を重複除去した後の内部結合です。 重複除去では、最初のレコードのみが保持されます。 重複除去後の結合の結果の左側は次のようになります。
Key | Value1 |
---|---|
a | 1 |
b | 2 |
c | 4 |
innerunique 結合からの 2 つの可能な出力
Note
innerunique
結合フレーバーでは、2 つの出力が得られ、両方が正しい場合があります。
1 つ目の出力では、join 演算子によって、t1 で出現する 1 番目のキー (値が "val1.1" のもの) がランダムに選択され、、t2 のキーと照合されます。
2 つ目の出力では、join 演算子によって、t1 で出現する 2 番目のキー (値が "val1.2" のもの) がランダムに選択され、、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
出力
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
出力
key | value | key1 | value1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
- Kusto は、可能であれば、
join
の後にあるフィルターを結合の適切な側 (左または右) にプッシュするように最適化されています。 - 使用されるフレーバーが innerunique で、フィルターが結合の左側に反映されることがあります。 フレーバーが自動的に伝達され、そのフィルターに適用されるキーが出力に表示されます。
- 前の例を使用して、フィルター
where value == "val1.2"
を追加します。 2 番目の結果が得られ、データセットの最初の結果は提供されません。
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"
出力
key | value | key1 | value1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
拡張サインイン アクティビティを取得する
一部のエントリがアクティビティの開始と終了としてマークされている login
から、延長されたアクティビティを取得します。
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
関連するコンテンツ
- その他の 参加フレーバーについて学習する