1. 程式人生 > 其它 >在 Amazon QuickSight 中使用 Athena 資料聯結器視覺化 DynamoDB 資料

在 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 生命週期策略,以確保該儲存桶不會以不受控的方式增大

  • 你使用的區域必須同時支援:

  • 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。