我还希望看到 DynamoDB 和 QuickSight 之间的原生集成,所以我也会关注这个线程。
但至少有 1 个选项更接近您想要的。您可以在 DynamoDB 表上启用 Streams,然后设置触发器以在对 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));
}
}
}
}
}