我正在尝试在Cassandra中为表实现各种分区。我的基本想法是给每一行分配一些磁盘编号,然后根据它们的磁盘编号将它们放在不同的视图中。对于循环分部,这是我正在做的:
System.out.println("nnRR PARTITIONINGnn");
results = session.execute("select * from user;");
int i=0, disk_no=0, total_disks=4;
for(Row row: results)
{
String emailid = row.getString("email");
disk_no = i++%total_disks;
session.execute("update user set disk_no="+disk_no+" where email="+emailid+";");
System.out.println("Disk "+disk_no+ ": "+ row.getString("firstname")+" "+row.getString("lastname")+" "+ row.getInt("age"));
}
session.execute("create materialized view RRDisk0 as select * from user where disk_no =0 and email is not null;");
session.execute("create materialized view RRDisk1 as select * from user where disk_no =1 and email is not null;");
session.execute("create materialized view RRDisk2 as select * from user where disk_no =2 and email is not null;");
session.execute("create materialized view RRDisk3 as select * from user where disk_no =3 and email is not null;");
我面临的错误说:
Exception in thread "main" com.datastax.driver.core.exceptions.SyntaxError: line 1:44 no viable alternative at character '@'
请帮助我,我已经工作了两个小时,无法确定出了什么问题。
您忘记在更新查询中引用 emailid
值。这应该是:
`session.execute("update user set disk_no="+disk_no+" where email='"+emailid+"';");`