添加到DynamoDB流的额外值是什么?如何删除它们



我使用DynamoDB流使用Lambda 将数据同步到Elasticsearch

数据的格式(来自https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda.Tutorial.html)看起来像:

"NewImage": {
"Timestamp": {
"S": "2016-11-18:12:09:36"
},
"Message": {
"S": "This is a bark from the Woofer social network"
},
"Username": {
"S": "John Doe"
}
},

所以有两个问题。

  1. 流附加的"S"是什么。我假设它表示字符串或流,但我找不到任何文档。

  2. 是否有将其从流中排除的选项,或者是否必须在lambda函数中编写代码才能将其删除?

您看到的是DynamoDB数据类型描述符。这就是数据存储在DynamoDB中的方式(或者至少是通过低级别API公开数据的方式(。有各种语言的SDK可以将其转换为JSON。

对于Python:https://boto3.amazonaws.com/v1/documentation/api/latest/_modules/boto3/dynamodb/types.html

"TypeSerializer">

deserializer = boto3.dynamodb.types.TypeDeserializer()
dic = {key: deserializer.deserialize(val) for key,val in record['dynamodb']['NewImage'].items()}
def decimal_default(obj):
if isinstance(obj, decimal.Decimal):
return float(obj)
raise TypeError
json.dumps(dic, default=decimal_default)

如果你想在弹性搜索中建立索引,你必须做另一个json.loads((来转换为Python字典。

S表示属性的值只是一个标量字符串(S(属性类型。每个DynamoDB项属性的键名称始终是一个字符串,尽管属性值不必是标量字符串"命名规则和数据类型"详细介绍了每种属性数据类型。字符串是不同于文档类型或集合类型的标量类型。

流记录有不同的视图,但没有一个流视图省略了项的属性值代码并提供了属性值。"使用DynamoDB流捕获表活动"中解释了每种可能的StreamViewType。

玩得开心!

最新更新