0

包含销售数据的输入文件将在特定时间以 csv 格式发送到 s3 存储桶,每天最多 5 个文件。

使用 Glue 将要加载到 Redshift 中的 csv 文件数据。

在加载到 Redshift 之前,需要进行转换,例如从 csv 文件文件进行计算和映射。

请分享您对如何构建有效解决方案的意见/建议。

下面一定要注意。

1.复制客户端可能发送或不发送的csv。2.same data表示前一天的数据已在第二天发送。3. 想要处理 Redshift 表上的更新和插入。4. csv 文件在处理/加载到 Redshift 后,将这些文件移动到 S3 存储桶中的另一个位置。

4

1 回答 1

1

当您说“不使用复制命令”时,您指的是复制的所有来源吗?COPY 可以从 S3、EMR、DDB 或通过 ssh 连接加载。如果是这种情况,我只能想到 2 种方法将数据导入 Redshift,无需复制:

  1. 在 SQL 中加载文字。(插入...值(...);)
  2. 使用 Redshift Spectrum 访问 S3 对象,然后从该外部表中读取数据并将数据插入到内部表中

#1 非常慢,并且限制了您可以在单个语句中放入多少数据(SQL 命令长度限制为 64k 个字符)。它还会对可能影响整体集群性能的领导节点产生不利影响。这对于几行数据来说很好,但对于大量数据来说不是一个好主意。

#2 是一个很好的方法,但您需要定义外部表,在 S3 中保存数据,并确保它获取正确的 S3 文件集。如果您要继续重用 S3 文件,这是一个很好的模式,但我不确定在单个负载情况下它比 S3 中的 COPY 更好。

如果您的意图是可以加载数据而无需从 S3 复制的模式,那么还有其他 3 种形式的 COPY 需要考虑。

于 2021-04-08T18:54:00.837 回答