创建Oracle NoSQL表时报错missing ')' 如何排查解决?
错误原因
该报错是建表语句的主键定义不符合Oracle NoSQL的语法规则导致的:
Oracle NoSQL要求PRIMARY KEY子句中,shard()包裹的分片键必须作为主键的最左前缀,不能有普通主键列放在分片键前面。你当前写的primary key(id, shard(subId, startTime))把普通主键列id放在了分片键前面,解析器无法识别该结构,误以为主键定义提前结束缺少闭合括号,因此抛出语法错误。
解决方案
根据你的业务分片需求选择对应方案调整即可:
- 方案1:如果需要将
id也纳入分片维度,调整分片键包裹范围即可
"create table if not exists " + TABLE_NAME + "(id string, " + "subId string, " + "startTime timestamp(4), " + "timeId string, " + "primary key(shard(id, subId, startTime)))";
- 方案2:如果分片维度仅需要
subId和startTime,调整主键顺序把分片键放在最前面
"create table if not exists " + TABLE_NAME + "(id string, " + "subId string, " + "startTime timestamp(4), " + "timeId string, " + "primary key(shard(subId, startTime), id))";
内容的提问来源于stack exchange,提问作者devappsnosql75
相关产品推荐
相关产品推荐

