如何获取aws-dynamoDB中的所有字段?

时间:2017-07-03 08:14:48

标签: node.js amazon-web-services amazon-dynamodb

我正在使用Node.js

var AWS = require('aws-sdk');

AWS.config.update({
  region: "region",
  endpoint: "https://dynamodb.region.amazonaws.com"
});
var dynamodb = new AWS.DynamoDB();
    var params = {
      TableName: "acc_new"
    };

    dynamodb.describeTable(params, function(err, data) {
        if (err) console.log(err, err.stack); // an error occurred
       else     console.log(JSON.stringify(data));
    });

输出:

{ AttributeDefinitions: [ { AttributeName: 'Id', AttributeType: 'S' } ],
  TableName: 'acc_new',
  KeySchema: [ { AttributeName: 'Id', KeyType: 'HASH' } ],
  ProvisionedThroughput: { ReadCapacityUnits: 5, WriteCapacityUnits: 5 } }

输出仅包含与表关联的关键模式(仅限哈希和范围键),而不是所有属性。我想获取与表中数据相关的所有属性。

像:

 { AttributeName: 'AccountName', AttributeType: 'S' }
 { AttributeName: 'CreatedBy', AttributeType: 'S' }
 ...
 ...

有没有办法获取DynamoDb表及其所有数据字段的描述。

3 个答案:

答案 0 :(得分:1)

DynamoDB是一个NoSQL数据库。在创建表时,它并不期望在表中定义所有属性。此外,每个项目可以具有任意数量的非关键属性。只有关键属性在表中的所有项目中是通用的或必需的。

由于上述原因,描述表不能提供表中的所有属性。

答案 1 :(得分:1)

目前尚无常规方法,但是如果您确实需要这样做,我将按照以下方法进行操作:

  1. 在具有1列并带有PK的SQL DB中创建一个数据库表。
  2. 使用AWS Pipeline将DynamoDB表中的所有数据提取到S3存储桶中。
  3. 创建一个Lambda函数,当将文件存储到S3存储桶时会触发该函数。
  4. lambda函数将执行以下操作:

    • 从(1)中创建的SQL数据库中检索所有行
    • 解析触发它的文件
    • 从每一行中提取所有列名,一次提取一列
    • 将列名与在SQL DB表中找到的列名进行比较。如果未找到,则将它们插入SQL DB。显然重复会违反PK,所以请准备好处理该错误。

几天或更长时间(取决于行数),您将把DynamoDB表中的所有列名存储在SQL DB中。

答案 2 :(得分:0)

对于上述情况,无法列出表中的所有属性。由于Dynamodb是NoSql,因此事先定义了数据库属性,因此在创建表时只定义了散列键和范围键。