web-dev-qa-db-fra.com

Visualisez les données DynamoDB dans AWS Quicksight

Je recherche une solution centrée sur AWS (en évitant les trucs tiers si possible) pour visualiser les données qui sont dans une table DynamoDB très simple.

Nous utilisons AWS Quicksight pour de nombreux autres rapports et tableaux de bord pour nos clients, ce qui a pour but de rendre les visualisations disponibles.

J'ai été très surpris de voir que DynamoDB n'était pas une source prise en charge pour Quicksight bien que beaucoup d'autres choses soient comme S3, Athena, Redshift, RDS, etc.

Quelqu'un at-il une expérience pour créer une solution pour cela?

Je pense que je vais simplement créer un travail qui videra la table DynamoDB vers S3 de temps en temps, puis utilisera les intégrations S3 ou Athena avec Quicksight pour le lire/l'afficher. Ce serait bien d'avoir une solution simple pour plus de données en direct.

9
JD D

Nous voulons le support DynamoDB dans Quicksight!

Le moyen le plus simple que j'ai pu trouver est ci-dessous:

1 - Créez un Glue Crawler qui prend la table DynamoDB comme source de données et écrit des documents dans une table Glue. (Disons le tableau X)

2 - Créez un travail de collage qui prend le "Tableau X" comme source de données et les écrit dans un seau S3 au format parquet. (Disons s3: // table-x-parquets)

3 - Créez un Glue Crawler qui prend 's3: // table-x-parquets' comme source de données et crée un nouveau Glue Table à partir de celui-ci. (Disons le tableau Y)

Vous pouvez maintenant exécuter des requêtes Athena dans le tableau Y et vous pouvez également les utiliser comme ensemble de données dans Quicksight.

2
Emre Alparslan

J'aimerais également voir une intégration native entre DynamoDB et QuickSight, donc je vais également regarder ce fil.

Mais il y a au moins 1 option plus proche de ce que vous voulez. Vous pouvez activer Streams sur votre table DynamoDB, puis configurer un déclencheur pour déclencher une fonction Lambda lorsque des modifications sont apportées à DynamoDB.

Ensuite, vous ne pouvez prendre des mesures sur des événements DynamoDB spécifiques que si vous le souhaitez ("Modifier", "Insérer", "Supprimer"), puis vider l'enregistrement nouveau/modifié vers S3. Ce serait assez proche des données en temps réel, car il se déclencherait immédiatement après la mise à jour.

J'ai fait quelque chose de similaire dans le passé, mais au lieu de vider les données vers S3, je mettais à jour une autre table DynamoDB. Il serait plutôt simple de passer l'exemple à S3 à la place. Voir ci-dessous.

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

Depuis mars 2020, Amazon met à disposition une fonctionnalité bêta appelée Athena DynamoDB Connector .

Malheureusement, ce n'est que la version bêta/prévisualisation et vous pouvez le configurer dans Athena, mais je ne vois pas comment utiliser ces nouveaux catalogues Athena dans Quicksight.

J'espère qu'une fois que cette fonctionnalité est GA, elle peut être facilement importée dans Quicksight et je peux mettre à jour la réponse avec la bonne nouvelle.

Instructions pour monter un connecteur DynamoDB

Il existe de nombreuses nouvelles sources de données qu'AWS met à disposition en version bêta pour autoriser les connexions à Athena.

Vous pouvez les configurer via la console en:

  1. Accédez au menu "Sources de données" dans la console AWS Athena.
  2. Cliquez sur le bouton "Configurer la source de données"
  3. Choisissez le bouton radio "Interroger une source de données"
  4. Sélectionnez l'option "Amazon DynamoDB" qui apparaît
  5. Cliquez sur l'option "Configurer une nouvelle fonction"
    • Vous devrez spécifier un compartiment pour aider à mettre les données "renversées" dans et fournir un nom pour le nouveau catalogue DyanmoDB.
  6. Une fois l'application déployée à partir de l'étape 5, sélectionnez le nom Lambda (le nom du catalogue que vous avez entré à l'étape 5) dans le formulaire de source de données Athena à partir de l'étape 4 et indiquez également le même nom de catalogue.
  7. Créer le connecteur de données

Vous pouvez maintenant accéder à l'éditeur de requêtes Athena, sélectionner le catalogue que vous venez de créer et voir une liste de toutes les tables DyanmoDB pour votre région, sous la base de données default Athena dans le nouveau catalogue, que vous pouvez maintenant interroger dans le cadre d'Athéna.

0
JD D

J'adorerais voir l'intégration de DynamoDB avec Quicksight. L'utilisation de flux DynamoDB pour effectuer un vidage vers S3 ne fonctionne pas car les flux DynamoDB envoient des événements au lieu de mettre à jour les enregistrements. Par conséquent, si vous lisez à partir de ce compartiment S3, vous aurez deux instances du même élément: une avant la mise à jour et une après la mise à jour.

Une solution que je vois maintenant est de vider périodiquement les données de DynamoDB vers un compartiment S3 en utilisant le pipeline de données et d'utiliser Athena et Quicksight sur ce compartiment s3.

La deuxième solution consiste à utiliser le flux de base de données dynamo pour envoyer des données à la recherche élastique à l'aide de la fonction lambda. La recherche élastique a un plug-in appelé Kibana qui a des visualisations assez cool. Évidemment, cela va augmenter vos coûts, car vous stockez maintenant vos données à deux endroits.

Assurez-vous également de transformer vos données de sorte que chaque document Elastic Search contienne les données les plus granulaires en fonction de vos besoins. Comme les visualisations kibana regrouperont tout dans un seul document.

0
GoAPI