每天将 1 亿行加载到 DWH

Posted

技术标签:

【中文标题】每天将 1 亿行加载到 DWH【英文标题】:Load 100 million rows to DWH daily 【发布时间】:2018-11-03 23:56:29 【问题描述】:

有几个 OLTP Postgres 数据库每天总共接受 1 亿行。 还有一个Greenplum DWH。如何加载这 1 亿行数据,每天只需少量转换到 Greenplum? 我将为此使用Python。 我确信以传统方式 (psycopg2 + cursor.execute("INSERT ...) 执行此操作,即使是批处理,也会花费大量时间并且会在整个系统中造成瓶颈。

您对如何优化数据加载过程有什么建议吗?任何可能有帮助的链接或书籍也欢迎。

【问题讨论】:

查看 Apache Airflow、Celery、Pandas 等选项。 @dmitryro Airflow 只是一个任务调度程序。 Celery 更专注于实时处理,而我需要每天一夜之间一次加载数据。 Pandas 对数据转换很有用,但它有点慢,对加载没有帮助。这些解决方案对我有何帮助? 如果您关心性能和资源而不是按计划进行的工作,请查看 go、scala、kafka、spark。如果需要,您可以并行化 Pandas 或使用线程和多处理使其并发 - 如果您使用 Python,请再次使用 Celery 或 Tornado 框架。 @dmitryro 但是 kafka 是用于流式数据的,而 tornado 是一个网络服务器。我不知道这如何有助于从 OLTP 数据库中提取数据并将数据加载到 DWH 中。这里的主要问题是将数据加载到 DWH 中,这些解决方案似乎都不会帮助我。还是我错了?您能否描述一下您列出的解决方案如何帮助我加载数据?提前谢谢你 另请查看medium.com/@paulgebhardt/…或tuulos.github.io/pydata-2014或dataversity.net 【参考方案1】:

您应该尝试将数据导出到平面文件(csv、txt 等)中。

然后您可以使用一些 Greenplum 实用程序表单导入数据。 看here。

您可以在创建平面文件之前使用 Python 对数据进行转换。使用 Python 自动化整个过程:导出数据到文件和导入数据到表。

【讨论】:

有了这个卷,我不会使用硬盘以避免更多的延迟。我会试着留在记忆中。

以上是关于每天将 1 亿行加载到 DWH的主要内容,如果未能解决你的问题,请参考以下文章

应该应用啥策略来将此源类型加载到 DWH?

我无法从数据块中的 spark 数据帧创建加载数据到 Azure Synapse (DWH)

DWH 重新加载数据

最佳设计模式——用于 DWH 加载的 SSIS 包

如何使用弹性搜索索引 10 亿行 CSV 文件?

Perl DBI - 加载到 SQL Server