快速入门:在 Amazon S3 中查询数据 - Amazon SageMaker

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

快速入门:在 Amazon S3 中查询数据

用户可以使用SQL扩展程序从 JupyterLab 笔记本运行SQL查询,从而分析存储在 Amazon S3 中的数据。该扩展与 Athena 集成,只需几个额外的步骤即可在 Amazon S3 中启用数据功能。

本节将引导您完成将数据从 Amazon S3 加载到 Athena,然后使用扩展程序查询这些数据的 JupyterLab 步骤。SQL您将创建 Athena 数据源 AWS Glue 和爬虫来索引您的 Amazon S3 数据,配置IAM适当的权限以允许 JupyterLab 访问 Athena,并连接到 Athena 以查询数据。 JupyterLab 完成这几个步骤后,您将能够使用 JupyterLab 笔记本中的SQL扩展程序来分析 Amazon S3 数据。

先决条件
  • 使用具有管理员权限的 AWS Identity and Access Management (IAM) 用户帐户登录 AWS 管理控制台。有关如何注册 AWS 账户和创建具有管理权限的用户的信息,请参阅完成 Amazon SageMaker 先决条件

  • 拥有用于访问 SageMaker Studio 的 SageMaker 域名和用户个人资料。有关如何设置 SageMaker 环境的信息,请参阅使用 Amazon 的快速设置 SageMaker

  • 使用与您的环境 AWS 相同的区域和账户来存储 Athena 查询结果的 Amazon S3 存储桶和文件夹。 SageMaker 有关如何在 Amazon S3 中创建存储桶的信息,请参阅 Amazon S3 文档中的创建存储桶。您需要将此存储桶和文件夹配置为查询输出位置。

第 1 步:为您的 Amazon S3 数据设置 Athena 数据源 AWS Glue 和爬虫

按照以下步骤在 Amazon S3 中为数据编制索引,并在 Athena 中创建表。

注意

为避免来自不同 Amazon S3 位置的表名发生冲突,请为每个位置创建单独的数据源和爬虫。除非有前缀,否则每个数据源都会创建一个以包含它们的文件夹命名的表。

  1. 配置查询结果位置

    1. 前往 Athena 控制台:. https://console.aws.amazon.com/athena/

    2. 从左侧菜单中选择 “工作组”。

    3. 点击primary工作组的链接,然后选择编辑

    4. 查询结果配置部分,输入输出目录的 Amazon S3 路径,然后选择保存更改

  2. 为您的 Amazon S3 数据创建 Athena 数据源

    1. 从 Athena 控制台的左侧菜单中,选择数据源,然后选择创建数据源。

    2. 选择 S3- AWS Glue 数据目录,然后选择 “下一步”。

    3. 在此帐户中保留默认AWS Glue 的数据目录,选择在中创建爬虫, AWS Glue然后在中 AWS Glue创建。这将打开 AWS Glue 控制台。

  3. 用于抓 AWS Glue 取您的数据源

    1. 输入新抓取工具的名称和描述,然后选择 “下一步”。

    2. 在 “数据源” 下,选择 “添加数据源”。

      1. 如果包含您的数据的 Amazon Amazon S3 存储桶与 AWS 您的 SageMaker 环境位于不同的账户中,请选择 S3 数据的位置在不同的账户中。

      2. 在 Amazon S3 中输入数据集的路径。例如:

        s3://dsoaws/nyc-taxi-orig-cleaned-split-parquet-per-year-multiple-files/ride-info/year=2019/
      3. 保留所有其他默认值,然后选择添加 Amazon S3 数据源。您应该会在数据源表中看到一个新的 Amazon S3 数据源。

      4. 选择下一步

    3. 配置抓取工具访问您的数据的IAM角色。

      注意

      每个角色的作用域都限定到您指定的数据源。重复使用角色时,请编辑JSON策略以添加要授予访问权限的任何新资源或为此数据源创建新角色。

      1. 选择 “创建新IAM角色”。

      2. 输入角色的名称,然后选择 “下一步”。

  4. 为表创建或选择数据库

    1. 如果您在 Athena 中没有现有数据库,请选择添加数据库,然后选择创建新数据库。

    2. 返回之前创建抓取工具选项卡,在 “输出配置” 中,选择 “刷新” 按钮。现在,您应该会在列表中看到新创建的数据库。

    3. 选择您的数据库,在表名前缀中添加可选前缀,然后选择下一步

      注意

      对于前面的示例,您的数据所在的位置s3://dsoaws/nyc-taxi-orig-cleaned-split-parquet-per-year-multiple-files/ride-info/year=2019/,添加前缀taxi-ride-将创建一个名为的表taxi-ride-year_2019。添加前缀有助于防止在多个数据位置具有相同名称的文件夹时发生表名冲突。

  5. 选择 “创建爬虫”。

  6. 运行您的抓取程序来索引您的数据。等待 Crawler 运行到Completed状态,这可能需要几分钟。

要确保创建了新表,请转至中的左侧菜单, AWS Glue 然后选择数据库,然后选择。现在,您应该会看到一个包含您的数据的新表。

第 2 步:授予 Studio 访问 Athena 的权限

在以下步骤中,您可以向用户个人资料的执行角色授予访问 Athena 的权限。

  1. 检索ARN与您的用户配置文件关联的执行角色

    1. 前往 SageMaker 控制台,https://console.aws.amazon.com/sagemaker/然后在左侧菜单中选择 “域名”。

    2. 关注您的域名的名称。

    3. 用户配置文件列表中,按照您的用户配置文件名称进行操作。

    4. 用户详细信息页面上,复制ARN执行角色的。

  2. 更新您的执行角色的策略

    1. 在 SageMaker控制台的右上角找到您的 AWS 地区和账户 ID。使用这些值和您的数据库名称在文本编辑器中更新以下JSON策略中的占位符。

      { "Version": "2012-10-17", "Statement": [ { "Sid": "GetS3AndDataSourcesMetadata", "Effect": "Allow", "Action": [ "glue:GetDatabases", "glue:GetSchema", "glue:GetTables", "s3:ListBucket", "s3:GetObject", "s3:GetBucketLocation", "glue:GetDatabase", "glue:GetTable", "glue:ListSchemas", "glue:GetPartitions" ], "Resource": [ "arn:aws:s3:::*", "arn:aws:glue:region:account-id:catalog", "arn:aws:glue:region:account-id:database/db-name" ] }, { "Sid": "ExecuteAthenaQueries", "Effect": "Allow", "Action": [ "athena:ListDataCatalogs", "athena:ListDatabases", "athena:ListTableMetadata", "athena:StartQueryExecution", "athena:GetQueryExecution", "athena:RunQuery", "athena:StartSession", "athena:GetQueryResults", "athena:ListWorkGroups", "s3:ListMultipartUploadParts", "s3:ListBucket", "s3:GetBucketLocation", "athena:GetDataCatalog", "s3:AbortMultipartUpload", "s3:GetObject", "s3:PutObject", "athena:GetWorkGroup" ], "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "GetGlueConnectionsAndSecrets", "Effect": "Allow", "Action": [ "glue:GetConnections", "glue:GetConnection" ], "Resource": [ "*" ] } ] }
    2. 进入IAM控制台:,https://console.aws.amazon.com/iam/然后在左侧菜单中选择 “角色”。

    3. 按角色名称搜索您的角色。

      注意

      您可以通过将执行角色的名称分开,'/'然后取最后一个元素,从其 Amazon 资源名称 (ARN) 中检索执行角色名称。ARN例如,在以下的示例中 ARNarn:aws:iam::112233445566:role/SageMakerStudio-SQLExtension-ExecutionRole,执行角色的名称为SageMakerStudio-SQLExtension-ExecutionRole

    4. 点击与您的角色对应的链接。

    5. 在 “权限” 选项卡中,选择添加权限,然后选择创建内联策略

    6. 在 “策略编辑器” 部分中选择JSON格式。

    7. 复制上面的政策,然后选择 “下一步”。确保已将所有account-idregion-name、和db-name替换为它们的值。

    8. 输入策略的名称,然后选择创建策略

步骤 3:在中启用 Athena 默认连接 JupyterLab

在以下步骤中,您可以在 JupyterLab 应用程序default-athena-connection中启用。默认的 Athena 连接允许直接 JupyterLab从 Athena 中SQL运行查询,无需手动创建连接。

启用默认 Athena 连接

  1. 前往的主 SageMaker 机,https://console.aws.amazon.com/sagemaker/然后在左侧菜单中选择 Studio。使用您的域名和用户个人资料启动 Studio。

  2. 选择 JupyterLab 应用程序。

  3. 如果您尚未为 JupyterLab 应用程序创建空间,请选择创建 JupyterLab 空间。输入空间的名称,将该空间设为 “私有”,然后选择 “创建空间”。使用最新版本的 SageMaker分发映像来管理您的空间。

    否则,请选择在空间上运行空间以启动 JupyterLab 应用程序。

  4. 启用 Athena 默认连接:

    1. 在 JupyterLab 应用程序中,导航到顶部导航栏的 “设置” 菜单,然后打开 “设置编辑器” 菜单。

    2. 选择 “数据发现”。

    3. 选中 “启用默认 Athena 连接” 复选框。

    4. 在您的 JupyterLab 应用程序中,选择左侧导航窗格中的SQL扩展程序图标 ( Purple circular icon with a clock symbol representing time or scheduling. ) 以打开SQL扩展程序。

    5. 选择数据发现面板底部的刷新按钮。您应该default-athena-connection在连接列表中看到。

步骤 4:使用SQL扩展程序从 JupyterLab 笔记本查询 Amazon S3 中的数据

您已准备好在 JupyterLab 笔记本SQL中使用查询数据。

  1. 打开连接default-athena-connection,然后AWS DataCatalog

  2. 导航到您的数据库,然后选择其右侧的三个点图标 ( SQL extension three dots icon. )。选择 “在笔记本中查询”。

    这会自动在笔记本单元格中 JupyterLab 填充相关的%%sm_sql魔法命令以连接到数据源。它还添加了一个示例SQL语句来帮助您立即开始查询。

    注意

    在运行SQL查询之前,请务必将扩展程序加载到顶部的单元格中。

    您可以使用扩展程序的自动完成和突出显示功能进一步完善SQL查询。SQL JupyterLab SQL扩展程序的编辑器功能有关使用SQL扩展SQL编辑器的更多信息,请参阅。