java - Exception in thread "main" com.datastax.driver.core.exceptions.InvalidQueryException: Unknown definition referenced in PRIMARY KEY -
i trying create tables in cassandra using java api.
this query works , creates table.
string query = "create table if not exists topquery1(term text , " +"year text , " +"month text , " +"day text , " +"hour text , " +"count counter," +"primary key (\"term\", \"year\", \"month\", \"day\", \"hour\" ));";
but when execute following query throws error.
string query = "create table if not exists topquery2(term text , " +"year text , " +"month text , " +"day text , " +"hour text , " +"dayofyear int , " +"weekofyear int , " +"productcount int , " +"count counter," +"primary key (\"term\", \"year\", \"month\", \"day\", \"hour\", \"dayofyear\", \"weekofyear\", \"productcount\"));";
this error :
exception in thread "main" com.datastax.driver.core.exceptions.invalidqueryexception: unknown definition dayofyear referenced in primary key @ com.datastax.driver.core.exceptions.invalidqueryexception.copy(invalidqueryexception.java:35) @ com.datastax.driver.core.defaultresultsetfuture.extractcausefromexecutionexception(defaultresultsetfuture.java:289) @ com.datastax.driver.core.defaultresultsetfuture.getuninterruptibly(defaultresultsetfuture.java:205) @ com.datastax.driver.core.abstractsession.execute(abstractsession.java:52) @ com.datastax.driver.core.abstractsession.execute(abstractsession.java:36) @ createtable.main(createtable.java:81) caused by: com.datastax.driver.core.exceptions.invalidqueryexception: unknown definition dayofyear referenced in primary key @ com.datastax.driver.core.responses$error.asexception(responses.java:103) @ com.datastax.driver.core.defaultresultsetfuture.onset(defaultresultsetfuture.java:140) @ com.datastax.driver.core.requesthandler.setfinalresult(requesthandler.java:293) @ com.datastax.driver.core.requesthandler.onset(requesthandler.java:455) @ com.datastax.driver.core.connection$dispatcher.messagereceived(connection.java:734) @ org.jboss.netty.channel.simplechannelupstreamhandler.handleupstream(simplechannelupstreamhandler.java:70) @ org.jboss.netty.handler.timeout.idlestateawarechannelupstreamhandler.handleupstream(idlestateawarechannelupstreamhandler.java:36) @ org.jboss.netty.channel.defaultchannelpipeline.sendupstream(defaultchannelpipeline.java:564) @ org.jboss.netty.channel.defaultchannelpipeline$defaultchannelhandlercontext.sendupstream(defaultchannelpipeline.java:791) @ org.jboss.netty.handler.timeout.idlestatehandler.messagereceived(idlestatehandler.java:294) @ org.jboss.netty.channel.simplechannelupstreamhandler.handleupstream(simplechannelupstreamhandler.java:70) @ org.jboss.netty.channel.defaultchannelpipeline.sendupstream(defaultchannelpipeline.java:564) @ org.jboss.netty.channel.defaultchannelpipeline$defaultchannelhandlercontext.sendupstream(defaultchannelpipeline.java:791) @ org.jboss.netty.channel.channels.firemessagereceived(channels.java:296) @ org.jboss.netty.handler.codec.oneone.onetoonedecoder.handleupstream(onetoonedecoder.java:70) @ org.jboss.netty.channel.defaultchannelpipeline.sendupstream(defaultchannelpipeline.java:564) @ org.jboss.netty.channel.defaultchannelpipeline$defaultchannelhandlercontext.sendupstream(defaultchannelpipeline.java:791) @ org.jboss.netty.channel.channels.firemessagereceived(channels.java:296) @ org.jboss.netty.handler.codec.frame.framedecoder.unfoldandfiremessagereceived(framedecoder.java:462) @ org.jboss.netty.handler.codec.frame.framedecoder.calldecode(framedecoder.java:443) @ org.jboss.netty.handler.codec.frame.framedecoder.messagereceived(framedecoder.java:303) @ org.jboss.netty.channel.simplechannelupstreamhandler.handleupstream(simplechannelupstreamhandler.java:70) @ org.jboss.netty.channel.defaultchannelpipeline.sendupstream(defaultchannelpipeline.java:564) @ org.jboss.netty.channel.defaultchannelpipeline.sendupstream(defaultchannelpipeline.java:559) @ org.jboss.netty.channel.channels.firemessagereceived(channels.java:268) @ org.jboss.netty.channel.channels.firemessagereceived(channels.java:255) @ org.jboss.netty.channel.socket.nio.nioworker.read(nioworker.java:88) @ org.jboss.netty.channel.socket.nio.abstractnioworker.process(abstractnioworker.java:108) @ org.jboss.netty.channel.socket.nio.abstractnioselector.run(abstractnioselector.java:318) @ org.jboss.netty.channel.socket.nio.abstractnioworker.run(abstractnioworker.java:89) @ org.jboss.netty.channel.socket.nio.nioworker.run(nioworker.java:178) @ org.jboss.netty.util.threadrenamingrunnable.run(threadrenamingrunnable.java:108) @ org.jboss.netty.util.internal.deadlockproofworker$1.run(deadlockproofworker.java:42) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1145) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:615) @ java.lang.thread.run(thread.java:745)
i don't understand missing.
column names case-insensitive default, unless enclose them in double quotes.
when define column don't use quotes, it's called dayofyear
:
+"dayofyear int , "
but in primary key definition use quotes, it's looking column called dayofyear
:
+"primary key (... \"dayofyear\" ...)";
either use quotes everywhere or (depending on whether case sensitivity matters).
Comments
Post a Comment