2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

从 RDBMS 到 Snowflake 的复制 | 技术实践

  • 2025-09-17
    北京
  • 本文字数:870 字

    阅读完需:约 3 分钟

大小:428.77K时长:02:26
从 RDBMS 到 Snowflake 的复制 | 技术实践

问题陈述:


在仅有 8GB 内存的一台 Databricks Worker 上,将一张超过 1 亿条记录的 Oracle 表迁移到 Snowflake,需要一种高度优化、具备内存感知的方案,以避免失败并确保在严格的 2 小时时限内稳定执行。传统方法存在发生内存不足错误和资源利用低效的风险,因此需要一种策略,在无需额外增加集群资源的前提下,优先实现受控的数据流式处理、尽可能小的内存占用以及高效的写入操作。(使用 Databricks、PyArrow 和 Native Spark)

❌ 常见错误:


  • 使用单线程的 Pandas to_sql() = 必然触及内存上限并失败。

  • 未调优的直接 JDBC 读取 = 缓慢且不稳定。

✅ 优化策略:

1.来源:Oracle 并行读取


  • 调优 JDBC 的 fetchsize 与 defaultRowPrefetch.

  • 计算并限制分区数以获得最佳并行度。

  • 使用谓词下推以高效进行数据切分。

2.暂存:DBFS 上的 Snappy Parquet


  • 重新分区以避免小文件。

  • 写入 Snappy Parquet 以发挥列式效率。

* 避免小文件—合理使用 coalesce() 或 repartition()

* Parquet 块大小 128MB

  • 创建稳定的分布式检查点。

3.处理:用 PyArrow 分块,而非 Pandas


按*row groups**迭代,而不是一次处理整个数据集。


  • 使用 pyarrow.parquet.ParquetFile() 打开文件

  • 通过.read_row_group() or .read_raw_group()读取每个分组

*至关重要的是跳过 Pandas 转换**,以避免 driver 端 OOM.

*直接转换为 Spark DataFrame,以进行分布式处理。

4.加载:使用 Native Spark Writer 至 Snowflake


  • 使用 spark-snowflake 连接器进行并行、高吞吐写入。

  • 利用 Snowflake 的 Apache Arrow 集成以提升速度。

5.稳定性:显式内存清理


  • 在每个分块处理后删除 DataFrame 引用。

*删除 DataFrame 对象

*显式丢弃所有列以释放内存

  • 手动触发垃圾回收 (gc.collect()).

  • 防止长时作业中的内存泄漏。结果:在单个 8GB worker 节点上对 1 亿+记录实现稳定执行,并在可预测的 2 小时窗口内完成(Approx)。


声明:本演示中所表达的观点和意见仅代表作者个人,并不必然反映 Novartis 或其任何附属机构或管理人员的官方政策或立场。


原文地址:

https://www.linkedin.com/pulse/rdbms-snowflake-copying-arabinda-mohapatra-pd3tc/?trackingId=BijEcXy2R12tcGL7PQ410A%3D%3D

2025-09-17 22:004594

评论

发布
暂无评论

微信业务架构

「架构实战营」

2022 ARTS|Week 03——生活不奖赏心血来潮,也不奖赏你赋予的特殊含义某一天,无论日子过得如何,不要停止。

MiracleWong

算法 写作 ARTS 打卡计划

模块九作业-设计电商秒杀系统

心怀架构

项目管理之可行性研究

williamcai

边缘化需求,闪电式切入

明道云

灵活管理客户、营销与流程的房地产解决方案

明道云

重读《卓有成效的管理者》

wood

300天创作

模块1作业

卡西毛豆静爸

架构实战营

模块六作业-拆分电商系统为微服务

曾竞超

「架构实战营」

电商秒杀系统

小麦🌾

架构实战营

Mac 上制作 SSL 证书

编程三昧

JavaScript openssl 1月月更

再谈:我对测试行业发展和自我价值诉求的思考

老张

测试工程师 职场发展

设计消息队列存储消息数据的Mysql表

ren

设计模式【12】-- 搞定最近大火的策略模式

秦怀杂货店

Java 设计模式

架构实战营 - 毕业设计

lucian

一个cpp协程库的前世今生(二十三)env自动回收

SkyFire

c++ cocpp

【网络安全】干货|SQL注入攻击思路手法总结(上)

H

数据库 网络安全 SQL注入

架构训练营 - 模块九

Geek_9de3de

架构实战营

Go 语言快速入门指南:Go 读取文本文件

宇宙之一粟

Go 数据读取 Go 语言 1月月更

vue 作者在2022-2-7起宣布 vue3 正式作为默认版本

你?

毕业设计

沐风

AWVS扫描工具使用教程

喀拉峻

网络安全 扫描

5 个可以拓展全栈技能的开源项目

devpoint

graphql REST API 1月月更 Supabase Appwrite

架构训练营 week6 课程总结

红莲疾风

「架构实战营」

架构实战训练营第一周

刘帅

设计消息队列存储消息数据

drizzle

「架构实战营」

Gsub Blocks、Partitions和 StringScanners,哦,天哪!

吴脑的键客

ruby

架构实战营毕业设计

VegetableBird

架构实战营 #架构实战营 架构师实战营 「架构实战营」

架构实战营模块六作业

Jude

架构实战营

23 Prometheus 之Kubernetes监控

穿过生命散发芬芳

Prometheus 1月月更

微信业务架构&学生管理系统架构设计

五月雨

架构实战营 「架构实战营」

从 RDBMS 到 Snowflake 的复制 | 技术实践_数据集成_Arabinda Mohapatra_InfoQ精选文章