Amazon web services 无法在非空表上创建索引

Amazon web services 无法在非空表上创建索引,amazon-web-services,amazon-qldb,Amazon Web Services,Amazon Qldb,我目前正在AWS QLDB中使用AWS Lambda NodeJS 情况是这样的。 部署服务时,我有第一个表及其索引。因此将创建表和索引。我的问题是,一旦我需要添加新表及其索引;它无法创建索引,因为存在表 即使我的分类账中有一个现有的表,我也能创建新表的解决方法是查询我拥有的表列表 const getTables = async (transactionExecutor: TransactionExecutor) => { const statement = `SELECT name

我目前正在AWS QLDB中使用AWS Lambda NodeJS

情况是这样的。 部署服务时,我有第一个表及其索引。因此将创建表和索引。我的问题是,一旦我需要添加新表及其索引;它无法创建索引,因为存在表

即使我的分类账中有一个现有的表,我也能创建新表的解决方法是查询我拥有的表列表

const getTables = async (transactionExecutor: TransactionExecutor) => {
  const statement = `SELECT name FROM information_schema.user_tables`;
  return await transactionExecutor.execute(statement);
};
然后我有这个条件来检查表是否已经存在

const tables = JSON.stringify(result.getResultList());

            if (
              !JSON.parse(tables).some((object): boolean => object.name === process.env.TABLE_NAME)
            ) {
              console.log('TABLE A NOT EXISTING');
              await createTable(transactionExecutor, process.env.TABLE_NAME);
            }
            if (
              !JSON.parse(tables).some(
                (object): boolean => object.name === process.env.TABLE_NAME_1,
              )
            ) {
              console.log('TABLE B NOT EXISTING');
              await createTable(transactionExecutor, process.env.TABLE_NAME_1);
            }
我不知道如何使用索引,我尝试在QLDB中使用SQL命令,但它不起作用。 我希望你能帮助我


谢谢

我不太确定你的问题是什么,文章标题和正文暗示了不同的东西,但我会尽力回答

首先,QLDB将数据存储在Ion中,而不是JSON中。因此,请使用Ion API来解析数据,而不是JSON API。您的代码之所以能够工作,是因为Ion是JSON的超集,并且结果集不包含JSON未知的类型。因此,例如,如果结果集被更改为包含离子时间戳,那么代码将中断

下一步,实际获取表列表已经完成。只需使用driver.getTableNames

第三,我想您有一个问题,我可以向非空表添加索引吗?。答案是否定的。这是计划的功能,我会在答案可用时更新它。更新:现在你可以了

最后,我想您也会问,是否有一种方法可以像在分类账中列出表一样列出表上的索引。答案是肯定的。在information_schema.user_表中返回的文档如下所示:

{
  tableId:"...",
  name:"THE_TABLE_NAME",
  indexes:[
    {
      expr:"[THE_FIELD_BEING_INDEXED]"
    }
  ],
  status:"ACTIVE"
}

我不太确定你的问题是什么,文章标题和正文暗示了不同的东西,但我会尽我所能回答

首先,QLDB将数据存储在Ion中,而不是JSON中。因此,请使用Ion API来解析数据,而不是JSON API。您的代码之所以能够工作,是因为Ion是JSON的超集,并且结果集不包含JSON未知的类型。因此,例如,如果结果集被更改为包含离子时间戳,那么代码将中断

下一步,实际获取表列表已经完成。只需使用driver.getTableNames

第三,我想您有一个问题,我可以向非空表添加索引吗?。答案是否定的。这是计划的功能,我会在答案可用时更新它。更新:现在你可以了

最后,我想您也会问,是否有一种方法可以像在分类账中列出表一样列出表上的索引。答案是肯定的。在information_schema.user_表中返回的文档如下所示:

{
  tableId:"...",
  name:"THE_TABLE_NAME",
  indexes:[
    {
      expr:"[THE_FIELD_BEING_INDEXED]"
    }
  ],
  status:"ACTIVE"
}

问题到底是什么?我不确定我是否理解。我无法为我的新表创建新索引,因为已有索引。问题到底是什么?我不确定我是否理解。我无法为我的新表创建新索引,因为已有索引。