"Spanner操作失败"创建NULL_FILTERED索引

dsq*_*ier 5 database google-cloud-platform google-cloud-spanner

我无法在Cloud Spanner表上创建索引,收到错误"Spanner operation failed".

即使将簇大小增加到6到16个节点,我也无法在~1200万行表上创建两个索引.

扳手操作失败

我做了什么:

  • objects在3节点集群上的Spanner中创建表
  • 表具有10-12列组成的STRING,INT64以及一个ARRAY<STRING>
  • 主键是两列; 分片值(散列object_id)和object_id
  • 加载~1200万行
  • 加载时表没有索引(主键除外)
  • 加载挂钩3节点; 升级到6个节点

我尝试了什么:

  • 试图建立三个索引(通过控制台中的DDL) - 收到"扳手操作失败"
  • Spanner节点数从6 - >增加到12,
  • 能够构建3个索引中的1个(UNIQUE在单列STRING上)
  • 试图构建其他两个索引(UNIQUE NULL_FILTERED在单列STRING上) - 收到"扳手操作失败"
  • 从12 - > 16(最大帐户)增加Spanner节点
  • 试图构建其他两个索引(UNIQUE NULL_FILTERED在单列STRING上) - 收到"扳手操作失败"

我还尝试了什么(更新):

  • 删除了NULL_FILTERED子句并尝试构建其他两个索引.没有解决,仍然无法建立.

dsq*_*ier 5

来自GCS的回复:

我们的产品团队能够找到无法创建索引的原因.如图所示,在数据中,您有两个不唯一的条目,因此会创建唯一性违规[1]并阻止创建索引.在索引尝试之前抛出此错误,这就是索引创建在尝试之前失败的原因.

您可以使用查询来查找重复的条目:

SELECT column, count(column) 
FROM table
GROUP BY column
HAVING COUNT(column) > 1
Run Code Online (Sandbox Code Playgroud)

您可以修改此查询以同时搜索所有键,或在每次搜索后修改它.一旦处理了重复项,您应该能够管理这些条目并再次运行索引创建.


我希望Spanner团队可以修复此错误并在将来的版本中返回正确的错误.