Snowflake cloud data platform Snowpipe接收S3消息,但不转发它
我们将S3对象创建通知配置为Snowpipe。它接收消息但不转发消息,因此不会加载数据。当我们手动运行COPY INTO语句时,将加载数据 系统$PIPE\U状态的示例输出:Snowflake cloud data platform Snowpipe接收S3消息,但不转发它,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我们将S3对象创建通知配置为Snowpipe。它接收消息但不转发消息,因此不会加载数据。当我们手动运行COPY INTO语句时,将加载数据 系统$PIPE\U状态的示例输出: { "executionState": "RUNNING", "lastReceivedMessageTimestamp": "2020-03-18T14:14:48.69Z", "notificationChannelName": "arn:aws:sqs:us-east-1:[clipped]:
{
"executionState": "RUNNING",
"lastReceivedMessageTimestamp": "2020-03-18T14:14:48.69Z",
"notificationChannelName": "arn:aws:sqs:us-east-1:[clipped]:[clipped]",
"numOutstandingMessagesOnChannel": 0,
"pendingFileCount": 0
}
Per:
如果从消息队列接收到事件消息但未转发到管道,则创建新数据文件的Blob存储路径与雪花阶段和管道定义中指定的组合路径之间可能不匹配
但是stage中的路径是bucket名称,后跟/
,因此bucket中创建的任何文件都应该触发加载。而且文件名绝对是新的和唯一的(由Kinesis Firehose创建)。阶段定义:
CREATE STAGE if not exists my_stage URL = 's3://my-stage/'
CREDENTIALS = (AWS_KEY_ID = 'XXX' AWS_SECRET_KEY = 'XXX');
create or replace pipe my_schema.my_data_pipe
auto_ingest=true
aws_sns_topic='arn:aws:sns:us-east-1:[my-account]:my-s3-create-event'
as
copy into my_schema.my_table
from @my_schema.my_pipe
file_format=(type='PARQUET' compression='SNAPPY')
match_by_column_name=case_insensitive;
管道定义:
CREATE STAGE if not exists my_stage URL = 's3://my-stage/'
CREDENTIALS = (AWS_KEY_ID = 'XXX' AWS_SECRET_KEY = 'XXX');
create or replace pipe my_schema.my_data_pipe
auto_ingest=true
aws_sns_topic='arn:aws:sns:us-east-1:[my-account]:my-s3-create-event'
as
copy into my_schema.my_table
from @my_schema.my_pipe
file_format=(type='PARQUET' compression='SNAPPY')
match_by_column_name=case_insensitive;
还请注意,当我们刷新管道时,数据将加载:alterpipe my\u schema.my\u pipe refresh代码>
还有什么可能导致Snowpipe无法转发S3 create消息并触发加载?您在pipe create sql中的复制不正确,请更改为:
copy into my_db. my_schema.my_table
from @my_db. my_schema.my_stage
用SNS设置滑雪管有点复杂。请确保遵循以下步骤:
这仍然不起作用,请联系雪花支持
注意,ALTER PIPE REFRESH不使用S3通知加载数据。它只是列出stage中的所有文件,并对所有此类文件执行COPY 您可以尝试运行以下操作(如果您还没有这样做),以查看雪花侧是否列出了任何错误:
SYSTEM$PIPE_STATUS( '<pipe_name>' )
系统$PIPE\u状态(“”)
这里的一些其他想法也值得研究:
但是如果你可以分享任何错误,那么其他人可以从那里提供反馈/想法