在 Amazon QuickSight 中使用 Athena 数据连接器可视化 DynamoDB 数据
声明:
本文转自 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 生命周期策略,以确保该存储桶不会以不受控的方式增大
你使用的区域必须同时支持:
切换为使用第 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。
评论