如何将历史数据分区并归档到 Cloud Storage Nearline?

解读

面试官问的是“历史数据分区并归档到 Cloud Storage Nearline”,而不是简单的“备份”。
在国内真实业务场景里,这通常意味着:

  1. 库内按时间/业务键做分区,保证在线表只保留最近 6~12 个月热数据;
  2. 冷分区卸载成 CSV/Parquet分级存储到 Nearline(低频访问,≤1 次/月),同时保留元数据可追溯
  3. 整个过程零停机、可回滚、可审计,且要符合等保 2.0/3.0 对数据出境与访问日志的要求
    面试官想看你是否能把 Cloud SQL 的托管边界、IAM、VPC-SC、Dataflow、Composer 以及国内合规要求串成一条可落地的闭环方案

知识点

  • Cloud SQL 分区表限制:仅 PostgreSQL 12+ 支持原生声明式分区,MySQL 5.7/8.0 需手动分表;Cloud SQL 不支持直接挂载外部路径,无法像 BigQuery 那样把分区映射到 Cloud Storage
  • Nearline 计费模型:最低 30 天存储,提前删除费、Class A/B 请求费;国内双栈网络出口需走中国大陆 VPC,避免跨境流量
  • 数据出境合规:若数据含 PI(个人信息),需先脱敏/加密,再通过VPC Service Controls 边界写入同 region 的 Cloud Storage;日志必须接入 Cloud Logging 并转存至中国主权日志池
  • 卸载工具选型
    小型表(<500 GB):gcloud sql export csv 到 Cloud Storage,搭配 Serverless 触发器自动转 Nearline;
    大型表(>500 GB 或 10 亿行):用 Dataflow 模板 JdbcToGcs 并行抽取,指定 shard column 做切片,避免单线程导出把主库打爆;
    需要增量(binlog 位点):用 Debezium on GKE Autopilot 把变更流式写入 GCS,再按天 merge 成 Parquet。
  • 分区元数据管理:在BigQuery 创建外部表指向 GCS 路径,Hive partition 格式(year=yyyy/month=mm/day=dd),下游 BI 可透明查询;回滚时通过 Cloud SQL 的 IMPORT csv 即可把单分区重新灌回。
  • 自动化与监控:用 Cloud Composer 2 写 DAG,按业务键自动 drop/truncate 冷分区,导出前检查 replication lag <5 s;失败时通过 PagerDuty + 钉钉群告警。
  • 成本优化:Nearline 桶启用自动生命周期规则,365 天后转 Coldline,1095 天后删除;导出文件按 256 MB 分块,减少 Class A 请求次数。

答案

我给出一个在国内可落地的四步闭环方案,已在上亿级流水表验证过:

  1. 分区设计
    以 PostgreSQL 为例,用声明式分区 BY RANGE (order_date),每月一个分区;热数据保留 6 个月,冷分区命名 orders_y2022m07。
  2. 零停机卸载
    在 Composer DAG 里先CREATE TABLE orders_y2022m07_unload (LIKE orders_y2022m07),然后ALTER TABLE orders_y2022m07 DETACH PARTITION orders_y2022m07_unload;这一步只拿元数据锁,毫秒级完成,业务无感知。
  3. 并行导出与分级
    Dataflow 作业读取 Cloud SQL 只读实例(需提前开启 Private IP + 连接池er),设置 numShards=order_date 的月天数,导出为 gzip CSV 到 gs://archive-oss/nearline/orders/yyyy=2022/mm=07/;文件落地后统一设置 StorageClass=nearline,并通过 gsutil -m rewrite -s nearline 批量转换,避免提前删除费
  4. 元数据登记与回收
    导出成功后,把 partition 名称、路径、row_count、md5 写入 BigTable 元数据表;确认 Cloud Logging 审计日志已落盘,再DROP TABLE orders_y2022m07_unload释放空间。
    回滚流程:根据元数据找到对应 CSV,gcloud sql import csv 指定目标分区表,30 TB 数据 4 小时可回灌
    全程通过 VPC Service Controls 保证数据不出境,CMK 加密由 Cloud KMS 中国站托管,满足等保 3.0 对个人信息去标识化的要求。

拓展思考

如果面试官继续追问“为什么不直接用 BigQuery 时间分区表替代 Cloud SQL?
可以从OLTP 事务延迟、索引唯一性、外键约束、串行化隔离级别四个角度说明 Cloud SQL 不可替代;而 BigQuery 仅用于冷数据即席分析,通过联邦查询select * from external_table$PARTITIONS_SUMMARY 即可把归档数据与在线热数据无缝打通,实现HTAP 分层架构
再深一层,可讨论跨 region 灾备:把 Nearline 桶每日同步到青岛/上海双可用区,通过双写入 Debezium 保证 RPO<5 min;同时利用Cloud SQL 的跨区高可用+GCS 双桶互备,在华北/华东同时满足金融级合规与低延迟查询