web-dev-qa-db-ja.com

AWS QuicksightでDynamoDBデータを視覚化する

非常に単純なDynamoDBテーブルにあるデータを視覚化するためのAWS中心のソリューション(可能な場合はサードパーティのものを回避する)を探しています。

AWS Quicksightを使用して他の多くのレポートとクライアントのダッシュボードを作成しているので、そこで視覚化を利用できるようにすることが目標です。

他の多くのものがS3、Athena、Redshift、RDSなどのようなものですが、DynamoDBがQuicksightのサポートされたソースではないことを知って非常に驚きました。

このためのソリューションを作成した経験はありますか?

DynamoDBテーブルを時々S3にダンプするジョブを作成し、S3またはAthenaとQuicksightの統合を使用してそれを読み取り/表示することを考えています。より多くのライブデータのためのシンプルなソリューションがあるといいですね。

9
JD D

QuicksightでDynamoDBのサポートが必要です!

私が見つけることができる最も簡単な方法は以下です:

1-DynamoDBテーブルをデータソースとして取得し、ドキュメントをグルーテーブルに書き込むグルークローラーを作成します。 (テーブルXとしましょう)

2-データソースとして「テーブルX」を取り、S3バケットに寄木細工の形式で書き込む接着ジョブを作成します。 (s3:// table-x-parquetsとしましょう)

3-データソースとして「s3:// table-x-parquets」を取り、そこから新しいグルーテーブルを作成するグルークローラーを作成します。 (テーブルYとしましょう)

これで、テーブルYでAthenaクエリを実行できるようになり、Quicksightでデータセットとして使用することもできます。

2
Emre Alparslan

DynamoDBとQuickSightのネイティブ統合も見たいので、このスレッドも見ていきます。

しかし、あなたが望むものに近い少なくとも1つのオプションがあります。 DynamoDBテーブルでストリームを有効にし、DynamoDBに変更が加えられたときにLambda関数をトリガーするトリガーを設定できます。

その後、必要に応じて特定のDynamoDBイベントに対してのみアクションを実行し(「変更」、「挿入」、「削除」)、新しい/変更されたレコードをS3にダンプできます。これは、更新時にすぐにトリガーされるため、リアルタイムデータにかなり近いものになります。

過去に似たようなことをしましたが、データをS3にダンプする代わりに、別のDynamoDBテーブルを更新していました。代わりに例をS3に切り替えるのは非常に簡単です。下記参照。

const AWS = require('aws-sdk');

exports.handler = async (event, context, callback) => {

    console.log("Event:", event);
    const dynamo = new AWS.DynamoDB();

    const customerResponse = await dynamo.scan({
        TableName: 'Customers',
        ProjectionExpression: 'CustomerId'
    }).promise().catch(err => console.log(err));

    console.log(customerResponse);

    let customers = customerResponse.Items.map(item => item.CustomerId.S);

    console.log(customers);

    for(let i = 0; i < event.Records.length; i++)
    {
        if(event.Records[i].eventName === 'INSERT')
        {
            if(event.Records[i].dynamodb.NewImage)
            {
                console.log(event.Records[i].dynamodb.NewImage);
                for(let j = 0; j < customers.length; j++)
                {
                    await dynamo.putItem({
                        Item: {
                            ...event.Records[i].dynamodb.NewImage,
                            CustomerId: { S: customers[j] }
                        },
                        TableName: 'Rules'
                    }).promise().catch(err => console.log(err));
                }
            }
        }
    }
}
2
user3430639

2020年3月の時点で、Amazonは Athena DynamoDB Connector と呼ばれるベータ機能を提供しています。

残念ながら、それはベータ版/プレビューのみであり、Athenaで設定できますが、Quicksightでこれらの新しいAthenaカタログを使用する方法がわかりません。

この機能が一般提供されたら、Quicksightに簡単にインポートでき、良いニュースで回答を更新できることを願っています。

DynamoDBコネクタを起動する手順

AWSがAthenaへの接続を自動化するためにベータ版で提供している多くの新しいデータソースがあります。

これらはコンソールから次のように設定できます。

  1. AWS Athenaコンソールの[Data Sources]メニューに移動します。
  2. 「データソースの構成」ボタンをクリックします
  3. 「データソースのクエリ」ラジオボタンを選択します
  4. 表示される「Amazon DynamoDB」オプションを選択します
  5. 「新しい機能の構成」オプションをクリックします
    • 「こぼれた」データを入れて新しいDyanmoDBカタログに名前を付けるために、バケットを指定する必要があります。
  6. ステップ5からアプリがデプロイされたら、ステップ4のAthenaデータソースフォームでLambda名(ステップ5で入力したカタログの名前)を選択し、同じカタログ名を入力します。
  7. データコネクタを作成する

これで、Athenaクエリエディターに移動して、作成したカタログを選択し、新しいカタログのdefault Athenaデータベースの下に、リージョンのすべてのDyanmoDBテーブルのリストを表示できます。アテナの。

0
JD D

DynamoDBとQuicksightの統合を見たいです。 DynamoDBストリームは、レコードを更新する代わりにイベントを送信するため、S3へのダンプにDynamoDBストリームを使用することはできません。したがって、このS3バケットから読み取る場合、同じアイテムの2つのインスタンスが存在します。1つは更新前、もう1つは更新後です。

私が現在目にしている1つの解決策は、データパイプラインを使用してDynamoDBからS3バケットに定期的にデータをダンプし、このs3バケットでAthenaとQuicksightを使用することです。

2つ目の解決策は、dynamo dbストリームを使用して、ラムダ関数を使用するエラスティック検索にデータを送信することです。エラスティック検索には、かなりクールな視覚化を持つKibanaというプラグインがあります。データを2か所に保存しているため、明らかにコストが増加します。

また、各Elastic Searchドキュメントに必要に応じて最も詳細なデータが含まれるようにデータを変換してください。キバナの視覚化では、すべてを1つのドキュメントに集約します。

0
GoAPI