使用Snowpipe - 加载小文件的最佳实践。例如,每天数千个4K文件?

7

问题

  1. 使用Snowpipe加载小文件(例如4K)相比推荐的1-10MB文件大小,成本会更高多少?注意:这个问题意味着加载小文件比推荐的1-10MB文件大小更昂贵。

  2. 了解最佳实践是加载1-10MB大小的文件,但我需要几分钟内完成近实时传输。我可以将文件连接起来使它们更大,但在发送微批处理到S3和Snowpipe之前不能等待超过60秒。我当前每30秒写入任何我拥有的内容,但我看到Snowpipe每60秒报告一次。这是否意味着将文件写入S3频率超过60秒没有意义?即,如果我每30秒发送一次文件,是否会实际降低平均延迟,或者60秒是最小Snowpipe周期。

  3. 加载4K文件(每天约200MB的4K文件),每GB成本约为20美元,这非常昂贵。如果我加载(例如)1-10MB范围内的CSV文件,每GB应该期望多少费用?如果保持在1-10MB范围内,我的每GB成本会降低吗?

  4. 有没有更快/更便宜的替代方案可以将数据导入Snowflake?注意:当前使用Parquet格式的Snowpipe到VARIANT,然后使用STREAMS和TASKS重新组织数据以进行近实时分析。了解使用Snowpipe比使用虚拟仓库更便宜。这是真的吗?我怀疑真正的答案是“取决于情况”。但是,“取决于什么”?

  5. 除了我的近实时需求之外,我还有一些系统提供批量数据源(CSV格式,大约每4小时一次,期望延迟在30分钟内处理并呈现供分析使用)。文件大小在此处有所不同,但大多数都在1MB至1GB范围内。我应该使用相同的Snowpipe解决方案,还是最好从Airflow组织工作,并在专用虚拟仓库上使用COPY命令后跟随SQL语句?或者,您有什么其他建议?

  6. 我可以看到使用Snowpipe加载4K文件很昂贵,可能比较大的文件更便宜。如果我加载超过10MB大小的文件,这些文件会再次变得更加昂贵吗?即成本是“钟形曲线”还是趋于平缓。

背景

  1. 我正在使用Snowpipe提供近实时(NRT)数据加载解决方案。
  2. 我有大约30个表的数据每30秒从Kafka复制到S3,并且正在使用Snowpipe自动加载到Snowflake中。
  3. 数据以Parqet格式传递给我,加载到Variant中,然后使用视图将属性提取到一个表中,然后使用任务和SQL进行重构以进行分析。
  4. 在一天内,我发现加载了50,000个文件,文件大小不同,但平均每个文件大小为4K。
  5. 我可以看到每分钟加载大约30个文件(即每分钟加载约100K)。
  6. 我试图平衡几个非功能性要求。 a)有效使用积分。知道小文件很昂贵。b)降低延迟(我试图从Kafka到仪表板的管道最多只需要2-5分钟)。c)简单性 - 即易于理解和维护,因为我预计解决方案会大量增长 - 即从大约20个表扩展到数百个表 - 所有这些都需要近实时。
  7. 在接下来的3个月内,我将有许多CSV批次加载,每4个小时一次。它们是完全独立的数据源(来自NRT),并且具有更加密集的处理和ELT。我想知道是否应该使用Snowpipe还是COPY。
1个回答

3
  1. Snowpipe是无服务器且按使用计费的。与启动数据仓库相比,无服务器方法具有更少的开销,但仍然存在一些开销。因此,您发送信息的频率越高,成本就越高。具体多少呢?试一下,没有人能告诉您。
  2. 我不是专家,但Snowflake不是为实时工作负载而建立的。市场营销可能会告诉您其他内容。在最坏的情况下,您需要预计几分钟才能完全刷新数据。Snowflake擅长处理大量数据加载,您可以承受更长的等待时间。
  3. 再次尝试一下,一个指标是您的数据摄取保持仓库繁忙的程度。如果它运行1分钟,但您的查询在1秒钟内完成,您可能会获得60倍的成本节约。
  4. 对于您的用例,最便宜的方式应该是使用Snowpipe,假设您没有完全占用数据仓库。
  5. Copy into应该没问题。
  6. 我不知道。 :) 试一下。我猜这没有太大的区别。你可能会遇到大文件(1G +)的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接