Snowpipe 自动摄取配置看起来会触发所有管道
Posted
技术标签:
【中文标题】Snowpipe 自动摄取配置看起来会触发所有管道【英文标题】:Snowpipe auto ingest configuration looks like it triggers all pipes 【发布时间】:2020-07-10 16:25:09 【问题描述】:我是 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 是否发送消息以便确定调用哪个管道并将消息散播到该管道? 有没有比我上面使用的更好的方法?感谢您的帮助
【问题讨论】:
【参考方案1】:如果您的阶段包含文件路径,那么当 S3 发送消息表明已添加文件时,Snowflake 将计算出受影响的阶段,因此只有指向该文件夹的管道才会拉入文件。
如果您有三个管道,三个阶段,并且这些阶段指向这些文件夹:
1:blahblah
2:blahblah/db1
3:blahblah/db2
那么当在blahblah/db1
中创建文件时,它将触发管道 1 和 2,但不会触发 3。
【讨论】:
【参考方案2】:当使用 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
【讨论】:
以上是关于Snowpipe 自动摄取配置看起来会触发所有管道的主要内容,如果未能解决你的问题,请参考以下文章