使数据保持最新(Amazon Athena、亚马逊 S3,Amazon Glue) - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使数据保持最新(Amazon Athena、亚马逊 S3,Amazon Glue)

此示例项目演示了如何使用查询目标表以获取当前数据。Amazon Glue目录,然后使用 Amazon Athena 使用其他来源的新数据对其进行更新。部署此示例项目将创建一个Amazon Step Functions状态机、Amazon S3 存储桶、Amazon Athena 查询和Amazon Glue调用数据目录。

在此项目中,Step Functions 使用状态机来调用。Amazon Glue目录用于验证 Amazon S3 存储桶中是否存在目标表,如果找不到表,将创建一个目标表。然后将运行 Athena 查询,以便从不同的数据源向目标表中添加行:首先查询目标表以获取最近的日期,然后查询源表以获取更新的数据,然后将其插入到目标表中。

创建状态机并预置资源

  1. 打开Step Functions 操作然后选择创建状态机.

  2. 选择Step Functions 的示例项目,然后选择将数据保持最新.

    此时将显示状态机 Code (代码)Visual Workflow (可视工作流程)

    
            保持数据更新工作流程。
  3. 选择下一步

    此时将显示 Deploy resources (部署资源) 页面,其中列出了将创建的资源。对于本示例项目,资源包括:

    • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon Glue调用数据目录

    • 一个 Amazon S3 存储桶

    • 查询 Amazon Athena

  4. 选择 Deploy Resources (部署资源)

    注意

    创建这些资源和相关 IAM 权限可能需要长达 10 分钟的时间。当显示 Deploy resources (部署资源) 页面时,您可打开 Stack ID (堆栈 ID) 链接以查看正在预置的资源。

启动新的执行

  1. New execution 页面上,输入执行名称 (可选),然后选择 Start Execution (开始执行)

  2. (可选)为了帮助识别您的执行,您可以在输入执行名称。如果未输入 ID,Step Functions 将自动生成一个唯一 ID。

    注意

    Step Functions 允许您创建包含非 ASCII 字符的状态机、执行和活动名称。这些非 ASCII 名称不适用于 Amazon CloudWatch。为确保您可以跟踪 CloudWatch 指标,请选择仅使用 ASCII 字符的名称。

  3. (可选)您可以转到 Step Functions (Step Functions) 上新创建的状态机。控制面板,然后选择新的执行.

  4. 执行完成后,您可以在 Visual workflow (可视工作流) 上选择状态,并浏览 Step details (步骤详细信息) 下的 Input (输入)Output (输出)

示例状态机代码

此示例项目中的状态机与 Amazon S3 集成。Amazon Glue和 Amazon Athena 将参数直接传递给这些资源。

浏览此示例状态机以了解 Step Functions 如何控制 Amazon S3Amazon Glue和 Amazon Athena(通过将您 ARN)连接到Resource字段,然后通过Parameters转到服务 API。

有关 Amazon Step Functions 如何控制其他 Amazon 服务的更多信息,请参阅将 Amazon Step Functions 与其他服务一起使用

{ "Comment": "An example demonstrates how to use Athena to query a target table to get current data, then update it with new data from other sources.", "StartAt": "Get Target Table", "States": { "Get Target Table": { "Type": "Task", "Parameters": { "DatabaseName": "<GLUE_DATABASE_NAME>", "Name": "target" }, "Catch": [ { "ErrorEquals": [ "Glue.EntityNotFoundException" ], "Next": "Create Target Table" } ], "Resource": "arn:aws:states:::aws-sdk:glue:getTable", "Next": "Update Target Table" }, "Create Target Table": { "Resource": "arn:aws:states:::athena:startQueryExecution.sync", "Parameters": { "QueryString": "<ATHENA_QUERYSTRING>", "WorkGroup": "<ATHENA_WORKGROUP>" }, "Type": "Task", "Next": "Update Target Table" }, "Update Target Table": { "Resource": "arn:aws:states:::athena:startQueryExecution.sync", "Parameters": { "QueryString": "<ATHENA_QUERYSTRING>", "WorkGroup": "<ATHENA_WORKGROUP>" }, "Type": "Task", "End": true } } }

IAM 示例

此示例Amazon Identity and Access Management示例项目生成的 (IAM) 策略包括执行状态机和相关资源所需的最小权限。我们建议您在 IAM 策略中仅包含这些必需的权限。

AthenaStartQueryExecution

"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:startQueryExecution", "athena:stopQueryExecution", "athena:getQueryExecution", "athena:getDataCatalog" ], "Resource": [ "arn:aws:athena:us-east-1:946551482283:workgroup/stepfunctions-athena-sample-project-workgroup-26ujlyawxg", "arn:aws:athena:us-east-1:946551482283:datacatalog/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload", "s3:CreateBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:UpdateDatabase", "glue:DeleteDatabase", "glue:CreateTable", "glue:UpdateTable", "glue:GetTable", "glue:GetTables", "glue:DeleteTable", "glue:BatchDeleteTable", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition", "glue:DeletePartition", "glue:BatchDeletePartition" ], "Resource": [ "arn:aws:glue:us-east-1:946551482283:catalog", "arn:aws:glue:us-east-1:946551482283:database/*", "arn:aws:glue:us-east-1:946551482283:table/*", "arn:aws:glue:us-east-1:946551482283:userDefinedFunction/*" ] }, { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": [ "*" ] } ] }

有关在将 Step Functions 与其他一起使用时如何配置 IAM 的信息Amazon服务,请参阅针对集成服务的 IAM 策略.