【发布时间】:2026-01-10 14:40:02
【问题描述】:
我正在慢慢完成一个利用 AWS Athena 处理各种日志文件的项目。我的目标是使用日志文件进行事件关联,因此我需要找到某种方法来在给定时间范围内从单个 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 将时间存储为 unix 时间,这会使事情变得有些复杂,因此我需要对其进行转换,以便使用通用的时间格式:
表2更新时间:
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'
我真的不知道下一步该去哪里,我已经用 SQL 工作了 3 天了,这超出了我的范围。我的目标还能实现吗?
谢谢!
【问题讨论】:
-
例子不清楚
-
这两个表是如何相互关联的?
-
对不起,这个例子对我来说很有意义,但我想那是因为我写了它:) 我正在寻找关联事件,这两个表除了事件时间之外没有任何共同点,甚至它们不会 100% 相同。我所追求的甚至可能无法实现,但我不知道是不是这样。我想指定一个时间范围,然后从两个表中返回该时间范围内的所有数据。例如,如果 scada 数据报告了错误,我想将 scada 中的所有数据汇总在一起,并处理事件期间捕获的日志。
标签: sql amazon-athena