ハイブに2つのテーブルがあります。'access' と呼ばれる最初のフィールドには apache ログが含まれており、最初のフィールドは完全な IP アドレスです。
10.4.5.12 - - [26/Jun/2010:11:16:09 +1000] "GET /myportal/pageA HTTP/1.1"
10.4.41.2 - - [26/Jun/2010:11:18:09 +1000] "GET /myportal/pageB HTTP/1.1"
10.5.1.111 - - [26/Jun/2010:11:22:09 +1000] "GET /myportal/pageA HTTP/1.1"
192.10.4.177 - - [26/Jun/2010:11:22:41 +1000] "GET /myportal/pageC HTTP/1.1"
IP範囲の開始と文字列を含む「クライアント」と呼ばれる別のもの:
10.4 clientA
10.5 clientB
10.7 ClientC
クライアントごとにヒットの合計を見つけて、その名前を表示したいと思います。したがって、この2つのテーブルを次のように結合しようとします:
SELECT client.name, count(access.ip) FROM access JOIN client WHERE access.ip RLIKE client.ip GROUP BY client.name;
それは機能しますが、clientA の場合、Apache ログの最後のエントリ (192.10.4.177) にもヒットします。これは望ましくありません。client.ip と access.ip の先頭だけを比較したいと思います。
特定の正規表現だと思います...または私のシンタックスが間違っているかもしれません...誰かがアイデアを持っていますか?
前もって感謝します