Sql 完整api调用的增量加载

Sql 完整api调用的增量加载,sql,database-design,etl,Sql,Database Design,Etl,我有一个API,我需要从中获取注册数据到我的数据库中,并每天聚合它。每次调用API时,我都会得到数据的完整副本。有时旧帐户将被删除,因此历史数据将发生更改 这是API中的数据的样子: 我想这样汇总,以查看每日帐户创建和激活情况: 现在,我可以做的是每天导入完整数据,然后像这样进行聚合: SELECT Current_date() as snapshot_date, SUM(CASE WHEN accountCreateOn = current_date() THEN 1 ELSE 0 EN

我有一个API,我需要从中获取注册数据到我的数据库中,并每天聚合它。每次调用API时,我都会得到数据的完整副本。有时旧帐户将被删除,因此历史数据将发生更改

这是API中的数据的样子:

我想这样汇总,以查看每日帐户创建和激活情况:

现在,我可以做的是每天导入完整数据,然后像这样进行聚合:

SELECT
Current_date() as snapshot_date,
SUM(CASE WHEN accountCreateOn = current_date() THEN 1  ELSE 0 END) as accountCreateOn,
SUM(CASE WHEN accountActivateOn = current_date() THEN 1  ELSE 0 END) as accountActivateOn
FROM full_data

但这似乎不是很能抵抗失败。如果管道故障几天会发生什么?解决此类问题的正确方法是什么?

最简单、最具容错性的方法是将获取的数据完整、详细地存储起来。你无法获得更好的信息,而忽略信息(包括聚合信息)总是会带来这样的危险:有一天,你会想回答一个关于这些数据的问题,这些数据本可以在完整的数据集上得到回答,但在精简的数据集上却无法得到回答


离开这条道路的唯一原因可能是数据集太大,存储和处理它们是不可行的。对于在现代硬件上运行的现代DBMS系统,不太可能遇到这种问题。因此,我将创建我的业务所期望的最大规模的合成测试数据,比如说,是我梦想的每年帐户激活量的10倍。如果数据库能够处理这个问题,这意味着您可以少担心一个问题。

如果我正确理解了您的解释和问题,那么您可以从源系统提取的只是提取点的当前快照;您希望在目标中包含每日摘要;从理论上讲,你可能会遇到无法在同一天纠正的故障。如果是这种情况,则没有解决方案-您的源系统无法“神奇地”重新生成多天数据。可能的解决方案:确保管道在一天内可以修复。修改源系统,使其能够提供更改历史记录(日志/审核文件)