【问题标题】:AWS CLI DynamoDB adding non-key attributes to existing tableAWS CLI DynamoDB 向现有表添加非键属性
【发布时间】:2021-03-25 10:09:04
【问题描述】:

我正在使用 AWS 命令​​行界面在 DynamoDB 中插入一个表的云计算类项目。我坚持的步骤是将其他非关键属性添加到表中。我阅读了有关添加属性的帮助部分,并提出了以下内容:

aws dynamodb put-item \
--table-name Sensors \
--item '{"SensorDescription": {"S": "A"}, \
"ImageFile": {"S": "file1"}, \
"SampleRate": {"N": "100"}, \
"Locations": {"L": "Aberdeen MD, Warren MI, Orlando FL"} \
--return-consumed-capacity TOTAL

我已尝试通过 AWS 帮助找到的批量写入项目和重新格式化示例,但我仍然遇到问题。我使用 Cloud9 已经有一段时间了,但 DynamoDB 对我来说很新。任何帮助是极大的赞赏。表 Sensors 已创建并包含以下信息:

vocstartsoft:~/environment $ aws dynamodb describe-table --table-name Sensors
{
    "Table": {
        "AttributeDefinitions": [
            {
                "AttributeName": "Sensor",
                "AttributeType": "S"
            }
        ],
        "TableName": "Sensors",
        "KeySchema": [
            {
                "AttributeName": "Sensor",
                "KeyType": "HASH"
            }
        ],
        "TableStatus": "ACTIVE",
        "CreationDateTime": 1607909069.531,
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "ReadCapacityUnits": 5,
            "WriteCapacityUnits": 5
        },
        "TableSizeBytes": 0,
        "ItemCount": 0,
        "TableArn": "arn:aws:dynamodb:us-east-1:466773264882:table/Sensors",
        "TableId": "5ddc11bc-8167-4bfa-bbcc-96199954ba39"
    }
}

【问题讨论】:

  • 如果您也有错误要发布,这可能会有所帮助。但是我认为您只是在 --item 参数上缺少一个结束括号和单引号。我认为错误可能是json的某种意外结束。
  • 我修复了缺少的括号和单引号,但我收到了这个错误:解析参数“--item”时出错:JSON 无效:需要用双引号括起来的属性名称:第 1 行第 31 列(字符30)。我最初以为这是在说每个属性都需要更多括号,但是当我添加它们时它不起作用。

标签: amazon-web-services amazon-dynamodb aws-cli


【解决方案1】:

首先,请注意,您始终需要在 put item operation 中包含主键属性。

另一方面,列表Locations 定义不正确。

另外,请注意您错过了项目值末尾的}'

请尝试以下方法:

    aws dynamodb put-item \
    --table-name Sensors \
    --item '{"Sensor": {"S", "Sensor 1"},
    "SensorDescription": {"S": "A"},
    "ImageFile": {"S": "file1"},
    "SampleRate": {"N": "100"},
    "Locations": {"L": [{"S": "Aberdeen MD"}, {"S": "Warren MI"}, {"S": "Orlando FL"}]}}' \
    --return-consumed-capacity TOTAL

为简单起见,并且为了避免 shell 连续字符出现问题,您可以将项目信息包含在文件中,我们将其命名为 item.json

{
  "Sensor": {"S", "Sensor 1"},
  "SensorDescription": {"S": "A"},
  "ImageFile": {"S": "file1"},
  "SampleRate": {"N": "100"},
  "Locations": {
    "L": [
      {"S": "Aberdeen MD"},
      {"S": "Warren MI"},
      {"S": "Orlando FL"}
    ]
  }
}

并应用如下命令:

aws dynamodb put-item \
    --table-name Sensors \
    --item file://item.json \
    --return-consumed-capacity TOTAL

【讨论】:

  • 谢谢!对于作业,我应该使用 CLI 创建表。我遇到了另一个问题。我收到此错误:解析参数“--item”时出错:JSON 无效:期望用双引号括起来的属性名称:第 1 行第 31 列(字符 30)。我最初以为它是说每个属性都需要括号,但是当我添加它们时它不起作用。
  • 嗨@ZackLutz。不客气!不,恐怕新问题与您列表Locations的定义有关。请看我修改后的答案。我希望它有所帮助。
  • 嗯...我更改了位置定义,但仍然遇到相同的错误。解析参数“--item”时出错:JSON 无效:需要用双引号括起来的属性名称:第 1 行第 31 列(字符 30)收到的 JSON:{“Sensor”:{“S”:“Sensor 1”},\“SensorDescription “:{“S”:“A”},\“ImageFile”:{“S”:“file1”},\“SampleRate”:{“N”:“100”},\“位置”:{“L ": [{"S": "Aberdeen MD"}, {"S": "Warren MI"}, {"S": "Orlando FL"}]}}
  • 您使用的是item.json 文件,还是内联信息?请在命令外壳中删除 JSON 中的 \ 字符,请参阅我的答案。正如我告诉过你的,至少对我来说,JSON 中的 shell 延续字符是一场噩梦……请参阅:stackoverflow.com/questions/34847981/…
  • 我正在使用内联 b/c 分配要求它,但我正在切换到 item.json。这似乎奏效了。谢谢!
猜你喜欢
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多