当前位置: 首页 > 知识库问答 >
问题:

如何重命名DynamoDB列/键

凤凡
2023-03-14

在我的一个DynamoDb表中,我有一个名为“status”的列/键,它原来是一个保留关键字。不幸的是,不能删除整个表并重新初始化它。如何重命名密钥?

以下是导致异常的Lambda代码:

try :
            response = table.query(
                IndexName='myId-index',
                KeyConditionExpression=Key('myId').eq(someId)
            )
            for item in response['Items']:
                print('Updating Item: ' + item['id'])
                table.update_item(
                    Key={
                        'id': item['id']
                    },
                    UpdateExpression='SET myFirstKey = :val1, mySecondKey = :val2, myThirdKey = :val3, myFourthKey = :val4, myFifthKey = :val5, status = :val6',
                    ExpressionAttributeValues={
                        ':val1': someValue1,
                        ':val2': someValue2,
                        ':val3': someValue3,
                        ':val4': someValue4,
                        ':val5': someValue5,
                        ':val6': someValue6
                    }
                )
except Exception, e:
            print ('ok error: %s' % e)

这里有一个例外:

2016-06-14 18:47:24UTC 2 ok错误:在调用UpdateItem操作时发生错误(ValidationExc0019):无效的Update表达式:属性名称是保留关键字;保留关键字:状态

共有3个答案

闻人德庸
2023-03-14

使用NoSQL Workbench app AWS supports,我导出了表的一个副本,该表具有我想要更改的列名。我打开了创建的JSON文件NoSQL Workbench,然后对相关列的名称进行了简单的查找/替换。

在.JSON文件上的名称看起来正确的情况下,我使用NoSQL应用程序将该表重新导入到dynamodb中。导入将覆盖现有数据,这将清除错误的列名。

如果你有一个巨大的数据集,下载一个副本到你的本地计算机可能不是一个好的解决方案,但对于我的小桌子来说,它工作得相当好。

柴宝
2023-03-14

有一个简单的解决方案可以代替重新设置列的长度:在查询中使用投影表达式和表达式属性名称。

我遇到了同样的问题(我的表包含列“name”。下面是一个示例查询:

TableName: 'xxxxxxxxxx',
  ExpressionAttributeNames: {
    '#A': 'country',
    '#B': 'postcode',
    '#C': 'name'
  },
  ExpressionAttributeValues: {
    ':a': {S: 'DE'},
    ':c': {S: 'Peter Benz'}
  },
  FilterExpression: 'country = :a AND #C = :c',
  ProjectionExpression: '#A, #B, #C'
熊俊人
2023-03-14

没有真正简单的方法来重命名列。您必须为每个条目创建一个新属性,然后删除现有属性的所有值。

如果查询表时遇到问题,请使用表达式属性名称,没有理由删除属性/列。

从表达式属性名称文档中:

在某些情况下,您可能需要编写一个表达式,其中包含与DynamoDB保留字冲突的属性名称。。。要解决此问题,可以定义表达式属性名称。表达式属性名称是在表达式中使用的占位符,作为实际属性名称的替代项。

 类似资料:
  • 我有DynamoDB表,我想重命名它。似乎没有任何重命名表的命令或选项。以前有人给桌子重新命名过吗?

  • 我有一个表,它有列[col1、col2、col3....col9]。我想在Python中把所有列数据合并到一个列中作为col?

  • 问题内容: 我的应用崩溃了,因为我没有正确处理迁移。 我正在寻找一种解决方案来迁移表中1列的名称。 在我的项目中,我有一个名为“ content ”的房间表,其 双人间 属性为“ archivedCount ”。在该应用程序的最新版本中,仍将属性 archivedCount 属性重命名为 dismissCount ,仍为 Double 类型 。 原始内容模型 新内容模型 尝试的解决方案 阅读了Go

  • 我正在尝试重命名数据库中表中的列。我已经试过了 我收到了一个错误回复,回复是-;请问这句话的正确语法是什么?谢谢

  • 问题内容: 我有一个使用pandas和列标签的,我需要对其进行编辑以替换原始列标签。 我想在原始列名称为的 中更改列名称: 至 我已经将编辑后的列名存储在列表中,但是我不知道如何替换列名。 问题答案: 只需将其分配给属性:

  • 我试图将我的应用程序上传到Play Store,但谷歌不允许应用程序包含名称为“example.xxxxx”的软件包。我的问题是,我的包叫做“com.example.mainActivity”,我已经尝试重命名它了,但我对IntelliJ所能做的就是将部件重命名为“mainActivity”。“榜样”依旧。在尝试通过进入清单并用不同的名称重构它来更改示例之后,IntelliJ刚刚用新名称创建了一个