使用日期和時間查詢 - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用日期和時間查詢

本節中的範例包括使用日期和時間值的查詢。

範例
— 以人類可讀的 ISO 8601 格式返回時間戳字段

下列查詢會使用from_unixtimeto_iso8601函數,以人類可讀的 ISO 8601 格式傳回timestamp欄位 (例如,2019-12-13T23:40:12.000Z而非)。1576280412771查詢也會傳回來HTTP源名稱、來源 ID 和要求。

SELECT to_iso8601(from_unixtime(timestamp / 1000)) as time_ISO_8601, httpsourcename, httpsourceid, httprequest FROM waf_logs LIMIT 10;
範例
– 傳回過去 24 小時的記錄

下列查詢會在WHERE子句中使用篩選器,傳回過去 24 小時內記錄的HTTP來HTTP源名稱、來源 ID 和HTTP要求欄位。

SELECT to_iso8601(from_unixtime(timestamp/1000)) AS time_ISO_8601, httpsourcename, httpsourceid, httprequest FROM waf_logs WHERE from_unixtime(timestamp/1000) > now() - interval '1' day LIMIT 10;
範例
– 傳回指定日期範圍和 IP 地址的記錄

以下查詢會列出指定用戶端 IP 地址的指定日期範圍內的記錄。

SELECT * FROM waf_logs WHERE httprequest.clientip='53.21.198.66' AND "date" >= '2021/03/01' AND "date" < '2021/03/31'
範例
– 如果是指定的日期範圍,則會計算每隔五分鐘的 IP 地址數量

以下查詢會針對特定日期範圍,計算每隔五分鐘的 IP 地址數量。

WITH test_dataset AS (SELECT format_datetime(from_unixtime((timestamp/1000) - ((minute(from_unixtime(timestamp / 1000))%5) * 60)),'yyyy-MM-dd HH:mm') AS five_minutes_ts, "httprequest"."clientip" FROM waf_logs WHERE "date" >= '2021/03/01' AND "date" < '2021/03/31') SELECT five_minutes_ts,"clientip",count(*) ip_count FROM test_dataset GROUP BY five_minutes_ts,"clientip"
範例
– 計算過去 10 天內的 X-Forwarded-For IP 數量

以下查詢會篩選請求標頭,並計算過去 10 天內的 X-Forwarded-For IP 數量。

WITH test_dataset AS (SELECT header FROM waf_logs CROSS JOIN UNNEST (httprequest.headers) AS t(header) WHERE from_unixtime("timestamp"/1000) > now() - interval '10' DAY) SELECT header.value AS ip, count(*) AS COUNT FROM test_dataset WHERE header.name='X-Forwarded-For' GROUP BY header.value ORDER BY COUNT DESC

如需有關日期和時間函數的詳細資訊,請參閱 Trino 文件中的 Date and time functions and operators (日期和時間函數和運算子)。