簡體   English   中英

如何比較和顯示 AWS Athena 中的歷史數據是否有任何變化?

[英]How to compare and show if any changes in historical data in AWS Athena?

我有一個存儲歷史數據的表。 表的樣本結構是這樣的,

ID 配置 用戶身份 團隊 創建於
1 “配置-01” “用戶 01” “開發” “2022:08:28”
2 “配置-02” “用戶 01” “開發” “2022:08:27”
3 “配置-01” “用戶 01” “開發” “2022:08:26”
4 “配置-01” “用戶 01” “質量保證” “2022:08:25”
5 “配置-01” “用戶 01” “質量保證” “2022:08:24”
6 “配置-20” “用戶 01” “質量保證” “2022:08:23”
7 “配置-01” “用戶 01” “質量保證” “2022:08:22”
8 “配置-01” “用戶 01” “產品” “2022:08:21”
9 “配置-01” “用戶 01” “產品” “2022:08:20”
10 “配置-11” “用戶 02” “產品” “2022:08:19”
11 “配置-15” “用戶 02” “產品” “2022:08:18”

現在,我需要根據 user-id 查詢數據,所以前 9 行將用於 user-id "user-01"。 從這 9 行中,我需要獲取每個團隊的最新兩行(基於 createdon)。 所以現在的表格看起來像這樣,

ID 配置 用戶身份 團隊 創建於
1 “配置-01” “用戶 01” “開發” “2022:08:28”
2 “配置-02” “用戶 01” “開發” “2022:08:27”
4 “配置-01” “用戶 01” “質量保證” “2022:08:28”
5 “配置-01” “用戶 01” “質量保證” “2022:08:27”
8 “配置-01” “用戶 01” “產品” “2022:08:28”
9 “配置-01” “用戶 01” “產品” “2022:08:27”

現在我需要將每個團隊的兩行與他們的配置列進行比較,並說明它們之間是否有變化。 所以我正在尋找的最終回應將是,

用戶身份 團隊 配置已更改
“用戶 01” “開發” 真的
“用戶 01” “質量保證” 錯誤的
“用戶 01” “產品” 錯誤的

到目前為止,我已經能夠使用這個自連接查詢來看到具有相同團隊的行,

select * from table t1, table t2
where t1.id <> t2.id and t1.team = t2.team and t1.userid = "user-01"

我需要有關部件的 rest 的幫助。

生成查詢以實現此解決方案的任何幫助都將非常有幫助。 謝謝你

不知道為什么用 MySQL 和 Presto 都標記了它,但這里是 Presto/Trino 的方法。

您可以使用window 函數(特別是lag以比較“當前”和“以前”記錄)並分組。 這是一個更通用的方法(沒有過濾,但很容易添加):

-- sample data
with dataset (id, config, userid, team, createdon) as (
    values (1   , 'config-01', 'user-01', 'Dev',    '2022:08:28'),
        (2  , 'config-02', 'user-01', 'Dev',    '2022:08:27'),
        (3  , 'config-01', 'user-01', 'Dev',    '2022:08:26'),
        (4  , 'config-01', 'user-01', 'QA', '2022:08:25'),
        (5  , 'config-01', 'user-01', 'QA', '2022:08:24'),
        (6  , 'config-20', 'user-01', 'QA', '2022:08:23'),
        (7  , 'config-01', 'user-01', 'QA', '2022:08:22'),
        (8  , 'config-01', 'user-01', 'Prod','2022:08:21'),
        (9  , 'config-01', 'user-01', 'Prod','2022:08:20'),
        (10 , 'config-11', 'user-02', 'Prod','2022:08:19'),
        (11 , 'config-15', 'user-02', 'Prod','2022:08:18')
)

-- query
select userid, 
   team, 
   max_by(configchanged, createdon) configchanged -- get last change status
from (
   select *,
    config != coalesce(lag(config) over (partition by userid, team order by createdon), config) configchanged -- coalesce is used just in case there is only one row 
   from dataset
)
group by userid, team

Output:

用戶身份 團隊 配置已更改
用戶 01 質量保證 錯誤的
用戶 01 產品 錯誤的
用戶 01 開發 真的
用戶 02 產品 真的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM