【问题标题】:Snowflake to/from S3 Pipeline Recommendations for ETL architecture雪花到/来自 ETL 架构的 S3 管道建议
【发布时间】:2020-06-13 23:51:02
【问题描述】:

我正在尝试构建一个管道,将数据从 Snowflake 发送到 S3,然后从 S3 发送回 Snowflake(通过 Sagemaker 上的生产 ML 模型运行它之后)。我是数据工程的新手,所以我很想听听社区的推荐路径是什么。管道要求如下:

  1. 我希望安排每月的工作。我是在 AWS 中还是在 Snowflake 端指定?
  2. 对于初始拉取,我想从 Snowflake 查询 12 个月的数据。但是,对于任何后续拉动,我只需要最后一个月,因为这应该是每月的管道。
  3. 所有月度数据拉取应存储在自己的 S3 子文件夹中,例如 query_01012020,query_01022020,query_01032020 等。
  4. 应在 ML 模型成功对 Sagemaker 中的数据进行评分后触发从 S3 加载回指定 Snowflake 表的数据。
  5. 我想监控 ML 模型在生产中的性能,以了解模型是否正在降低其准确性(可能是一些类似校准的图表)。
  6. 我想在管道中出现问题时实时收到任何错误通知。

我希望您能够指导我完成这项工作的相关文档/教程。我非常感谢您的指导。

非常感谢。

【问题讨论】:

    标签: amazon-web-services amazon-s3 etl pipeline snowflake-cloud-data-platform


    【解决方案1】:

    Snowflake 没有 Airflow 或 Oozie 等任何编排工具。因此,您需要使用或考虑使用一些 Snowflake 合作伙伴生态系统工具,例如 Mattilion 等。或者,您可以使用 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.
    

    Ans:您可以提取任何大小的数据,也可以通过 SF 编写一些脚本来支持它,但需要对调用进行编程。

    All monthly data pulls should be stored in own S3 subfolder like this query_01012020,query_01022020,query_01032020 etc.
    

    Ans:可以通过 AWS SNS(或 REST API)+ SnowPipe 向 Snowflake 提供数据,但反之亦然。

    应在 ML 模型成功对 Sagemaker 中的数据进行评分后触发从 S3 加载回指定 Snowflake 表的数据。

    Ans:这可以通过 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).
    

    Ans:无法通过 Snowflake 实现。

    【讨论】:

      【解决方案2】:

      我会这样处理问题:

      在一个临时表中保存 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');
      

      一旦你的机器学习工作完成,像这样将数据导入雪花:

      -- 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 等等。

      对于日程安排,我建议:

      1. 将您的代码放在 shell 脚本或 python 脚本中,并安排它每月运行一次。

      2. 使用 Snowflake 任务如下:

      每月创建任务_task_1 仓库 = SCHEDULE = '使用 CRON 0 0 1 * * 美国/芝加哥' 作为 在此处插入您的创建临时表查询

      每月创建任务_task_2 仓库 = 在monthly_task_1之后 作为 在此处插入您的 S3 导出查询

      您可以在此处阅读有关雪花任务的更多信息:https://docs.snowflake.com/en/sql-reference/sql/create-task.html

      为了在 ML 工作完成后将结果从 S3 导入到 Snowflake,您可以在您的 ML 代码中添加几行(可能是在 Python 中)以执行复制到上面编写的 --Import to S3 的代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-13
        • 2022-01-13
        • 2021-04-13
        • 2016-06-06
        • 2013-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多