如何使用python对百万行数据进行ETL?

Posted

技术标签:

【中文标题】如何使用python对百万行数据进行ETL?【英文标题】:How to do ETL on millon rows of data using python? 【发布时间】:2020-07-23 05:14:49 【问题描述】:

我有一个 pgAdmin 数据库,其中包含数百万行 geojson 格式。使用此表我创建了 Tableau 仪表板。由于行包含 geojson 格式的数据,我必须像这样查询:

select jsondata ->> 'id' as id,
jsondata -> 'properties' ->> 'qq',,
jsondata -> 'properties' ->> 'www',
jsondata -> 'properties' ->> 'eeee',
jsondata -> 'properties' ->> 'qwer' ,
jsondata -> 'properties' ->> 'yyy',
split_part(jsondata -> 'properties' -> '@ab:com:abc:wxy'->'tags'->>0,'@',2),
split_part(jsondata -> 'properties' -> '@ab:com:abc:wxy'->'tags'->>1,'@',2),
split_part(jsondata -> 'properties' -> '@ab:com:abc:wxy'->'tags'->>2,'@',2),
split_part(jsondata -> 'properties' -> '@ab:com:abc:wxy'->'tags'->>3,'@',2),
split_part(jsondata -> 'properties' -> '@ab:com:abc:wxy'->'tags'->>4,'@',2),
split_part(jsondata -> 'properties' -> '@ab:com:abc:wxy'->'tags'->>5,'@',2),
split_part(jsondata -> 'properties' -> '@ab:com:abc:wxy'->'tags'->>6,'@',2),
TIMESTAMP 'epoch' + cast(cast(jsondata -> 'properties'->'@ab:com:abc:wxy'->>'createdAt'as bigint)/1000 as int) * INTERVAL '1 second' as create_date,
TIMESTAMP 'epoch' + cast(cast(jsondata -> 'properties'->'@ab:com:abc:wxy'->>'updatedAt'as     bigint)/1000 as int) * INTERVAL '1 second' as Update_date
from schema.table_name

当数据有千行时,我曾经将这个数据库与 tableaue 实时连接,但现在数据已经增加,而且会一天天增加。我想使用 ETL 过程创建画面仪表板,我正在考虑 Talend 但我想使用 python 以编程方式进行。

谁能建议我怎么做?

【问题讨论】:

【参考方案1】:

您可以使用 Pyspark。官网:http://spark.apache.org/。 Spark 专为处理和分析大数据而设计,并提供多种语言的 API。如果您正在处理的数据非常大,并且数据操作的速度和大小非常大,Spark 是 ETL 的不错选择。还有其他可用的库。但是你说你想使用大数据,Pyspark 会做你的工作。

你也可以试试玛拉。它是一个轻量级的 Python ELT 工具。它功能强大且易于学习和使用。它使用 PostgreSQL 作为数据处理引擎,这将进一步帮助您制作项目,因为您已经在使用 Postgre。 https://github.com/mara

【讨论】:

实际上我在连接 postgres 和 pyspark 时遇到了困难 希望这会有所帮助:***.com/questions/34948296/… 试试这个教程,会有很大帮助:itnext.io/… @VishalUpadhyay 我已经更新了我的答案。你可以去看看。

以上是关于如何使用python对百万行数据进行ETL?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pandas 或 python 将具有数百万行的表从 PostgreSQL 复制到 Amazon Redshift

如何在 qlik 意义上用另一种方式替换大数据(大约百万行)上的 for..loop

为可视化准备百万行数据

在 Python 中合并具有数百万行的两个表

如何增强对数百万行表的 MySQL 查询?

在 sql server 2008 中对百万记录表进行简单但缓慢的查询