0

我是 Snowflake 数据仓库的新手,想使用雪管加载数据并从包含多个文件夹(每个数据库一个)的外部阶段(S3 存储桶)自动摄取数据,并且在这些文件夹中有多个文件,每个表有 1 个文件。不同文件夹中的文件将在不同时间更新,我目前正在使用自动摄取将 S3 转到 SQS 再到 Snowpipe。

我的示例 S3 存储桶设置如下:

myS3bucket.s3amazonaws.com
    /db1 
       account.csv
       product.csv
    /db2
        invoice.csv
        employees.csv

我目前的理解是,我将为每个表创建一个管道,因此 account.csv 将与 1 个管道相关,该管道将填充帐户表,然后 product.csv 将与另一个管道相关以填充产品表等。

目前,如果我将新文件添加到存储桶中,因为通知在存储桶上,所以看起来所有管道都会被触发。

我的问题是:

  • 添加新文件时触发所有管道是否正确?我是否需要将 db1 和 db2 设置为不同的外部阶段,所以如果我将文件添加到 db1 文件夹,那么只会读取链接到该外部阶段的管道?
  • 我读过 SNS 可以使用,但不确定它如何用于雪管。S3 是否发送消息以便它可以确定调用哪个管道并将消息散播到该管道?
  • 有没有比我上面使用的更好的方法?

谢谢你的帮助

4

2 回答 2

1

当使用 Auto-Ingest Snowflake 为每个雪花帐户创建​​一个 SQS 时,来自 S3 的所有通知都会发送到同一个 SQS,然后根据每个管道的阶段定义(存储桶和路径)传递到每个管道。如果阶段在路径中有重叠,SQS 可能会将通知传递给多个管道。

请参阅“Automating Snowpipe for Amazon S3”文档中“创建启用了自动摄取的管道”下的“重要”部分。

https://docs.snowflake.com/en/user-guide/data-load-snowpipe-auto-s3.html#step-2-create-a-pipe-with-auto-ingest-enabled

于 2020-07-10T18:13:11.473 回答
1

如果您的阶段包含文件路径,那么当 S3 发送消息表明已添加文件时,Snowflake 将计算出受影响的阶段,因此只有指向该文件夹的管道才会拉入文件。

如果您有三个管道,三个阶段,并且这些阶段指向这些文件夹:

  • 1:blahblah
  • 2:blahblah/db1
  • 3:blahblah/db2

那么当在其中创建文件时blahblah/db1,它将触发管道 1 和 2,但不会触发 3。

于 2020-07-10T17:05:59.383 回答