Amazon web services Dynamo DB表中的Drop列

Amazon web services Dynamo DB表中的Drop列,amazon-web-services,amazon-dynamodb,aws-sdk,Amazon Web Services,Amazon Dynamodb,Aws Sdk,我一直在浏览AWS Dynamo DB文档和Amazon Dynamo界面,除了删除整个表及其内容并重新开始之外,似乎没有办法从表中删除列,这是真的吗 如果是这样,为什么Amazon不支持此操作?尝试删除该列中的所有数据,它将自动删除该列DynamoDB API中有一个操作 将列值的所有实例设置为null将清除该列 在C#中,此方法使用持久性框架完成以下任务: static void RemoveColumn() { var myItems = context.ScanAsync<

我一直在浏览AWS Dynamo DB文档和Amazon Dynamo界面,除了删除整个表及其内容并重新开始之外,似乎没有办法从表中删除列,这是真的吗


如果是这样,为什么Amazon不支持此操作?

尝试删除该列中的所有数据,它将自动删除该列

DynamoDB API中有一个操作

将列值的所有实例设置为null将清除该列

在C#中,此方法使用持久性框架完成以下任务:

static void RemoveColumn()
{
    var myItems = context.ScanAsync<MyObjectType>(null).GetRemainingAsync().Result;

    // Foreach item, update
    myItems.ForEach(myObject =>
    {
        myObject.UnwantedColumn = null;
        context.Save(myObject);
    });
}
static void RemoveColumn()
{
var myItems=context.ScanAsync(null).GetRemainingAsync().Result;
//Foreach项目,更新
myItems.ForEach(myObject=>
{
myObject.UnwantedColumn=null;
保存(myObject);
});
}

使用带有javascript的文档客户端,我们可以做到:

const paramsUpdate = {
       TableName: tableName,
       Key: { HashKey: 'hashKey' },
       UpdateExpression: 'remove #c ',
       ExpressionAttributeNames: { '#c': 'columnName' }
};
documentClient.update(paramsUpdate, (errUpdate) => {
       if (errUpdate) log.error(errUpdate);
});

在这里,我们使用remove语句设置UpdateExpression

DynamoDB没有模式定义,因此没有“列”这样的东西。这还意味着,如果不遍历每条记录,就无法删除具有相同名称的所有属性

我推荐的解决方案是保留这些属性,并使代码使用新的属性名称引用相同的数据


例如,属性
content
可以变成
content\u v2
。它看起来可能不那么干净,但它便宜、快捷,而且可以备份旧数据。

除了必需的主键外,DynamoDB表没有模式。在此上下文中,“删除列”是什么意思?例如,如果您在界面中浏览表中的项目,则其中有表的列(属性)。事实上,在右上角有一个按钮,标签上写着“从浏览项目视图中显示或隐藏属性(列)”啊,我理解你现在说的。它看起来更像是一个方便的UI工具,可以查看各个属性。执行此操作的唯一方法是使用包含要筛选的项的执行
扫描
,然后请求更新该项并删除该属性。明白了。是的,我非常希望在迪纳摩的土地上事情会有所不同,但他们的界面传达了一种可能的SQL方式:)谢谢!这在AWS浏览器中起作用。(尽管您需要关闭表并重新打开以查看更改。)