Snowflake cloud data platform Snowpipe接收S3消息,但不转发它

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]:

我们将S3对象创建通知配置为Snowpipe。它接收消息但不转发消息,因此不会加载数据。当我们手动运行COPY INTO语句时,将加载数据

系统$PIPE\U状态的示例输出:

{
    "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状态(“”)
这里的一些其他想法也值得研究:

但是如果你可以分享任何错误,那么其他人可以从那里提供反馈/想法