工作方式
数据湖要接收到数据,需要发生两件事:配置 和 执行。配置只需在控制台中做一次, 执行则在每次快照后自动进行。
这个区分很重要,因为 即使配置不完整,流水线也会成功结束。如果没有勾选任何要接入的 数据库,快照依然会被导出,Parquet 文件依然会写入 S3,而复制作业会静默地忽略它们。 任何地方都不会报错——正因如此,控制台的总览页会列出还缺少哪些配置。
一张表经过的路径
Section titled “一张表经过的路径”1. AWS 生成快照 自动(备份窗口)或手动
2. RDS 以 Parquet 格式导出 exported/{cluster}/{export}/pagila/public.payment/1/*.parquet
3. Data Pump 按你勾选的范围和你指定的名称复制 catalog/{cluster}/pagila.pagamentos/*.parquet
4. 对已配置的表重新分区 catalog/{cluster}/pagila.pagamentos/ano=2024/mes=03/*.parquet
5. Glue 编目 SELECT * FROM datalake.pagila_pagamentos WHERE ano = 2024第 3 步和第 4 步是你的决策生效的地方:选择哪些数据库和表 (配置数据接入),以及如何重新分区 (分区)。
快照就绪时,RDS 会发布一个事件。一个 Lambda 函数接收该事件,检查对应集群是否已订阅, 若已订阅则启动导出。导出完成后,同一条路径会触发处理流水线。
两个环节使用的是同一个 Lambda,它通过事件类型来区分。无关的事件(创建开始、复制、删除) 会被记录并忽略。
四个作业顺序执行,均为基于同一镜像的 Fargate 任务:
- 清理上一次的目录 —
catalog/{cluster}/在每次执行时重建,因此始终反映数据库的 当前状态。 - 复制文件 — 仅处理已勾选的数据库,并应用表过滤规则和别名。
- 重新分区 — 每张已配置的表对应一个任务,并行执行。
- 清理原始导出 — 可选。
最后,Glue 爬网程序对结果进行编目,并向一个 SNS 主题发布通知,供需要串接后续处理的 场景使用。
数据在 S3 中的位置
Section titled “数据在 S3 中的位置”exported/{cluster}/{export}/{数据库}/{schema}.{表}/{分片}/*.parquet └── RDS 产出的内容:快照中包含的全部数据
catalog/{cluster}/{alias}.{表}/*.parquet └── Glue 编目的内容:仅你勾选的部分
longterm/{cluster}/{alias}/{表}/ └── 源数据库清理旧数据后依然保留的历史catalog/ 与 longterm/ 的区别,正是让你在从 Postgres 清理旧数据后仍能
保留历史 的原因:catalog/ 每次执行都会重建,
longterm/ 则持续累积。
在 Postgres 中已分区的表
Section titled “在 Postgres 中已分区的表”如果一张表在 Postgres 中使用了原生分区,RDS 会把父表 和 每个子分区都作为独立的表 导出。父表本身已经包含全部行,因此同时复制两者会让数据湖中的每一行都重复。
Data Pump 使用导出自带的元数据(而非表名模式)来识别并忽略子分区。数据库中新建的 分区会被自动识别,无需维护任何清单。