亚马逊AWS官方博客

使用 Amazon Athena 从您的 SageMaker 笔记本运行 SQL 查询

Original URL:https://aws.amazon.com/blogs/machine-learning/run-sql-queries-from-your-sagemaker-notebooks-using-amazon-athena/

自从出现互联网以后,数据的体量、增速和类型就不断地增加。很多企业面临的问题在于,如何管理并理解此“大数据”以得到最理想的回报。企业内部的竖井、持续产生各种格式的数据和不断变化的技术面貌让收集、存储、分享,以及对数据进行分析和可视化变得困难重重。现在的问题是:您要如何构建稳健的数据管道,连接至数据仓储并为数据科学家与工程师们获取有关数据见解提供平台?

很多组织开始投资一个中心化的数据仓储,并且逐渐意识到使用 Amazon Simple Storage Service (S3) 作为其数据湖的优点。为数据湖构建数据管道,涉及到数据发现过程,其中包括识别数据格式和结构、对数据编订目录,以及理解元数据以构建表定义,提供数据查询。

本博文将引导您完成构建数据管道所需的全部步骤—从使用 AWS Glue,为您在 Amazon S3 中的数据创建元数据爬取程序,进行数据发现与编目;到使用 Amazon Athena 检索表数据,以及通过 Amazon SageMaker Notebooks查询 Athena 表。

Amazon SageMaker 是一个端到端机器学习 (ML) 平台,您可以用来构建、训练与部署机器学习模型。这项高度模块化的服务让您可以单独使用其中的每一个组件。使用 Amazon SageMaker 笔记本模块能够提升与数据交互的效率,而不会因为需要将数据下载到本地而产生延迟。我们将向您演示如何使用 Amazon SageMaker 的 Jupyter 笔记本组件集成 Athena,并进行数据处理。

在本博文的示例中,我们使用来自 Airline On-Time Performance 的 2008 年数据集。此数据集由从 1987 年 10 月到 2008 年 4 月间美国境内所有商业航班的抵达与出发详细信息组成。我们上传该数据到 Amazon S3,供 AWS Glue 和 Athena,以及随后的 Amazon SageMaker 使用。

使用 AWS Glue 发现数据

AWS Glue 的数据目录功能和内置的Amazon S3集成简化了识别数据与数据结构定义自动获取。在数据目录中使用 AWS Glue Crawler程序,您可以遍历您存储在 Amazon S3 的数据,并且在您的数据目录中自动创建和维护数据字典。

编制数据目录的第一步是定义您的数据库。

  1. 在 AWS Glue 控制台中,选择添加数据库。填入数据库名称并选择“创建”。
  2. 接下来,创建一个 AWS Glue 元数据爬取程序以添加表到数据库。Crawler程序会爬取 Amazon S3 中的数据,并添加表定义到数据库。
  3. 选择一个数据存储。数据源可以基于S3,JDBC和DynamoDB等,填入对应的数据源的 URL。然后选择下一步
  4. 针对 IAM 角色,您将需要创建一个新角色,它用于为AWS Glue提供访问 Amazon S3 中文件或其他数据源的权限,并且具有对数据进行解密的权限。
  5. 选择下一步,设置运行频率为“按需运行”。
  6. 然后选择您在第一步中创建的数据库作为元数据资料库。
  7. 检查步骤,然后选择完成。Crawler程序已准备就绪,可以运行。选择立即运行。这将会为您在 Amazon S3 中的数据创建表定义。

使用 Athena 查询 Amazon S3 数据

Athena 让您可以使用标准 SQL 接口查询 Amazon S3 内的数据。通过使用 AWS Glue 数据目录,您可以创建交互式查询以及执行后续业务所需的任何数据操作。Amazon Athena 控制台会自动反映 AWS Glue 目录中的数据库和表。只需登录到 AWS 管理控制台,导航到 Amazon Athena 控制台,您就可以在查询编辑器中看到您之前创建的数据库和表。

确保选择右上角的设置按钮并留意转储位置。Amazon Athena 会在 转储的S3 桶中保存查询结果,以便 Amazon SageMaker 在后续步骤中查询 Athena 时使用。

使用 Amazon SageMaker 进行数据分析与管理

在此数据管道中的最后一步是,使这些表定义可用 于Amazon SageMaker 中的 Jupyter 笔记本实例。Jupyter 笔记本被数据科学家普遍用于对数据进行可视化、开展统计分析、执行数据操作,以及使数据随时可被用于机器学习。

  1. 在 Amazon SageMaker 控制台中,选择创建笔记本实例
  2. 在笔记本实例设置下方填充笔记本实例名称,为 Amazon SageMaker 中的笔记本实例选择实例类型和IAM角色,以便与 Amazon S3 进行交互。SageMaker 执行角色需要有对 Athena,数据所在的 S3 存储桶以及 KMS(若已加密)进行操作的必要权限。
  3. 在创建笔记本实例和将状态更改为 InService 时耐心等待。
  4. 选择打开链接,此操作将在单独的浏览器窗口打开笔记本界面。
  5. 单击新建,以便在 Jupyter 中创建新的笔记本。Amazon SageMaker 为 Jupyter 提供多个内核,包括支持 Python 2 和 3、MXNet、TensorFlow 和 PySpark 的内核。选择 Python 作为此练习的内核,它有内置的 Pandas 库。在笔记本内,执行以下命令以安装 Athena JDBC 驱动程序。PyAthena 是适用于 Amazon Athena JDBC 驱动程序的 Python DB API 2.0 (PEP 249) 合规客户端。
    import sys
    !{sys.executable} -m pip install PyAthena

  6. 在安装 Athena 驱动程序以后,您可以使用 JDBC 连接以连接至 Athena 并生成 Pandas 数据框。数据科学家对数据的操作通常可被分为多个阶段:修整与清洗数据、对其分析和建模、然后将分析结果整理到适合图表展示的格式。Pandas 是适用于所有这些任务的理想工具。
    from pyathena import connect
    import pandas as pd
    conn = connect(s3_staging_dir='<ATHENA QUERY RESULTS LOCATION>',
                   region_name='<YOUR REGION, for example, us-west-2>')
    
    df = pd.read_sql("SELECT * FROM athenaquery.<YOUR TABLE NAME> limit 8;", conn)
    df

结论

本博文中描述的解决方案提供了一种对传入数据存储的数据进行编目的自动化方式,并提供了数据操作和分析能力。此外,此场景为特征工程、构建、训练和评价更多机器学习模型奠定了基础,从而深入洞察您的数据并产出更有价值的业务成果。


关于作者

Anjana Kandalam 是位于纽约的 Amazon Web Services 解决方案架构师。 她与金融垂直行业的企业客户合作,帮助他们使用基于云的技术对标业务目标,以实现无限可能。她喜欢旅游,热爱和孩子们一起参加户外活动。