0

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

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

4

2 回答 2

3

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

加载历史扫描:

从 20,000 个代币开始。
每次调用消耗 1 个令牌
每个提取的文件
重新填充 5 个令牌 每分钟重新填充 1 个


摄取文件:

开始时每个文件unknown
消耗 1 个令牌 每分钟重新填充 15,000 个

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

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


插入报告:

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


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

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

于 2020-01-08T16:05:35.043 回答
2

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

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

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

于 2020-01-08T15:41:40.943 回答