我正在尝试建立一个管道,该管道将数据从Snowflake发送到S3,然后从S3发送回Snowflake(在Sagemaker上通过生产ML模型运行后再发送)。我是数据工程的新手,所以我很想听听社区中推荐的路径。管道要求如下:
query_01012020,query_01022020,query_01032020
等。我希望您能够为此目的在相关文档/教程上指导我。我真的很感谢指导。
非常感谢。
答案 0 :(得分:0)
Snowflake没有任何编排工具,例如Airflow或Oozie。因此,您需要使用或考虑使用某些Mattfion等Snowflake Partner Ecosystem工具。或者,您可以使用Spark或python或任何其他可以使用JDBC / ODBC / Python连接雪花的编程语言来构建自己的端到端流。连接器。
要将数据实时从s3馈送到雪花,您可以使用AWS SNS服务并调用SnowPipe将数据馈送到Snowflake Stage环境,并通过ETL流程将其继续传输以供使用。
回答您的每个问题
I am looking to schedule a monthly job. Do I specify such in AWS or on the Snowflake side?
在雪花中是不可能的,您必须通过AWS或其他一些工具来完成。
For the initial pull, I want to query 12 months' worth of data from Snowflake. However, for any subsequent pull, I only need the last month since this should be a monthly pipeline.
回答:您可以提取任意大小的数据,也可以通过SF提供一些脚本来支持该数据,但是需要对调用进行编程。
All monthly data pulls should be stored in own S3 subfolder like this query_01012020,query_01022020,query_01032020 etc.
回答:可以通过AWS SNS(或REST API)+ SnowPipe向Snowflake馈送数据,但反之亦然。
在ML模型在Sagemaker中成功对数据进行评分之后,应触发从S3返回指定的Snowflake表的数据加载。
回答:这可以通过AWS SNS + SnowPipe实现。
I want to monitor the performance of the ML model in production overtime to catch if the model is decreasing its accuracy (some calibration-like graph perhaps).
答案:不可能通过雪花。
答案 1 :(得分:0)
我会这样处理:
在一个临时表中保存12个月的数据(我确定您知道所有必需的查询,就在您问了教程之后,我认为这对您和其他人都会有所帮助)
-- Initial Pull Hold 12 months of Data ....
Drop table if exists <TABLE_NAME>;
Create Temporary Table <TABLE_NAME> as (
Select *
From Original Table
Where date_field between current_date -365 and Current_date
);
-- Export data to S3 ...
copy into 's3://path/to/export/directory'
from DB_NAME.SCHEMA_NAME.TABLE_NAME
file_format = (type = csv field_delimiter = '|' skip_header = 0)
credentials=(aws_key_id='your_aws_key_id' aws_secret_key='your_aws_secret_key');
一旦完成了ML的工作,就可以像这样将数据导入雪花:
-- Import to S3 ...
copy into DB_NAME.SCHEMA_NAME.TABLE_NAME
from 's3://path/to/your/csv_file_name.csv'
credentials=(aws_key_id='your_aws_key_id' aws_secret_key='your_aws_secret_key')
file_format = (type = csv field_delimiter = '|' skip_header = 1);
我不确定雪花是否发布了ML内容以及您将如何在最终使用ML等。
对于调度,我建议:
将您的代码放置在Shell脚本或python脚本中,并将其安排为每月运行一次。
按如下所示使用Snowflake任务:
创建任务month_task_1 仓库= 时间表='使用CRON 0 0 1 * *美国/芝加哥' 如 在此处插入创建临时表查询;
创建任务month_task_2 仓库= 在monthly_task_1之后 如 在此处插入您的S3导出查询;
您可以在此处了解有关雪花任务的更多信息:https://docs.snowflake.com/en/sql-reference/sql/create-task.html
要在完成ML填充后将结果从S3导入到Snowflake,可以在ML代码中添加几行(大概在Python中),以将副本执行到--Import到上面编写的S3的代码中。