如何对 Snowpipe 自动摄取故障进行故障排除?
Posted
技术标签:
【中文标题】如何对 Snowpipe 自动摄取故障进行故障排除?【英文标题】:How to troubleshoot Snowpipe auto ingest failures? 【发布时间】:2020-08-13 10:02:50 【问题描述】:我正在尝试从 AWS S3 存储桶加载所有新文件,具体取决于其到两个 Snowflake 表的路径,但即使使用一个表我也无法成功。 我试过的:
创建了一个阶段:
CREATE or replace STAGE DATA_SCIENCE.INFRA.jobs_resource_usage URL = 's3://om/jobs-resource-usage/'
storage_integration = om_s3 FILE_FORMAT=(TYPE='JSON');
创建了一个表:
create or replace TABLE DATA_SCIENCE.INFRA.job_metrics (
job_name STRING,
build_number INT,
cpu_perc INT,
mem BIGINT,
"timestamp" TIMESTAMP
);
创建了一个管道:
create or replace pipe DATA_SCIENCE.INFRA.job_metrics auto_ingest=true as
copy into DATA_SCIENCE.INFRA.job_metrics
from (select
REGEXP_SUBSTR(METADATA$FILENAME,'job_name=(.*)/',1, 1, 'e', 1),
REGEXP_SUBSTR(METADATA$FILENAME,'build_number=([0-9]+)',1, 1, 'e', 1),
$1:cpu_perc::INT,
$1:mem::BIGINT,
$1:timestamp::TIMESTAMP
from @DATA_SCIENCE.INFRA.jobs_resource_usage/metrics/);
将 SQS ARN 添加到存储桶的事件中:
前缀:jobs_resource_usage/ 后缀:.json 发送至:SQS 队列 SQS 队列 ARN:select parse_json(SYSTEM$PIPE_STATUS('DATA_SCIENCE.INFRA.job_metrics')):notificationChannelName;
返回的队列
舞台工作,因为我可以列出文件:
ls '@DATA_SCIENCE.INFRA.jobs_resource_usage/metrics/job_name=Ingest job';
返回 S3 文件名,如(包括一个示例以查看其格式):
s3://om/jobs-resource-usage/metrics/job_name=Ingest job/build_number=144.json
我可以通过以下方式成功手动加载文件:
copy into DATA_SCIENCE.INFRA.job_metrics
from (select
REGEXP_SUBSTR(METADATA$FILENAME,'job_name=(.*)/',1, 1, 'e', 1),
REGEXP_SUBSTR(METADATA$FILENAME,'build_number=([0-9]+)',1, 1, 'e', 1),
$1:cpu_perc::INT,
$1:mem::BIGINT,
$1:timestamp::TIMESTAMP
from @DATA_SCIENCE.INFRA.jobs_resource_usage/metrics/)
files=('job_name=Ingest job/build_number=144.json');
但是,管道不加载任何内容。 如果我做一个
select SYSTEM$PIPE_STATUS('DATA_SCIENCE.INFRA.job_metrics');
我可以看到它收到了通知消息:
"executionState":"RUNNING","pendingFileCount":0,"notificationChannelName":"arn:aws:sqs:us-west-2:494544507972:sf-snowpipe-concealed","numOutstandingMessagesOnChannel":7,"lastReceivedMessageTimestamp":"2020-08-13T09:59:21.107Z"
但我看不到任何lastForwardedMessageTimestamp
条目,这表明路径匹配存在问题?
我尝试使用前导斜杠进行多种排列,并将文件直接上传到metrics
路径,没有任何空格或=
s,但没有成功。
我做错了什么,我怎么知道这里有什么问题?
【问题讨论】:
这里可以发一条json记录吗 嗨 - 您是否尝试过此处雪花文档的“重要”部分中列出的 7 个步骤:docs.snowflake.com/en/sql-reference/sql/… 【参考方案1】:查看指向 S3 存储桶的阶段。具有不同粒度级别的多个阶段可能会导致消息队列的读取冲突。如果管道正常工作并看到消息,您将看到您提到的 lastForwardedMessageTimestamp。如果您没有看到,您的队列中没有任何消息,或者管道没有正确读取队列,或者存在冲突并且其他东西首先读取队列消息。您是否有权检查您的 SQS 队列日志以确保消息首先显示并且您的队列正在工作?如果您的队列工作正常,我会仔细检查您是否拥有正确设置队列的权限,并且您的集成和队列中没有多个阶段发生冲突。
【讨论】:
原来舞台路径有问题,把_换成-。所以这里的关键是缺少 lastForwardedMessageTimestamp。【参考方案2】:看起来您可能在管道创建语句的末尾缺少 file_format = (type = 'JSON')
此外,根据文档,您可能还需要在管道定义中设置 aws_sns_topic='
【讨论】:
以上是关于如何对 Snowpipe 自动摄取故障进行故障排除?的主要内容,如果未能解决你的问题,请参考以下文章