Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DynamoDB のデータを QuickSight で可視化する際につまづいたこと/stumb...

Avatar for emi emi
May 09, 2025

DynamoDB のデータを QuickSight で可視化する際につまづいたこと/stumbling-blocks-when-visualising-dynamodb-with-quicksight

2025/5/9 JAWS-UG 名古屋 5月会①「データ利活用研究会」
DynamoDB のデータを QuickSight で可視化する際につまづいたこと
https://jawsug-nagoya.connpass.com/event/349797/

Avatar for emi

emi

May 09, 2025
Tweet

More Decks by emi

Other Decks in Technology

Transcript

  1. 目次 2 ⚫ ハマりポイント1:QuickSight は DynamoDB コネクタを直接サポートしていない ⚫ ハマりポイント2:Athena Federated

    Query の設定で Glue 接続が推奨になっている ⚫ ハマりポイント3:一部 DynamoDB のカラムが表示されない ⚫ ハマりポイント4:Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で 出てこない ⚫ その他気になるポイント ⚫ まとめ
  2. 3 ⚫ ハマりポイント1:QuickSight は DynamoDB コネクタを直接サポートしていない ⚫ ハマりポイント2:Athena Federated Query

    の設定で Glue 接続が推奨になっている ⚫ ハマりポイント3:一部 DynamoDB のカラムが表示されない ⚫ ハマりポイント4:Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で 出てこない ⚫ その他気になるポイント ⚫ まとめ ハマりポイント1:QuickSight はデータソースとして DynamoDB を直接サポートしていない
  3. ハマりポイント1:QuickSight はデータソースとして DynamoDB を直接サポートしていない 6 ⚫ QuickSight はデータソースとして DynamoDB を直接サポートしていない

    ⚫ Athena Federated Query(フェデレーテッドクエリ)という機能を使い、DynamoDB の データを一度 Athena でクエリできるようにする ⚫ Athena をデータソースとして QuickSight データセットを作成する必要がある サポートされているデータソース - Amazon QuickSight https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/supported-data-sources.html ない…! DynamoDB
  4. 7 ⚫ ハマりポイント1:QuickSight は DynamoDB コネクタを直接サポートしていない ⚫ ハマりポイント2:Athena Federated Query

    の設定で Glue 接続が推奨になっている ⚫ ハマりポイント3:一部 DynamoDB のカラムが表示されない ⚫ ハマりポイント4:Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で 出てこない ⚫ その他気になるポイント ⚫ まとめ ハマりポイント2:Athena Federated Query の設定で Glue 接続が推奨になっている
  5. ハマりポイント2:Athena Federated Query の設定で Glue 接続が推奨になっている 9 ⚫ Athena で

    DynamoDB コネクタを作成する方法はドキュメントに以下 2 種類 記載されている ⚫ Glue connections (recommended) ⚫ Legacy connections Amazon Athena DynamoDB コネクタ - Amazon Athena https://docs.aws.amazon.com/ja_jp/athena/latest/ug/connectors-dynamodb.html
  6. ハマりポイント2:Athena Federated Query の設定で Glue 接続が推奨になっている 10 Athena コンソールを使用してデータソースに接続する -

    Amazon Athena https://docs.aws.amazon.com/ja_jp/athena/latest/ug/connect-to-a-data-source-console-steps.html Amazon S3 内の流出場所 (Spill(溢れる)Bucket) Lambda 関数のレスポンスサイズ制限を 超えるデータを保存するための領域 あらかじめユーザーにて作成しておくもの
  7. ハマりポイント2:Athena Federated Query の設定で Glue 接続が推奨になっている 11 awslabs/aws-athena-query-federation: The Amazon

    Athena Query Federation SDK allows you to customize Amazon Athena with your own data sources and code. https://github.com/awslabs/aws-athena-query-federation
  8. ハマりポイント2:Athena Federated Query の設定で Glue 接続が推奨になっている 12 AthenaDynamoDBConnector - AWS

    Serverless Application Repository https://serverlessrepo.aws.amazon.com/applications/us-east-1/292517598671/AthenaDynamoDBConnector ⚫ 作成された Lambda 関数 この ECR リポジトリは自身の AWS アカウントではない 利用ユーザー側からは、この AWS アカウントの ECR リポジトリのアプリケーションを見に行っていると 読み取れる Serverless Application Repository で公開された Lambda 関数アプリケーション
  9. ハマりポイント2:Athena Federated Query の設定で Glue 接続が推奨になっている 13 AthenaDynamoDBConnector - AWS

    Serverless Application Repository https://serverlessrepo.aws.amazon.com/applications/us-east-1/292517598671/AthenaDynamoDBConnector ⚫ 作成された Glue Connection
  10. ハマりポイント2:Athena Federated Query の設定で Glue 接続が推奨になっている 14 ⚫ Glue 接続の設定後構成

    Amazon Athena DynamoDB コネクタ - Amazon Athena https://docs.aws.amazon.com/ja_jp/athena/latest/ug/connectors-dynamodb.html
  11. 15 ⚫ ハマりポイント1:QuickSight は DynamoDB コネクタを直接サポートしていない ⚫ ハマりポイント2:Athena Federated Query

    の設定で Glue 接続が推奨になっている ⚫ ハマりポイント3:一部 DynamoDB のカラムが表示されない ⚫ ハマりポイント4:Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で 出てこない ⚫ その他気になるポイント ⚫ まとめ ハマりポイント3:一部 DynamoDB のカラムが表示されない
  12. ハマりポイント3:一部 DynamoDB のカラムが表示されない 18 ⚫ 一部 DynamoDB のカラムが表示されない ⚫ GenU

    アプリケーションで一部の列にデータが入っていないカラムが表示できていない例 DynamoDB Athena
  13. ハマりポイント3:一部 DynamoDB のカラムが表示されない 19 ⚫ Serverless Application Repository で作成したコネクタに組み込まれた スキーマ推論機能には制限があるため、メタデータ用として

    Glue を 設定することが推奨されている ⚫ AWS Glue クローラーを使用して AWS Glue テーブルを作成 ⚫ DynamoDB テーブルスキーマを確認して、クローラーがデータを正しく検出したことを確認 ⚫ ColumnMapping プロパティを使用すると、データ列が欠落するのを防ぐことができる Amazon Athena DynamoDB コネクタ - Amazon Athena https://docs.aws.amazon.com/ja_jp/athena/latest/ug/connectors-dynamodb.html Athena DynamoDB コネクタの「列が見つかりません」エラーのトラブルシューティング | AWS re:Post https://repost.aws/ja/knowledge-center/athena-column-not-found-error
  14. 21 ⚫ ハマりポイント1:QuickSight は DynamoDB コネクタを直接サポートしていない ⚫ ハマりポイント2:Athena Federated Query

    の設定で Glue 接続が推奨になっている ⚫ ハマりポイント3:一部 DynamoDB のカラムが表示されない ⚫ ハマりポイント4:Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で 出てこない ⚫ その他気になるポイント ⚫ まとめ ハマりポイント4: Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で出てこない
  15. 23 ⚫ QuickSight に Athena フェデレーテッドクエリ用 Lambda へのアクセス権限 を付与する必要があるが、 「セキュリティとアクセス

    許可」設定で Lambda 関数 が出てこない ハマりポイント4: Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で出てこない QuickSight で DynamoDB のデータを可視化するためのフェデレーテッドクエリ用 Lambda を選択できない - 日本語で質問 | Q&A - Amazon QuickSight Community https://community.amazonquicksight.com/t/quicksight-dynamodb-lambda/44402
  16. ハマりポイント4: Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で出てこない 24

    ⚫ 対処法 ⚫ QuickSight で管理されるロールを使用する(デフォルト)ではなく、ユーザー自身で カスタムロールを作成し、QuickSight に Lambda 関数を実行するアクションを許可する QuickSight の「問題が発生しました 詳細については、以下を参照してください IAM ポリシーの設定」 エラーの解消方法 | DevelopersIO https://dev.classmethod.jp/articles/how-to-resolve-error-in-the-quicksight-permissions-screen/ QuickSight の VPC 接続がなかなか削除されないのは IAM ロールの権限の問題だった | DevelopersIO https://dev.classmethod.jp/articles/vpc-connections-in-quicksight-are-not-being-removed-easily/
  17. ハマりポイント4: Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で出てこない 25

    ⚫ 対処法 ⚫ QuickSight で管理されるロールを使用する(デフォルト)ではなく、ユーザー自身で カスタムロールを作成し、QuickSight に Lambda 関数を実行するアクションを許可する Athena Federated Query 経由で DynamoDB のデータを QuickSight で可視化するハンズオンでつまづいた部分の補足 | DevelopersIO https://dev.classmethod.jp/articles/connecting-from-athena-to-dynamodb-quicksight/ { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", “Resource”: “arn:aws:lambda:ap-northeast-1:123456789012:function:関数名" } ] }
  18. ハマりポイント4: Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で出てこない 26

    ⚫ 対処法 ⚫ QuickSight で管理されるロールを使用する(デフォルト)ではなく、ユーザー自身で カスタムロールを作成し、QuickSight に Lambda 関数を実行するアクションを許可する QuickSight の「問題が発生しました 詳細については、以下を参照してください IAM ポリシーの設定」 エラーの解消方法 | DevelopersIO https://dev.classmethod.jp/articles/how-to-resolve-error-in-the-quicksight-permissions-screen/ QuickSight の VPC 接続がなかなか削除されないのは IAM ロールの権限の問題だった | DevelopersIO https://dev.classmethod.jp/articles/vpc-connections-in-quicksight-are-not-being-removed-easily/
  19. 30 ⚫ ハマりポイント1:QuickSight は DynamoDB コネクタを直接サポートしていない ⚫ ハマりポイント2:Athena Federated Query

    の設定で Glue 接続が推奨になっている ⚫ ハマりポイント3:一部 DynamoDB のカラムが表示されない ⚫ ハマりポイント4:Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で 出てこない ⚫ その他気になるポイント ⚫ まとめ ハマりポイント4: Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で出てこない
  20. その他、気になるポイント 32 ⚫ DynamoDB のデータをクエリする際に フルスキャンになってしまうかどうか気になる ⚫ Athena はスキャンするデータ量に応じて課金が発生する ⚫

    DynamoDB のスキャンを使用するクエリでは大量の RCU を消費するため課金が発生する Improve federated queries with predicate pushdown in Amazon Athena | AWS Big Data Blog https://aws.amazon.com/jp/blogs/big-data/improve-federated-queries-with-predicate-pushdown-in-amazon-athena/ DynamoDB でのデータのクエリとスキャンのベストプラクティス - Amazon DynamoDB https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/bp-query-scan.html
  21. その他、気になるポイント 33 ⚫ 以下ドキュメントによると… ⚫ パフォーマンス ⚫ https://docs.aws.amazon.com/ja_jp/athena/latest/ug/connectors- dynamodb.html#connectors-dynamodb-performance ⚫

    “Athena DynamoDB コネクタは並列スキャンをサポートしており、DynamoDB クエリの一 部として述語のプッシュダウンを試みます。” ⚫ 述語のプッシュダウン:push down predicates ⚫ 基本的にコネクタがプッシュダウンを試みるという説明 ⚫ プッシュダウン:クエリ処理中に不要な行をできるだけ早くフィルタリングすること プッシュダウンの最適化およびデータの可視化 | Snowflake Documentation https://docs.snowflake.com/ja/developer-guide/pushdown-optimization#what-is-pushdown
  22. その他、気になるポイント 34 ⚫ 「最初にロードし、後でフィルタリングする」方式だと… ⚫ 簡単だが非効率 ⚫ 通常、できるだけ早くフィルタリングする方が効率的 ⚫ 早期フィルタリングは「フィルターをクエリプランに深くプッシュする」、

    または単に「プッシュダウン」と呼ばれる ⚫ 上記のクエリ例では、 WHERE 句に一致しない記録をロードしないようにテーブルスキャンコードに 指示する方が効率的 プッシュダウンの最適化およびデータの可視化 | Snowflake Documentation https://docs.snowflake.com/ja/developer-guide/pushdown-optimization#what-is-pushdown SELECT col1 FROM tab1 WHERE location = 'New York'; 1. テーブルからすべての行をメモリに読み込み( FROM 句を実行) 2. メモリ内の行をスキャン 3. New York に一致しない行を除外( WHERE 句を実行) 4. メモリに残っている行から col1 を選択( SELECT リストを実行) プッシュダウンの補足
  23. その他、気になるポイント 35 ⚫ 以下ドキュメントによると… ⚫ パフォーマンス ⚫ https://docs.aws.amazon.com/ja_jp/athena/latest/ug/connectors- dynamodb.html#connectors-dynamodb-performance ⚫

    “X が異なる値を持つハッシュキー述語を使用すると、DynamoDB に対する X クエリ呼び出 しが発生します” ⚫ 「ハッシュキー」は DynamoDB のパーティションキーを指すと推測 ⚫ DynamoDB はパーティションキーの値をハッシュして保存先のパーティションを 決定するため昔はハッシュキーと呼ばれていた ⚫ 異なるパーティションキー値ごとに個別のクエリ呼び出しが行われると読み取れる
  24. その他、気になるポイント 36 ⚫ 以下ドキュメントによると… ⚫ パフォーマンス ⚫ https://docs.aws.amazon.com/ja_jp/athena/latest/ug/connectors- dynamodb.html#connectors-dynamodb-performance ⚫

    “他のすべての述語シナリオでは、スキャン呼び出しの数が Y となります。 ⚫ パーティションキー以外の条件では「スキャン呼び出し」が行われる ⇒フルスキャンの可能性あり
  25. その他、気になるポイント 37 customer_id name email region … 12345 Aoki [email protected]

    us-east-1 … 67890 Iida [email protected] us-east-1 ABCDE Uemura [email protected] us-east-1 FGHIJ Enomoto [email protected] ap-northeast-1 KLMNO Oda [email protected] ap-northeast-1 : SELECT * FROM customers WHERE customer_id = '12345' SELECT * FROM customers WHERE customer_id IN ('A123', 'B456') SELECT * FROM customers WHERE region = 'us-east-1' X = 1 異なるパーティションキー値は 1 つ DynamoDB への呼び出しは 1 回のクエリ操作 特定のパーティション (customer_id=‘12345’) のみにアクセス X = 2 異なるパーティションキー値は 2 つ ('A123'と'B456’) DynamoDB への呼び出しは 2 回のクエリ操作 1回目: customer_id = 'A123' に対するクエリ 2回目: customer_id = 'B456' に対するクエリ パーティションキーを使用していない スキャン呼び出しが発生 スキャン呼び出しの数 (Y) はテーブルサイズとプロビジョニングされたスループットに基づいて決定される DynamoDBテーブル customers ドキュメントから読み取ったイメージ
  26. その他、気になるポイント 38 ⚫ 別途バッチ処理などで DynamoDB のデータを S3 へダンプする仕組みを 作り、S3 のデータを可視化する…といった仕組みの方が効率的で

    取り扱いしやすい可能性も ⚫ システムの要件や状況に応じて直接 DynamoDB データを 直接可視化するのが良いかどうかは検討の余地あり DynamoDB のデータを Amazon Ion 形式で S3 にエクスポートし Athena からクエリする | DevelopersIO https://dev.classmethod.jp/articles/export-dynamodb-as-amazon-ion-format/ Amazon DynamoDBテーブルをエクスポートしてAmazon Athenaでクエリしてみた | DevelopersIO https://dev.classmethod.jp/articles/export-amazon-dynamodb-table-for-query-with-amazon-athena/
  27. 39 ⚫ ハマりポイント1:QuickSight は DynamoDB コネクタを直接サポートしていない ⚫ ハマりポイント2:Athena Federated Query

    の設定で Glue 接続が推奨になっている ⚫ ハマりポイント3:一部 DynamoDB のカラムが表示されない ⚫ ハマりポイント4:Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で 出てこない ⚫ その他気になるポイント ⚫ まとめ まとめ
  28. まとめ 41 ⚫ QuickSight は DynamoDB コネクタを直接サポートしていないため、Athena Federated Query を使い

    Athena をデータソースとすることで可視化できる ⚫ Athena Federated Query の設定で Glue 接続が推奨になっている ⚫ Serverless Application Repository で作成したコネクタに組み込まれたスキーマ推論機能は制限がある ため、一部 DynamoDB のカラムが表示されない場合はメタデータ用として Glue の設定が推奨されて いる ⚫ QuickSight で管理されるロールを使用する(デフォルト)だと Athena Federated Query 用の Lambda 関数へのアクセス権限が不足しているため、ユーザー自身でカスタムロールを作成し、 QuickSight に Lambda 関数を実行するアクションを許可する ⚫ Athena はスキャンするデータ量に応じて課金が発生し、DynamoDB はデータ読み取りの RCU 消費に 応じて課金が発生する。システムの要件や状況に応じて直接 DynamoDB データを直接可視化するのが 良いかどうかは検討が必要
  29. 参考 42 ⚫ Athena Federated Query 経由で DynamoDB のデータを QuickSight

    で可視化するハンズオンでつまづいた部分の補足 | DevelopersIO ⚫ https://dev.classmethod.jp/articles/connecting-from-athena-to-dynamodb-quicksight/ ⚫ [新ツール] AWS Serverless Application Model (AWS SAM) を使ってサーバーレスアプリケーションを構築する | DevelopersIO ⚫ https://dev.classmethod.jp/articles/aws-serverless-application-model/ ⚫ 【公開】AWS Serverless Application Repositoryにアプリケーションを公開してみた | DevelopersIO ⚫ https://dev.classmethod.jp/articles/aws-serverless-application-test-publish/ ⚫ AWS::Serverless transform - AWS CloudFormation ⚫ https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html