来自S3(COPY)的雪花加载数据与来自EXTERNAL表的加载

时间:2020-09-17 06:26:34

标签: snowflake-cloud-data-platform

以下两种情况在性能上有什么区别,其中一种在执行和存储方面进行了成本优化。

  1. 在S3中使用文件创建外部表,然后从外部表将“ INSERT INTO .... SELECT ...”加载到Snowflake目标。
  2. 从S3将数据加载到临时表,然后从临时表加载(“ INSERT INTO .... SELECT ...”)到Snowflake目标。

1 个答案:

答案 0 :(得分:0)

好-如果您想尽可能多地使用Snowflake平台的功能(下拉优化),则需要先将数据尽可能高效地放入Snowflake,然后对它运行SQL查询((过滤器,聚合器等)。使用COPY将S3 / Azure / Google文件移动到Snowflake表中,然后对它们运行INSERT ... SELECT。

没有理由创建EXTERNAL表,如果这样做,它的性能将比我建议的方法差很多。

外部表格-简短说明

为简单起见,我们假设您的Snowflake实例在AWS上运行,并且S3存储桶中还有一些文件。

Snowflake将所有Snowflake数据存储在S3中,但是是以高度压缩和优化的格式存储的。 Snowflake保留了有关数据的位置和内容的元数据,使它可以将数据显示为表/列。

外部表基本上是一回事:Snowflake在S3存储桶中保存有关文件的元数据,从而使它可以将数据呈现为表/列。区别在于:

  • 外部数据未被压缩/优化,因此占用更多存储空间,查询速度较慢
  • 有效地,您的外部表的查询引擎是S3环境(除非/直到Snowflake将数据读入内存/高速缓存中,然后它才能像对待Snowflake数据一样对其进行处理)
  • 可能存在网络延迟的某些因素-取决于您的Snowflake帐户和S3存储桶在全球AWS基础设施中的位置

希望这有帮助吗?