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 自动摄取配置看起来会触发所有管道的主要内容,如果未能解决你的问题,请参考以下文章

如何对 Snowpipe 自动摄取故障进行故障排除?

来自 S3 最佳实践的 Snowpipe 连续摄取

我们啥时候应该使用 SNOWPIPE?

雪花返回错误“位置 <bucket name> 上的自动摄取管道数不能大于允许的限制:50000”

如何使用带有 Filebeat 模块的自定义摄取管道

Elasticsearch:从零开始到搜索 - 使用 Elasticsearch 摄取管道玩转你的数据