JD *_*D D 23 amazon-web-services amazon-dynamodb amazon-quicksight
我正在寻找一种以 AWS 为中心的解决方案(如果可能,避免使用 3rd 方的东西)来可视化非常简单的 DynamoDB 表中的数据。
我们将 AWS Quicksight 用于我们客户的许多其他报告和仪表板,因此我们的目标是在那里提供可视化。
我很惊讶地看到 DynamoDB 不是 Quicksight 的受支持来源,尽管许多其他东西如 S3、Athena、Redshift、RDS 等。
有没有人有为此创建解决方案的经验?
我想我只是创建一个作业,将 DynamoDB 表每隔一段时间转储到 S3,然后使用 S3 或 Athena 与 Quicksight 集成来读取/显示它。为更多实时数据提供一个简单的解决方案会很好。
JD *_*D D 15
!!更新!! 到 2021 年,我们终于可以让 Athena 数据连接器在 Quicksight 中公开 DynamoDB 数据,而无需任何自定义脚本或重复数据。
我写了一篇详细的博客文章,其中包含分步说明,但总的来说,过程如下:
Bingo Bango,您现在应该能够在 Quicksight 中直接查询或缓存 DynamoDB 数据,而无需创建将您的数据复制到另一个数据源的自定义代码或作业。
截至 2020 年 3 月,亚马逊将推出一项名为Athena DynamoDB Connector的测试版功能。
希望一旦此功能正式发布,它就可以轻松导入 Quicksight,我可以用好消息更新答案。
AWS 在测试版中提供了许多新数据源,用于自动连接到 Athena。
您可以通过控制台通过以下方式设置这些:
现在您可以转到 Athena 查询编辑器,选择您刚刚创建default的目录,并在新目录中的Athena 数据库下查看您所在地区的所有 DyanmoDB 表的列表,您现在可以作为 Athena 的一部分进行查询。
Emr*_*lan 11
我们希望 Quicksight 支持 DynamoDB!
我能找到的最简单的方法如下:
1 - 创建一个 Glue Crawler,它将 DynamoDB 表作为数据源并将文档写入 Glue 表。(假设表X)
2 - 创建一个 Glue 作业,将“表 X”作为数据源并将它们以镶木地板格式写入 S3 存储桶。(假设 s3://table-x-parquets)
3 - 创建一个 Glue Crawler,它将 's3://table-x-parquets' 作为数据源并从中创建一个新的 Glue Table。(假设表Y)
现在您可以在表 Y 中执行 Athena 查询,也可以将其用作 Quicksight 中的数据集。
小智 5
我还希望看到 DynamoDB 和 QuickSight 之间的原生集成,所以我也会关注这个线程。
但是至少有 1 个选项更接近您想要的。您可以在 DynamoDB 表上启用流,然后设置触发器以在对 DynamoDB 进行更改时触发 Lambda 函数。
然后,如果您愿意,您只能对特定的 DynamoDB 事件采取行动('Modify'、'Insert'、'Delete'),然后将新的/修改过的记录转储到 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));
                }
            }
        }
    }
}
| 归档时间: | 
 | 
| 查看次数: | 12267 次 | 
| 最近记录: |