【问题标题】:What are the extra values added to DynamoDB streams and how do I remove them?添加到 DynamoDB 流中的额外值是什么?如何删除它们?
【发布时间】:2020-02-28 00:35:21
【问题描述】:

我正在使用 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 函数中编写代码才能将其删除?

【问题讨论】:

    标签: amazon-web-services lambda amazon-dynamodb amazon-dynamodb-streams


    【解决方案1】:

    您看到的是 DynamoDB Data Type Descriptors。这就是数据在 DynamoDB 中的存储方式(或者至少是通过低级 API 公开的方式)。有多种语言可以将其转换为 JSON。

    【讨论】:

      【解决方案2】:

      对于 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)
      

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

      【讨论】:

        【解决方案3】:

        S 表示属性的值只是一个标量字符串 (S) 属性类型。尽管属性值不必是标量字符串,但每个 DynamoDB 项目属性的键名始终是一个字符串。 “Naming Rules and Data Types”详细说明了每个属性数据类型。字符串是一种标量类型,不同于文档类型或集合类型。

        流记录有不同的视图,但是没有流视图会省略项目的属性值代码并提供属性值。 'Capturing Table Activity with DynamoDB streams' 中解释了每个可能的 StreamViewType。

        玩得开心!

        【讨论】:

          猜你喜欢
          • 2010-11-09
          • 1970-01-01
          • 2018-07-13
          • 2020-01-15
          • 1970-01-01
          • 2011-06-23
          • 1970-01-01
          • 2012-07-18
          • 2012-08-26
          相关资源
          最近更新 更多