QLDB 唯一字段

Alk*_*lko 5 amazon-qldb partiql

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

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

Mat*_*ope 4

根据QLDB PartiQL 参考

Amazon QLDB 不支持所有 PartiQL 操作。

参考CREATE TABLE文档说,

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

因此,逻辑结论是 QLDB 不支持UNIQUE对您在表中定义的任何字段进行约束。

QLDB教程证实了这一点

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

重要的

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

QLDB保证唯一的唯一字段是documentId.

编辑:

您可以强制应用程序的唯一性。就是这样:

  1. 开始交易
  2. 执行SELECT id FROM myTable By id WHERE myUniqueField = ?
  3. 确定该值的记录是否已存在myUniqueField
  4. 插入新文档(如果值唯一)或返回现有文档(如果需要)
  5. 提交交易。(从技术上讲,这可以与上一步合并。)

您只能在空表上创建索引,因此您可能应该抢先为此字段创建索引,而不是等到出现性能问题时才创建,因为 QLDB 正在执行全表扫描。

编辑:

截至2020年9月30日,QLDB支持为非空表添加索引。