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

Posted

技术标签:

【中文标题】如何使用 AWS RedShift Spectrum 为 S3 存储建模以进行查询【英文标题】:How to model S3 storage for query using AWS RedShift Spectrum 【发布时间】:2019-06-13 10:52:37 【问题描述】:

mysql 数据库中有一个users 表。

我们希望将数据迁移到亚马逊 S3 以使用 Amazon Redshift 进行进一步分析。

第 1 天 - 从 users 表中导出 10 行数据(总行数:10) 第 2 天 - 从 users 表中额外导出 2 行数据(总行数:12) 第 3 天 - 从 users 表中导出修改后的行和新行数据(总行数:13)

提议的 S3 数据文件夹/命名约定:

s3://data/users/YYYYMMDD/users-YYYYMMDDHHMMSS.csv

Amazon Redshift 按如下方式加载数据以查询用户的所有行:

create EXTERNAL TABLE redshift_users from s3://data/users

问题:

    我们假设第 3 天修改的行将优先于第 1 天可用的数据? 如果在 Day4 删除了现有的 2 行,应该如何存储在 S3 中,Redshift 可以理解?

【问题讨论】:

【参考方案1】:

回答你的问题:

    您假设新行将自动优先于旧行 - 事实并非如此。您需要在您的数据中添加一个“processed_timestamp”列并在您的查询中对其进行处理——您的查询必须弄清楚如何仅获取最新的行(我为此使用窗口函数)。

    通常,您无法从 S3 中明智地物理删除行。你需要结合上面的#1来实现一个逻辑删除过程。

【讨论】:

以上是关于如何使用 AWS RedShift Spectrum 为 S3 存储建模以进行查询的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 aws unload 命令将数据从 AWS Redshift 卸载到 s3?

如何从 mac 连接到 aws Redshift db

如何使用 AWS Kinesis Firehose 将嵌套结构推送到 Redshift

如何使用更改表查询在 AWS Redshift 中添加多列

如何从本地安装的 spark 连接到 aws-redshift?

如何在 AWS Datapipeline 中的 Python 脚本中提供 Redshift 数据库密码?