【问题标题】:From S3 to Snowflake and performance从 S3 到 Snowflake 和性能
【发布时间】:2020-01-08 14:19:19
【问题描述】:

我有大量的事件以小型 JSON 文件的形式存储在 S3 中。现在我需要使用 Snowpipes 将这些文件摄取到 Snowflake 中。发送到 Snowflake 的请求数量是否存在性能问题?我应该将这些小文件合并成一个更大的 JSON,然后让 Snowflake 摄取它吗?

我知道 Snowflake 可以自动检测 S3 上的更改并尝试刷新其外部表,但我是否应该让小文件不断触发这个过程?

【问题讨论】:

    标签: performance amazon-s3 snowflake-cloud-data-platform data-ingestion


    【解决方案1】:

    是的,可以发出的 API 请求数量是有限制的。此比率存在于帐户级别,而不是用户或管道级别。每个端点都有自己的令牌库。

    loadHistoryScan:

    从 20,000 个令牌开始。
    每次通话消耗 1 个令牌
    为每个提取的文件重新填充 5 个
    每分钟补充 1 次


    摄取文件:

    unknown开头
    每个文件消耗 1 个令牌
    每分钟补充 15,000 个

    对于 ingestFile 端点,您的 API 调用中的每个 file 使用 1 个令牌,无论您提交 5000 次调用和一个文件还是一个调用 5000 都是如此文件。

    请务必不要重新提交相同的文件,因为您将为每个重新提交的文件使用一个令牌,但 copy_history 表函数不会告诉您管道是否跳过了文件。


    插入报告:

    unknown开头
    每次通话消耗 1 个令牌
    充值率unknown


    一个账户随时可以拥有的最大代币数量为100,000;一旦达到这一点,重新填充就会停止,直到您开始进行 API 调用并再次使用令牌。

    Snowflake 建议加载的文件大小在 10 MB 到 100 MB 之间压缩。如果您的要求允许您有时间将这些小文件合并成一个更大的文件,那么是的,我会推荐这种方法。

    【讨论】:

      【解决方案2】:

      Snowflake 有一些文档可以很好地回答这个问题here。简而言之:理想情况下,您的文件很大,但不会大到和/或复杂到需要一分钟以上的时间来处理。

      我有一些雪管可以轻松处理大量小文件,但您可能会从较大的文件中获得至少稍微更好的性能。一般来说,SnowFlake 针对大批量进行了优化。

      另一个注意事项是Snowpipe pricing 包括加载的文件数量,因此您可能还希望通过将小文件合并在一起来节省一些成本。

      【讨论】:

        猜你喜欢
        • 2022-01-24
        • 1970-01-01
        • 2020-08-11
        • 1970-01-01
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        • 1970-01-01
        • 2017-07-07
        相关资源
        最近更新 更多