【问题标题】:Is there a way to speed up AWS Redshift copies?有没有办法加快 AWS Redshift 副本的速度?
【发布时间】:2022-01-28 00:06:33
【问题描述】:

我有一组从S3AWS RedshiftCOPY 数据副本。

复制语句如下:

COPY {schema_name}.{table_name}
FROM '{s3_path}'
IAM_ROLE '{redshift_role}'
FORMAT AS PARQUET;

s3_path 中有 50 个文件,因此我运行 50 个副本,因为每个复制语句都针对路径中的每个文件运行。

即:

COPY {schema_name}.{table_name}
FROM 's3://bucket/a/parquet_file_part0.parquet'
IAM_ROLE '{redshift_role}'
FORMAT AS PARQUET;

COPY {schema_name}.{table_name}
FROM 's3://bucket/a/parquet_file_part1.parquet'
IAM_ROLE '{redshift_role}'
FORMAT AS PARQUET;

每个文件的权重30kb

50 份副本所用的总时间约为 500 - 600 秒。 所以每个文件大约需要 10 秒。有没有一些提高复制速度的技巧?其他解决方案可能是 par_apply 副本并行运行

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-redshift


    【解决方案1】:

    这些 COPY 命令的目标表是否相同?如果是这样,那么您应该使用带有清单文件的单个 COPY。见:https://docs.aws.amazon.com/redshift/latest/dg/loading-data-files-using-manifest.html

    当有多个 S3 文件(每个切片至少 1 个)时,COPY 运行效果最佳,如果文件多于切片,则文件至少为 100MB。这与在 Redshift 和 S3 之间建立并行连接以及 S3 对象查找时间有关。

    【讨论】:

    • 我终于运行了一条语句,指向没有文件名的路径并且工作正常。没有清单文件。切片是什么意思?如何在 redshift 和 s3 之间建立并行连接?
    • “切片”是 Redshift 概念中的独立执行线程。在每个 Redshift 集群上,查询都是并行运行的,并行部分的数量等于集群中的切片数量。每个节点有一个基于节点类型的默认切片数 - docs.aws.amazon.com/redshift/latest/mgmt/… - 如果您使用弹性调整大小,可以更改。集群中的切片总数(节点数 X 每个节点的切片数)告诉您集群的并行度。
    • 当您运行 COPY 命令时,Redshift 将尝试使用这种并行性来执行 COPY,但如果只有一个 S3 文件要 COPY,那么只有一个“切片”将执行工作,而其他“切片”将等待。如果您的集群中有 16 个文件包含相同数量的数据和 16 个切片,那么 COPY 可以(几乎)快 16 倍运行。 S3 也是一个计算机集群,这个集群可以处理大量的连接,所以没有瓶颈。
    • 您是正确的,因为您不需要清单来获得并行复制功能,但使用清单是最佳实践。如果您有 S3 中应该复制到 Redshift 中的所有文件的清单并且缺少一个,则 COPY 命令将引发错误(检测到问题)。如果您只是使用 S3 中的文件夹结构来确定要使用的文件并且缺少文件,那么您将有静默数据丢失(不好)。
    • 目的是确认所有文件都已加载且仅加载一次。扫描 S3 中的文件是 Redshift 所做的一切,除非您正在寻找特定的极端情况,否则此代码可能没有任何价值。由于文件来自外部合作伙伴,我会寻找他们用来提供他们成功上传的文件记录的过程。如果他们使用网站,则相同的上传代码可以将记录放入 DynamoDB(例如)。确保加载正确数据的独立过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多