问题
使用Snowpipe加载小文件(例如4K)相比推荐的1-10MB文件大小,成本会更高多少?注意:这个问题意味着加载小文件比推荐的1-10MB文件大小更昂贵。
了解最佳实践是加载1-10MB大小的文件,但我需要几分钟内完成近实时传输。我可以将文件连接起来使它们更大,但在发送微批处理到S3和Snowpipe之前不能等待超过60秒。我当前每30秒写入任何我拥有的内容,但我看到Snowpipe每60秒报告一次。这是否意味着将文件写入S3频率超过60秒没有意义?即,如果我每30秒发送一次文件,是否会实际降低平均延迟,或者60秒是最小Snowpipe周期。
加载4K文件(每天约200MB的4K文件),每GB成本约为20美元,这非常昂贵。如果我加载(例如)1-10MB范围内的CSV文件,每GB应该期望多少费用?如果保持在1-10MB范围内,我的每GB成本会降低吗?
有没有更快/更便宜的替代方案可以将数据导入Snowflake?注意:当前使用Parquet格式的Snowpipe到VARIANT,然后使用STREAMS和TASKS重新组织数据以进行近实时分析。了解使用Snowpipe比使用虚拟仓库更便宜。这是真的吗?我怀疑真正的答案是“取决于情况”。但是,“取决于什么”?
除了我的近实时需求之外,我还有一些系统提供批量数据源(CSV格式,大约每4小时一次,期望延迟在30分钟内处理并呈现供分析使用)。文件大小在此处有所不同,但大多数都在1MB至1GB范围内。我应该使用相同的Snowpipe解决方案,还是最好从Airflow组织工作,并在专用虚拟仓库上使用COPY命令后跟随SQL语句?或者,您有什么其他建议?
我可以看到使用Snowpipe加载4K文件很昂贵,可能比较大的文件更便宜。如果我加载超过10MB大小的文件,这些文件会再次变得更加昂贵吗?即成本是“钟形曲线”还是趋于平缓。
背景
- 我正在使用Snowpipe提供近实时(NRT)数据加载解决方案。
- 我有大约30个表的数据每30秒从Kafka复制到S3,并且正在使用Snowpipe自动加载到Snowflake中。
- 数据以Parqet格式传递给我,加载到Variant中,然后使用视图将属性提取到一个表中,然后使用任务和SQL进行重构以进行分析。
- 在一天内,我发现加载了50,000个文件,文件大小不同,但平均每个文件大小为4K。
- 我可以看到每分钟加载大约30个文件(即每分钟加载约100K)。
- 我试图平衡几个非功能性要求。 a)有效使用积分。知道小文件很昂贵。b)降低延迟(我试图从Kafka到仪表板的管道最多只需要2-5分钟)。c)简单性 - 即易于理解和维护,因为我预计解决方案会大量增长 - 即从大约20个表扩展到数百个表 - 所有这些都需要近实时。
- 在接下来的3个月内,我将有许多CSV批次加载,每4个小时一次。它们是完全独立的数据源(来自NRT),并且具有更加密集的处理和ELT。我想知道是否应该使用Snowpipe还是COPY。