我有大量的事件以小型 JSON 文件的形式存储在 S3 中。现在我需要使用 Snowpipes 将这些文件摄取到 Snowflake 中。发送到 Snowflake 的请求数量是否存在性能问题?我应该将这些小文件合并成一个更大的 JSON,然后让 Snowflake 摄取它吗?
我知道 Snowflake 可以自动检测 S3 上的更改并尝试刷新其外部表,但我是否应该让小文件不断触发这个过程?
我有大量的事件以小型 JSON 文件的形式存储在 S3 中。现在我需要使用 Snowpipes 将这些文件摄取到 Snowflake 中。发送到 Snowflake 的请求数量是否存在性能问题?我应该将这些小文件合并成一个更大的 JSON,然后让 Snowflake 摄取它吗?
我知道 Snowflake 可以自动检测 S3 上的更改并尝试刷新其外部表,但我是否应该让小文件不断触发这个过程?
是的,可以发出的 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 之间进行压缩。如果您的要求允许您有时间将这些小文件合并成一个更大的文件,那么是的,我会推荐这种方法。
Snowflake 有一些文档可以很好地回答这个问题。简而言之:理想情况下,您的文件很大,但不会大到和/或复杂到需要一分钟以上的时间来处理。
我有一些雪管可以轻松处理大量小文件,但您可能会从较大的文件中获得至少稍微更好的性能。一般来说,SnowFlake 针对大批量进行了优化。
另一个注意事项是,Snowpipe 定价包括加载的文件数量,因此您可能会通过将小文件合并在一起来节省一些成本。