2017-03-22 4 views
0

AWS Athenaを活用して様々なログファイルを処理するプロジェクトが始まります。私の目標は、イベント相関のログ・ファイルを使用することです。そのため、単一のSQL文から、指定された時間範囲内の複数の表からデータを選択して表示する方法を見つける必要があります。ここで私が達成しようとしているものの例である:ここではAthena/Prestoを使用して1つのテーブル内の日付範囲によって制限された複数のテーブルからSQLデータを返す

scada.timestamp    process.eventid       scada.srcaddr process.requestid      scada. action 
2017-03-16T07:25:46.000Z c148e2ce-8500-467a-a970-ef1d43dd4aea 172.31.25.225 032bfafb-e8a3-4c06-a2dc-fa740abc135  ACCEPT 
2017-03-16T07:25:46.000Z 8cc8143a-cf55-4db3-b112-0ff7f268edd0 172.31.25.225 f413e138-9445-408f-8124-ee6c33229889 ACCEPT 

は、2つのテーブルからのデータのサンプルです:

表1:

SELECT eventtime, requestid, eventid FROM process_native limit 10; 

     eventtime    requestid        eventid 
     2016-05-07T08:57:37Z 032bfafb-e8a3-4c06-a2dc-fa740abc135c c148e2ce-8500-467a-a970-ef1d43dd4aea 
     2016-05-07T08:57:37Z f413e138-9445-408f-8124-ee6c33229889 8cc8143a-cf55-4db3-b112-0ff7f268edd0 

表2:

SELECT tstart, srcaddr, action FROM scada_raw limit 10; 

tstart  srcaddr   action 
1489509010 139.59.39.211 REJECT 
1489509010 172.31.20.111 ACCEPT 

表2は時間をu更新時間と

表2:物事を少し複雑にNIX時間が、私はそう、私はで動作するように、共通の時刻形式を持っていることを変換する必要があり

SELECT to_iso8601(from_unixtime(tstart)) as timestamp, srcaddr, action FROM scada_raw limit 10; 

timestamp     srcaddr   action 
2017-03-16T07:25:46.000Z 172.31.25.225 ACCEPT 
2017-03-16T07:25:46.000Z 172.31.25.225 ACCEPT 

率直に言って、私は考えていますここでは、この:) については移動する方法を私が考えたクエリがある、それだけの時間外:

SELECT process_native.eventid, 
     process_native.requestid, 
     scada_raw.srcaddr, 
     scada_raw.action, 
FROM process_native, scada_raw 
WHERE scada_rawe.eventtime >= '2017-02-17T00:00:00Z' 
     AND scada_raw.eventtime < '2017-03-20T00:00:00Z' 

私は本当にどこ3のすべてのSQLで、私が取り組んできた次に行きかわかりません今日、そして今私の向こう側には方法があります。私の目標は達成可能ですか?

ありがとうございました!

+0

例が明確でない –

+0

2つのテーブルは互いにどのように関連していますか? – Kevin

+0

申し訳ありませんが、私には意味がありましたが、私はそれを書いたからです:私はイベントを相関させるために探しています.2つのテーブルはイベント時間以外は共通点がなく、100% 。私が後にしていることは達成できないかもしれませんが、それが本当であるかどうかはわかりません。私は時間枠を指定し、両方の表からその時間枠内にあるすべてのデータを戻したいとします。たとえば、scadaデータからエラーが報告された場合、イベント期間中に取得されたscadaおよびプロセスログのすべてのデータをまとめてみたいと思います。 –

答えて

0

日付が適切な結合に一致するかどうかを保証できない場合でも、互いに近くにレコードを取得することができます。このようなクエリから

eventtime    requestid  eventid  srcaddr  action 
2017-03-14 16:30:10.000        139.59.39.211 REJECT 
2017-03-14 16:30:10.000        172.31.20.111 ACCEPT 
2017-03-14 16:30:11.000 032bfafb-e8... c148e2ce-85... 
2017-03-14 16:30:11.000 f413e138-94... 8cc8143a-cf... 

:たとえば、私は最後のselect文にすることを置いたときに2つの句について

WITH TimelineRecords AS (
    SELECT 
     eventtime, 
     requestid, 
     eventid, 
     NULL srcaddr, 
     NULL action 
    FROM 
     process_native 
    WHERE 
     eventtime BETWEEN timestamp '2017-03-14 16:30:00' AND timestamp '2017-03-14 16:35:00' 
    UNION ALL 
    SELECT 
     from_unixtime(tstart) eventtime, 
     NULL requestid, 
     NULL eventid, 
     srcaddr, 
     action 
    FROM 
     scada_raw 
    WHERE 
     from_unixtime(tstart) BETWEEN timestamp '2017-03-14 16:30:00' AND timestamp '2017-03-14 16:35:00' 
) 
SELECT 
    * 
FROM 
    TimelineRecords 
ORDER BY 
    eventtime; 

申し訳ありませんが、アテナはそれを好きではなかったです。

関連する問題