我在 Azure 存储资源管理器上有一个来自 API 请求的每日更新的 csv 文件。通过使用 Azure 数据工厂,我想将此表复制到 PostgreSQL。这可以通过复制活动来完成。但是,我想事先做一些修改,因为否则 Postgres 中的表会变得太大。表格示例:
身份证 | 阅读日期 | 仪表名称 | 价值 |
---|---|---|---|
AAA | 2024-11-13 22:00:00-05:00 | 米1 | 20 |
AAA | 2024-11-13 16:00:00-05:00 | 米1 | 10 |
BBB | 2024-11-13 22:00:00-05:00 | 米1 | 40 |
BBB | 2024-11-13 22:00:00-05:00 | 米2 | 60 |
我想要:
所以在上面的表格中我只需要第 1 行和第 3 行。
由于表格每天通过 API 更新,我想在 PostgreSQL 中覆盖最新值。但我们必须考虑到,在某些日子里,抄表可能会导致 ID 丢失。
在将其复制到 PostgreSQL 之前,这些修改是否可以在 Azure 数据工厂中进行?
您可以使用映射数据流来实现您的需求,如下所示:
创建 CSV 文件作为源数据集,添加源转换。将 filter 转换添加到源,以使用以下条件仅选择
MeterName
为 Meter1
的行:
equals(MeterName, "Meter1")
滤波器变换数据预览:
添加聚合转换以获取最新日期行,配置如下:
Id
、MeterName
列ReadDate - max(ReadDate)
, Value - first(Value)
您将得到如下所示所需的数据:
如果您想将其覆盖到 PostgreSQL 表中,请使用 Alter row 转换并选择 Upsert if ,写入您的条件。将 postgresql 数据集添加到接收器转换中,然后选择 Allow upsert ,选择 key column 如下所示:
使用创建的数据流调试数据流活动的管道,数据将成功复制到表中。