在 S3 和 Redshift 之间测试数据

Posted

技术标签:

【中文标题】在 S3 和 Redshift 之间测试数据【英文标题】:Testing data between S3 and Redshift 【发布时间】:2020-07-14 21:52:07 【问题描述】:

目前我正在尝试找出一种策略来自动化以下测试场景。数据(csv 文件)已从本地服务器提取到 S3,然后使用胶水转换 (ETL) 到 Redshift

    比较本地服务器文件和 Amazon S3 (csv) 之间的数据,即比较位于两个差异服务器中的两个文件的全部内容。 比较 Amazon S3 和 Amazon Redshift 之间的数据(在将数据从 S3 提取、转换和加载 (ETL) 到 Redshift 之后)。 请建议是否有任何 SIT 测试框架来测试本地到 AWS 云的迁移。

是否可以使用 python-pycharm 从 s3 和 Redshift 读取数据到 Pandas 数据帧,以便我们可以比较数据帧中的数据?如果是这样,请建议如何读入数据帧。

【问题讨论】:

你在寻找什么样的输出?您是否想查看整行,在该行的某处有一个不同之处?或者您最想知道在两个商店之间添加/删除了哪些主键?数据是否有任何时间戳可用于比较(例如 LastModified 时间)?数据有多大(有多少行,文件有多大)?随意编辑您的问题以添加这些详细信息,而不是通过评论来回答。 【参考方案1】:

要从 s3 和 Redshift 读取数据,您可以尝试使用 red-panda 库:https://github.com/jucyai/red-panda。使用这个库,您可以直接从 S3 和 Redshift 获取数据到 pandas.DataFrame

rp = RedPanda()
df_s3 = rp.s3_to_df(s3_bucket, s3_key) 
df_redshift = rp.redshift_to_df("select * from table_name")

获得两个数据框后,您可以使用df_s3.equals(df_redshift) 来测试相等性。如果它们具有相同的形状和元素,则结果为 True。在此处查看此方法的 pandas 文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.equals.html

【讨论】:

以上是关于在 S3 和 Redshift 之间测试数据的主要内容,如果未能解决你的问题,请参考以下文章

Redshift 的 UNLOAD Query 生成的 S3 请求数

为啥 Redshift 和 S3 之间的 AWS 文件大小不同?

S3 到 Redshift:未知的布尔格式

Node-Redshift 是不是支持复制命令(查询)将数据从 S3 加载到 Redshift?

如何使用 AWS RedShift Spectrum 为 S3 存储建模以进行查询

AWS 移动分析环境