【问题标题】:How to get all fields present in aws-dynamoDB?如何获取 aws-dynamoDB 中存在的所有字段?
【发布时间】:2019-01-29 04:29:59
【问题描述】:

我正在使用 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 表及其所有数据字段的描述。

【问题讨论】:

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


【解决方案1】:

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

由于上述原因,describe 表无法提供表中存在的所有属性。

【讨论】:

    【解决方案2】:

    没有传统的方法可以做到这一点,但如果你真的需要这样做,我会这样做:

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

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

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

    【讨论】:

      【解决方案3】:

      对于上述情况,不可能列出表中的所有属性。因为Dynamodb是NoSql数据库属性是预先定义好的,所以在建表的时候只定义了hash key和range key。

      【讨论】:

      • 你的意思是没有预先定义属性。
      猜你喜欢
      • 2016-05-07
      • 1970-01-01
      • 2017-11-19
      • 2023-02-21
      • 2017-01-24
      • 2021-10-09
      • 2022-06-11
      • 2022-11-23
      • 1970-01-01
      相关资源
      最近更新 更多