QLDB唯一字段

时间:2019-12-19 10:42:19

标签: amazon-qldb partiql

我想在QLDB中创建一个唯一字段。我尝试使用UNIQUE,但得到:

unexpected token found, KEYWORD : unique; Unexpected token following CREATE

2 个答案:

答案 0 :(得分:2)

根据QLDB PartiQL Reference

  

Amazon QLDB不支持所有PartiQL操作。

然后CREATE TABLE参考文档说

  

QLDB支持开放内容,并且不强制执行模式,因此在创建表时您无需定义属性或数据类型。 [强调我的]

因此,合乎逻辑的结论是QLDB不支持您在表中定义的任何字段上的playSound("/audio/bot.wav"); 约束。

这已由QLDB tutorial确认

  

INSERT语句创建版本号为零的文档的初始修订版。为了唯一地标识每个文档,QLDB分配了一个文档ID作为元数据的一部分。

     

重要

     

由于QLDB不执行架构,因此可以多次将同一文档插入表中。每个插入语句都会向日记提交一个单独的文档条目,并且QLDB为每个文档分配一个唯一的ID。

保证唯一的唯一字段是UNIQUE

答案 1 :(得分:1)

根据Matthew Pope的回答,QLDB当前不支持架构或唯一索引。

也就是说,在您的应用程序中实现此行为非常容易:

SELECT id FROM foo BY id WHERE attr = ? -- [1]
INSERT INTO foo ?                       -- [2]

在您的应用程序中,您应该断言SELECT查询(1)未找到任何结果,并且仅在断言通过后才运行INSERT语句(2)。

如果竞争事务同时通过断言(1),则仅其中一个事务将提交。另一笔交易将在OCC下失败。

按照书面规定,以上内容是唯一的属性,而不是唯一的 index 。出于性能原因,您可能会desire the attribute be indexed使得SELECT查询(1)不执行表扫描。

CREATE INDEX ON foo (attr)