写点什么

在 Amazon QuickSight 中使用 Athena 数据连接器可视化 DynamoDB 数据

  • 2022 年 4 月 20 日
  • 本文字数:2890 字

    阅读完需:约 9 分钟

声明:

本文转自 DEV Community 网站,文章翻译由开发者社区提供;点击下方链接,查看英文原文:


一些历史背景

大概两年前,我开始尝试使用 QuickSight 来解决我就职的公司在 BI 方面遇到的一些问题。相比其他类似工具,QuickSight 能与很多亚马逊云科技数据服务实现一流的集成,并且成本非常低,这些都是我所看重的。借助该服务,我们可以快速构建分析原型和仪表板。然而有个问题我们一直很费解:为何不支持使用 DynamoDB 作为数据源?


我在StackOverflow 咨询了 Hive-mind 如何在 Amazon Quicksight 中对 DynamoDB 数据进行可视化,这已经成为该平台上获得支持最多的 QuickSight 提问,因为大家都需要这样的功能,但一直没得到解答……直到最近。


大部分变通的解决方案都需要将 DynamoDB 数据导出(例如复制)到其他位置,例如 S3 或 RDS,随后即可作为数据源加入 QuickSight。最终,我们创建了一个 Glue 计划作业,借此将 DynamoDB 数据移动到 S3。随后使用 AWS Glue Crawler 爬取 S3 数据并以 Amazon Athena 表的形式作为数据集加入 QuickSight。这种方法有效,但实际上需要更多定制化的基础设施,并且也无法直接进行实时查询。


2019 年底,亚马逊云科技宣布用户将可以通过 Amazon Athena 新增的联合查询功能查询任何数据源。这个功能很酷,他们甚至通过示意图展示了查询 DynamoDB 数据的概念,但这需要我们自行开发并维护自己的连接器,并且该功能当时还是预览版,Amazon QuickSight 的集成也尚未进行更新,无法用到 Athena 的这项新功能。


2020 年 3 月,我发现Amazon Athena 公布了一个适用于 DynamoDB 的预构建数据连接器。这让我很激动,因为我终于可以在 Athena 中快速设置一个数据连接器并借此真正查看和查询 DynamoDB 数据,同时还不需要编写任何自定义代码。但该功能依然是预览版,并且暂时还不支持 QuickSight。


到了一年后,Athena 数据连接器在多个区域正式发布,还提供了第 2 版 Athena 引擎,并且 QuickSight 的集成功能也可以让我们选择所需的 Athena 工作组和数据源。


在 DynamoDB 成为 Amazon QuickSight 中的“一类”数据源之前,这些功能已经足以满足我的需求了。

详细实现过程

使用第 2 版 Athena 引擎所提供的 Athena 数据连接器,我终于能在 QuickSight 中可视化 DynamoDB 数据,并且不需要创建任何定制资源,也无需将数据复制到另一个数据源中。

先决条件/假设

  • 你希望将 DynamoDB 表中的数据通过 QuickSight 进行可视化

  • 你可以访问自己账户 IAM 中的用户/角色

  • 创建一个存储桶,用于存储 Athena 查询结果数据以及数据连接器溢出的数据

  • 如果要将其用在生产环境中的大规模查询中,建议为该存储桶添加S3 生命周期策略,以确保该存储桶不会以不受控的方式增大

  • 你使用的区域必须同时支持:

  • Athena 第2 版引擎

  • QuickSight

切换为使用第 2 版 Athena 引擎

如果还没有已经在使用第 2 版 Athena 引擎的 Athena 工作组,请创建一个符合要求的工作组。


截止撰写本文时,默认的主要组依然会使用第 1 版 Athena 引擎,但这些组会在未来某时自动升级到第 2 版。


没人有时间等待亚马逊云科技来升级,因此我们需要提前创建(如果需要的话)工作组并切换到第 2 版 Athena 引擎。


1.在 Athena 控制台中选择 Workgroups 选项卡:



2.确保存在“Athena Engine version 2”工作组并切换至该工作组。



a)你很可能没有这样的工作组,因此需要点击“Create Workgroup”按钮创建一个。几乎所有选项都可以使用默认设置,但一定要选择“Manually choose an engine version now”,并且在创建工作组时,请务必选择“Athena engine version 2 (recommended)”。

创建 DynamoDB Athena 数据连接器

创建了第 2 版 Athena 引擎的工作组后,接下来需要创建我们的 DynamoDB Athena 数据连接器了。

1.打开 Athena 控制台的 Data Sources 选项卡,选择“Connect data source”按钮。



2.在 Data Sources 向导的第一步中选择“Query a data source”选项,随后选择“Amazon DynamoDB”并点击下一步。


3.第二步和最后一步中,亚马逊云科技需要我们指定连接器 Lambda。该 Lambda 尚不存在,因此我们需要点击“Configure new AWS Lambda function”按钮进行部署。


点击该按钮会打开一个新窗口并显示 Lambda 控制台,我们可以在这里部署预构建的 AthenaDynamoDBConnector 应用程序。


b)在 Application 设置下,至少需要设置 SpillBucket 和 AthenaCatalogName 参数,因为它们不包含任何默认值。



c)点击 Deploy。


d)该 Lambda 部署完成后,重新回到 Athena 控制台窗口。


4.至此我们的 AthenaDynamoDBConnector 函数已经部署,点击“Choose Lambda function”下拉菜单列表旁边的刷新按钮,随后应该能看到刚才部署的 Lambda 函数。选择该函数,为分类输入一个名称,点击“Connect”按钮。


5.至此我们就应该可以通过为资源设置的数据源和分类名称,使用 Athena 查询 DynamoDB 数据了。



为 QuickSight IAM 角色分配 Lambda 权限

Athena 数据连接器需要调用 Lambda 来查询并返回 DynamoDB 数据,因此我们需要为 QuickSight 的服务角色提供调用 Lambda 函数的权限。


1.打开 IAM 控制台并选择“Roles”。


2.查找并点击 QuickSight 服务角色。角色名称应该以类似“aws-quicksight-service-role”的字样开头,例如“aws-quicksight-service-role-v0”。


3.点击“Attach Policies”。


4.选择“AWSLambdaRole”并点击“Attach Policy”。

配置 QuickSight 使用新连接器

随后需要对 QuickSight 进行一些配置!


1.打开 QuickSight 并显示 Data Sets 菜单。


2.点击“New Dataset”并选择 Athena 作为数据源。



3.选择刚才创建的,使用了第 2 版 Athena 引擎的工作组。



4.随后选择在刚才的步骤中为 DynamoDB 连接器创建的分类。



a)如果看到“没有足够的权限连接到此数据集或运行此查询”的错误,很可能是因为没有将 Lambda 调用权限正确地分配给 QuickSight 角色。具体操作方法请参阅上一步。


5.随后要选择是否希望通过 SPICE 缓存数据,或是直接查询数据。直接查询将能查看 DynamoDB 中的实时数据,但因为不缓存,性能和成本可能会受到影响。


a)你也可以添加额外的 DynamoDB 表数据集并继续重复使用在上述第 2 步创建的第 2 版 Athena 引擎数据源。

进行可视化

至此我们已经创建了 DynamoDB 数据集(通过 Athena 和 DynamoDB 数据连接器),接下来终于可以通过分析和仪表板对 DynamoDB 数据进行可视化了。



本文的示例中我使用了一个很小的 DynamoDB 范例数据集,因此可视化出来的结果不怎么有趣,仅供参考。

总结

期待了这么久,终于可以在无需自定义资源和复制数据的前提下用 QuickSight 处理 DynamoDB 数据。这只是众多数据源中的一个示例,现在我们已经可以通过第 2 版 Athena 引擎的数据连接器轻松添加多种数据源,并能直接在 QuickSight 中选择要使用的 Athena 工作组和 Athena 分类。相信随着亚马逊云科技继续发布新功能以及技术的不断革新,本文所介绍的技术迟早会过时,但大家可以将本文介绍的方法作为练习探索更多新功能。如果本文对你有帮助,或如果你针对该方法的改善和增补有任何建议,欢迎随时留言。


文章作者: Jared Donboch

Jared Donboch for AWS Community Builders。

用户头像

还未添加个人签名 2019.09.17 加入

还未添加个人简介

评论

发布
暂无评论
在 Amazon QuickSight 中使用 Athena 数据连接器可视化 DynamoDB 数据_DevOps_亚马逊云科技 (Amazon Web Services)_InfoQ写作社区