【问题标题】:How do I load large number of small CSV files from s3 to redshift?如何将大量小型 CSV 文件从 s3 加载到 redshift?
【发布时间】:2019-02-05 06:08:07
【问题描述】:

我有大量较小的 CSV 文件(~12k)(每个~250 条记录)。我想将它们加载到同一区域中大小为 3 的红移集群,但这需要很长时间。

我在 SQL Workbench/J 中使用的查询是:

copy gsod from 's3://[path to folder]' access_key_id '******' secret_access_key '******' delimiter ',' BLANKSASNULL emptyasnull IGNOREHEADER 1 maxerror as 100000;

如果我使用单个文件,查询会在几秒钟内完成。但是,尽快加载所有这些文件的最佳方法是什么?

我尝试从集群的同一区域从 s3 加载文件。

copy gsod from 's3://[path to folder]' access_key_id '******' secret_access_key '******' delimiter ',' BLANKSASNULL emptyasnull IGNOREHEADER 1 maxerror as 100000;

【问题讨论】:

    标签: amazon-s3 amazon-redshift


    【解决方案1】:

    选择manifest 文件选项。它会做的非常快。

    https://docs.aws.amazon.com/redshift/latest/dg/loading-data-files-using-manifest.html

      {
    "entries": [
    {"url":"s3://mybucket-alpha/2013-10-04-custdata", "mandatory":true},
    {"url":"s3://mybucket-alpha/2013-10-05-custdata", "mandatory":true},
    {"url":"s3://mybucket-beta/2013-10-04-custdata", "mandatory":true},
    {"url":"s3://mybucket-beta/2013-10-05-custdata", "mandatory":true}
    ]}
    

    这将并行执行copy,而不是逐个处理文件,而是一次尝试加载所有文件。

    copy customer from 's3://mybucket/your-manifest-file' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' manifest;
    

    希望对您有所帮助。

    【讨论】:

    • 谢谢!我将从 CSV 生成清单文件,然后尝试。
    • 工作就像一个魅力!
    • @SuhaibAhmed 你介意接受这个作为正确答案吗?
    • @RedBoy 您是否认为来自 s3 的复制命令(文件夹中有多个文件)在没有清单的情况下不会并行化? - 见docs.aws.amazon.com/redshift/latest/dg/…
    • 我认为这里的关键是可以并行加载多个文件(因此更快),而不是一次一个 - 这就是 OP 在问题中的做法。这可以使用清单文件来实现,尽管也可以指定 S3 对象前缀而不是完整文件名,这也会导致处理具有相同前缀的所有文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多