私はこれに頭を悩ませてきました、そして解決策はおそらくとても単純ですが、私はそれを理解することができず、どこでも検索し、この特定の問題の解決策を見つけることができません。
2つのテーブルがあります。1つにはIP接続リストが含まれています。例:
Connections_Table
src dst
192.168.1.1 1.2.3.4
192.168.1.1 2.2.2.2
192.168.1.1 3.3.3.3
192.168.1.1 4.4.4.4
もう1つのテーブルには、次のようなIPアドレスのリストが含まれています。
Bad_Ip_Addresses_Table
ip
7.8.9.4
3.2.1.4
77.8.99.4
2.2.2.2
18.7.9.8
このクエリを作成する方法が見つからない場所です...最初のテーブルのsrcとdstを示し、2番目のテーブルに最初のテーブルのdstが含まれているかどうかを示すテーブルを作成しようとしています。言い換えると:
Results_Table
src dst match
192.168.1.1 1.2.3.4 0
192.168.1.1 2.2.2.2 1
192.168.1.1 3.3.3.3 0
192.168.1.1 4.4.4.4 0
これがおそらく最大の落とし穴です。ソリューションにテーブルとトリガーの作成が含まれるSOに関する投稿を見たことがあります。それはできません-これはAWSKinesis AnalyticsSQLステートメントになります。
Connections_Tableはライブで取り込まれ、Bad_Ip_Addresses_TableはAWSS3からロードされたCSVです。取り込まれた各行で、CSVに対してSQLステートメントを実行して、dstipがCSVに含まれているかどうかを確認する必要があります。
助言がありますか?
Left Join
からConnections_Table
のBad_Ip_Addresses_Table
、例えばその全てdst
の値Connections_Table
(一致する行が存在するか否か)であると考えられます。Group By
上src
とdst
、Count()
関数を使用して一致をカウントします。注意してくださいCount(null) = 0
; したがって、一致しない行は0を返します(null
左結合の後に値があるため)。MySQL、次のクエリを試してみてください。
SELECT
ct.src,
ct.dst,
COUNT(biat.ip) AS match
FROM
Connections_Table AS ct
LEFT JOIN Bad_Ip_Addresses_Table AS biat ON biat.ip = ct.dst
GROUP BY ct.src, ct.dst
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加