在Python(pandas)中,我从数据库中读取数据,然后每天使用数据透视表来聚合数据。我正在处理的原始数据是每天大约200万行,它是每人每30分钟。我将它聚合为每日,所以它对于可视化来说要小很多。
所以在pandas中,我会将每个日期读入内存并将其聚合,然后将其加载到postgres中的新表中。
如何直接在postgres中执行此操作?我可以循环遍历表格中的每个唯一report_date,groupby,然后将其附加到另一个表格中吗?我假设在postgres中执行它会比在python中通过网络读取它,写一个临时的.csv文件,然后通过网络再次写入它。
答案 0 :(得分:1)
这是一个例子:假设你有一个表
CREATE TABLE post (
posted_at timestamptz not null,
user_id integer not null,
score integer not null
);
表示各个用户从他们在论坛中所做的帖子中获得的分数。然后是以下查询
SELECT user_id, posted_at::date AS day, sum(score) AS score
FROM post
GROUP BY user_id, posted_at::date;
将汇总每位用户每天的得分。
请注意,这将考虑当天00:00 UTC的变化(就像SO一样)。如果你想要一个不同的时间,比如巴黎时间的午夜时间,那么你可以这样做:
SELECT user_id, (posted_at AT TIME ZONE 'Europe/Paris')::date AS day, sum(score) AS score
FROM post
GROUP BY user_id, (posted_at AT TIME ZONE 'Europe/Paris')::date;
要获得上述查询的良好性能,您可能希望在(user_id, posted_at::date)
上创建(计算)索引,或者对第二种情况类似地创建(计算)索引。