微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

dynamodb PartiQL SELECT 查询返回 ValidationException: Unexpected from source

如何解决dynamodb PartiQL SELECT 查询返回 ValidationException: Unexpected from source

我正在使用 Amplify 使用 dynamodb 的放大蓝图设置具有相应 lambda 的 dynamodb。

使用 KeyConditionExpression 等以“经典”方式访问 dynamodb 工作得很好,但今天我想尝试使用 PartiQL 代替 executeStatement,但我无法让它工作。

我已将“dynamodb:PartiQLSelect”权限添加到 cloudfront 模板,其中所有其他 dynamodb 权限如下所示:

 "Action": [
                "dynamodb:DescribeTable","dynamodb:GetItem","dynamodb:Query","dynamodb:Scan","dynamodb:PutItem","dynamodb:UpdateItem","dynamodb:DeleteItem","dynamodb:PartiQLSelect"
              ],

并且我没有收到任何权限错误,所以我希望这部分没问题,但是即使没有添加该行,它也会返回相同的错误

总是返回的错误是: ValidationException:来自源的意外"

无论我尝试过什么,都无济于事。 到目前为止,我的代码非常基本:

const dynamodb2 = new AWS.DynamoDB();

let tableName = "habits_sensors";
if(process.env.ENV && process.env.ENV !== "NONE") {
  tableName = tableName + '-' + process.env.ENV;
}

app.get(path,function(req,res) {
  let params = {
    Statement: `select * from ${tableName}`
  };

  dynamodb2.executeStatement(params,(err,data) => {
    if (err) {
      res.statusCode = 500;
      res.json({error: `Could not get users from : ${tableName} =>` + err});
    } else {
      res.json(data.Items);
    }
  });
});

从 lambda 返回的完整错误字符串是:

{
    "error": "Could not get users from : habits_sensors-playground =>ValidationException: Unexpected from source"
}

并且我在我的 AWS 账户中有表习惯_传感器-游乐场,我可以毫无问题地以经典方式访问它。这就是为什么“来自源头的意外”令人困惑。我将其解释为 select 查询中的 tableName (in from) 不正确,但名称与我在 AWS 中的名称相匹配,并且它使用 documentclient 工作。

非常感谢任何关于可能出错的建议。

解决方法

回答我自己,以防其他人最终来到这里。

我收到 AWS 的回复,如果表名包含破折号,则在使用 PartiQL 时需要用双引号引用表名(我曾尝试过单引号,但没有奏效)。

这可能会在 PartiQL 的未来版本中改变。

,

异常 ValidationException: Unexpected from source (CLI: An error occurred (ValidationException) when calling the ExecuteStatement operation: Unexpected from source) 在表名包含破折号且没有被引用时发生。

所以改变

aws dynamodb execute-statement --statement "SELECT * FROM my-table WHERE field='string'"

致:

aws dynamodb execute-statement --statement "SELECT * FROM \"my-table\" WHERE field='string'"

或在您用于使用 PartiQL 的 SDK 中的表名周围添加双引号 "

注意WHERE string='value'使用单引号',表名需要双引号"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?