簡體   English   中英

向Athena(Presto)表中添加一個新列,該表是通過計算兩行之間的差來計算的

[英]Adding a new column into Athena (Presto) table calculated by taking the difference between two rows

在過去的幾周中,我編寫了一個管道,用於拾取從網站廣播的所有點擊流數據。 管道通過以下方式使用AWS:S3> EC2(用於轉換)> Athena(掃描干凈的分區s3)。 每24小時就會有新數據進入管道,並且效果很好-我的點擊流數據很容易查詢。 但是,我現在需要添加一些其他列,即在每個頁面上花費的時間。 這可以通過按用戶ID,時間戳排序,然后取row_n1和row_n2的時間戳列之間的差來實現。 所以我的問題是:

1)如何通過SQL查詢做到這一點? 我正在努力使其正常運行,但是我的想法是,一旦我做到了,我就可以每24小時觸發一次該查詢,以運行進入Athena的新點擊流數據。

2)這是添加其他列或新聚合表的合理方法嗎? 例如,構建一個查詢,該查詢每24小時對新數據運行一次,以追加到新表中。

理想情況下,我不想碰到編寫任何用於“核心” ETL管道的源代碼

供參考,我的表看起來類似於以下內容(在頁面上花費了新的列時間):

| 用戶名| eventNum | 分類| 時間| ...... | timeSpentOnPage | '103-1023''3''查看''12 -10-2019 ...'3s

感謝您提供的任何指導/建議。

我不確定您要問的是什么,某些示例數據和預期的輸出會有所幫助。 例如,我不太了解row_nrow_m

我猜您的意思是類似計算連續行的時間戳之間的差異。 這可以通過查詢來實現

SELECT
  userID,
  timestamp - LAG(timestamp, 1) OVER (PARTITION BY userID ORDER BY timestamp) AS timeSpentOnPage
FROM events

LAG 窗口函數從窗口框架(在這種情況下,所有具有相同userID並按timestamp排序的行)給出的窗口中,返回上一行的值(在本例中, 1表示上一行)。 有點像GROUP BY但是如果有意義的話,對於每一行。

這並不能完全給您花費在每個頁面上的時間,某些頁面視圖看起來很長,而實際上它們之間沒有任何活動(例如,有人瀏覽了一些內容,去吃了午餐,然后又瀏覽了一些內容–午餐前的最后一頁視圖看起來像整個午餐一樣)。


在雅典娜,沒有辦法做相當於UPDATE的操作。 最接近的事情是執行“ CTAS”(創建表AS)以創建新表(通過自動化可以將其轉變為為現有表創建新分區)。

如果您提供有關數據的更多信息,我可以修改此答案以及其他建議。

暫無
暫無

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

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