Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

ハマりポイント1:QuickSight はデータソースとして DynamoDB を直接サポートしていない

Slide 5

Slide 5 text

ハマりポイント1:QuickSight はデータソースとして DynamoDB を直接サポートしていない 5 Relational Database (RDB) Relational Database (RDB) NoSQL (Key Value Database)

Slide 6

Slide 6 text

ハマりポイント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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

ハマりポイント2:Athena Federated Query の設定で Glue 接続が推奨になっている

Slide 9

Slide 9 text

ハマりポイント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

Slide 10

Slide 10 text

ハマりポイント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 関数のレスポンスサイズ制限を 超えるデータを保存するための領域 あらかじめユーザーにて作成しておくもの

Slide 11

Slide 11 text

ハマりポイント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

Slide 12

Slide 12 text

ハマりポイント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 関数アプリケーション

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

ハマりポイント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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

ハマりポイント3:一部 DynamoDB のカラムが表示されない

Slide 17

Slide 17 text

ハマりポイント3:一部 DynamoDB のカラムが表示されない 17 ⚫ Athena フェデレーテッドクエリした結果 SELECT * FROM “作成したデータソース”.“default”.“DynamoDB テーブル名" ;

Slide 18

Slide 18 text

ハマりポイント3:一部 DynamoDB のカラムが表示されない 18 ⚫ 一部 DynamoDB のカラムが表示されない ⚫ GenU アプリケーションで一部の列にデータが入っていないカラムが表示できていない例 DynamoDB Athena

Slide 19

Slide 19 text

ハマりポイント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

Slide 20

Slide 20 text

ハマりポイント3:一部 DynamoDB のカラムが表示されない 20 ⚫ 余談:Glue 接続を設定した後、DynamoDB テーブルが全部表示される DynamoDB テーブル全部見える

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

ハマりポイント4: Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で出てこない

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

ハマりポイント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/

Slide 25

Slide 25 text

ハマりポイント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:関数名" } ] }

Slide 26

Slide 26 text

ハマりポイント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/

Slide 27

Slide 27 text

ハマりポイント4: Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で出てこない 27 DynamoDB テーブルが 見えるようになった

Slide 28

Slide 28 text

ハマりポイント4: Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で出てこない 28

Slide 29

Slide 29 text

ハマりポイント4: Athena Federated Query 用の Lambda 関数が QuickSight 管理画面で出てこない 29

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

その他、気になるポイント

Slide 32

Slide 32 text

その他、気になるポイント 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

Slide 33

Slide 33 text

その他、気になるポイント 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

Slide 34

Slide 34 text

その他、気になるポイント 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 リストを実行) プッシュダウンの補足

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

その他、気になるポイント 36 ⚫ 以下ドキュメントによると… ⚫ パフォーマンス ⚫ https://docs.aws.amazon.com/ja_jp/athena/latest/ug/connectors- dynamodb.html#connectors-dynamodb-performance ⚫ “他のすべての述語シナリオでは、スキャン呼び出しの数が Y となります。 ⚫ パーティションキー以外の条件では「スキャン呼び出し」が行われる ⇒フルスキャンの可能性あり

Slide 37

Slide 37 text

その他、気になるポイント 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 ドキュメントから読み取ったイメージ

Slide 38

Slide 38 text

その他、気になるポイント 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/

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

まとめ

Slide 41

Slide 41 text

まとめ 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 データを直接可視化するのが 良いかどうかは検討が必要

Slide 42

Slide 42 text

参考 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

Slide 43

Slide 43 text

No content