繁体   English   中英

AWS Redshift数据处理

[英]AWS Redshift Data Processing

我正在与一家小公司合作,该公司目前将所有应用数据存储在AWS Redshift集群中。 我的任务是对Redshift集群中的数据进行一些数据处理和机器学习。

我需要做的第一项任务需要基于一些相当简单的SQL逻辑将该集群中现有数据的一些基本转换为一些新表。 在MSSQL环境中,我只需将所有逻辑放入参数化存储过程中,并通过SQL Server代理作业进行调度。 但是,sprocs似乎不是Redshift中的东西。 我将如何创建SQL作业并将其安排为在AWS环境中每晚运行(例如)?

我的另一项任务涉及开发机器学习模型(在Python中)并在Redshift数据库中对记录进行评分。 如果计划是从Redshift集群中提取数据,对其进行评分,然后将其插入到同一集群上的新表中,那么托管我的python逻辑并进行数据处理的最佳方法是什么? 好像我可以启动EC2实例,在那里托管我的python脚本,也在那里进行处理,并安排脚本通过cron运行?

我看到大量的AWS(和非AWS)产品看起来可能与它们相关(AWS Glue / Data Pipeline / EMR),但有很多让我有点不知所措。 在此先感谢您的帮助!

ETL

Amazon Redshift不支持存储过程。 此外,我应该指出,存储过程通常是一件坏事,因为您将逻辑放入存储层,这使得将来很难迁移到其他解决方案。 (我知道许多Oracle客户已经锁定自己无法改变技术!)

您应该在Redshift外部运行ETL逻辑,只需使用Redshift作为数据库。 这可以像运行使用psql调用Redshift的脚本一样简单,例如:

`psql <authentication stuff> -c 'insert into z select a, b, from x'`

(使用pssh v8,Redshift所基于的。)

或者,您可以使用更复杂的ETL工具,例如AWS Glue (目前不在每个地区)或第三方工具,如Bryte

机器学习

是的,您可以在EC2实例上运行代码。 如果它很小,您可以使用AWS Lambda(最长5分钟运行时)。 许多ML用户喜欢在Amazon EMR上使用Spark。 这取决于您需要的技术堆栈。

Amazon CloudWatch Events可以安排 Lambda函数,然后可以启动可以进行处理然后自我终止的EC2实例。

确实有很多选择!

在Redshift上运行ETL的2个选项

  1. 创建一些“create table as”类型的SQL,它将把源表作为输入并生成目标(转换表)
  2. 使用ETL工具在数据库外部进行转换。 例如EMR或Glue。

通常,在诸如Redshift之类的MPP环境中,最佳实践是将ETL推送到功能强大的数据库(即选项1)。

只考虑在Redshift之外使用ETL(选项2),其中SQL不是转换的理想工​​具,或者转换可能需要大量的计算资源。

没有内置的计划或编排工具。 如果您需要比cron作业更全面的功能,Apache Airflow是一个不错的选择。

现有数据的基本转换

看来你是一个python开发人员(正如你告诉你正在开发基于Python的ML模型),你可以按照以下步骤进行转换:

  1. 您可以使用boto3( https://aws.amazon.com/sdk-for-python/ )从LAN的任何工作站与Redshift交谈(确保您的IP具有适当的权限)
  2. 您可以使用模仿存储过程的Python编写自己的函数。 在这些函数中,您可以放置​​/收缩转换逻辑。
  3. 或者,您也可以在Redshift中创建函数使用python,它将像存储过程一样。 在此处查看更多信息( https://aws.amazon.com/blogs/big-data/introduction-to-python-udfs-in-amazon-redshift/
  4. 最后,您可以使用Windows scheduler / corn作业来调度Python脚本,使用SQL Server Agent作业等参数

托管我的python逻辑的最佳方式

在我看来,你正在从Redshift读取一些数据,然后创建测试和训练集,最后得到一些预测结果(记录)。如果:

  1. 在任何服务器(LAN)中托管脚本,并使用boto3连接到Redshift。 如果您需要通过Internet传输大量行,则可以选择同一区域中的EC2。 在ad-hoc基础上启用EC2,完成工作并禁用它。 这将具有成本效益。 您可以使用AWS框架来完成。 我使用.Net框架完成了这项工作。 我假设boto3确实有这种支持。
  2. 如果结果集相对较小,则可以直接将它们保存到目标红移表中
  3. 如果结果集较大,请将它们保存为CSV(有几个Python库),如果需要任何中间计算,则使用copy命令将行上载到临时表中。 如果没有,请将它们直接上传到目标表中。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM