很像 Gokhan 的答案,但我会以不同的方式描述它。
微分区:
每次将数据写入雪花时,都会将其写入新文件,因为文件是不可变的。这意味着您有很多碎片。但由于保留表的元数据,当您查询时,Snowflake 可以修剪已知不包含正在查找的数据的表。否则,它会加载所有数据(对于您选择的列)并进行强力“全表扫描”。雪花微分区与经典分区没有关系,除非你幸运的话可能会被修剪。此外,微分区是根据您加载数据的方式写入的,并且当您的写入超过阈值时,微分区只是“拆分”为更多分区。就像您从 WinZip/7Zip/Gzip 中获得的最大文件块大小参数一样。接下来要注意的是,如果您更新分区中的 ROW,整个分区都会被重写。并且更新行的顺序是不可控的并且可以是随机的(基于您的表连接逻辑)。因此,如果您进行多次写入或多次“小”更新,您的分区碎片将会非常严重,这会对编译时间产生非常负面的影响,因为所有元数据都需要加载。他们现在正在收费。之所以会这样,是因为 S3 是不可变的文件存储,但这也是您可以分离计算表单数据的原因。这也是“时间旅行”和“历史天数数据保留”的工作原理,因为这次不会删除表的先前状态,因此您需要为 S3 存储付费。这也意味着当您为几天内累积写入的所有数据付费时,请注意您的流失
数据聚类:
是一种指示您希望如何对数据进行排序的方法。传统的手动集群命令或自动集群将重写分区以改进集群。想想 Norton SpeedDisk(如果您是老派)按照您希望的集群顺序写入表(又名在 INSERT 上始终有一个 ORDER BY),将会改善情况。但是您只能将一个表聚集在一组“KEY”上,因此您需要在聚集数据之前考虑您主要如何使用数据。或者拥有具有我们需要的最小子集/排序行为的数据的多个副本(我们这样做)。警告:更新当前不尊重此集群,并且您可以通过运行自动集群来支付全表重写成本的 4 倍以上,您需要注意这一点,因为它可能是无限的成本。
简而言之,集群就像穷人的索引,而 Snowflake 基本上是大规模的全表扫描/映射/减少处理。但它确实很擅长这一点,当你了解它是如何工作的时,使用起来会非常有趣。
归档时间: |
|
查看次数: |
849 次 |
最近记录: |