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



MySQL数据库中存在一个users表。

我们希望将数据迁移到 AMazon S3 中,以便使用 Amazon Redshift 进行进一步分析。

  • 第 1 天 - 从用户表中导出 10 行数据(总行数:10(
  • 第 2 天 - 从用户表中导出另外 2 行数据(总行数:12(
  • 第 3 天 - 从用户表中导出修改的行和新数据行(总行数:13(

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

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

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

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

问题:

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

要回答您的问题:

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

  2. 通常,您无法从 S3 中合理地物理删除行。您需要结合上面的 #1 实现逻辑删除过程。