Search code examples
cassandracassandra-2.0cassandra-cli

Non-EQ relation error Cassandra - how fix primary key?


I created a one table posts. When I make request SELECT:

return $this->db->query('SELECT * FROM "posts" WHERE "id" IN(:id) LIMIT '.$this->limit_per_page, ['id' => $id]);

I get error:

PRIMARY KEY column "id" cannot be restricted (preceding column "post_at" is either not restricted or by a non-EQ relation)

My table dump is:

CREATE TABLE posts (
  id       uuid,
  post_at  timestamp,
  user_id  bigint,
  name     text,
  category set<text>,
  link     varchar,
  image    set<varchar>,
  video    set<varchar>,
  content  map<text, text>,
  private  boolean,
  PRIMARY KEY (user_id,post_at,id)
  )
  WITH CLUSTERING ORDER BY (post_at DESC);

I read some article about PRIMARY AND CLUSTER KEYS, and understood, when there are some primary keys - I need use operator = with IN. In my case, i can not use a one PRIMARY KEY. What you advise me to change in table structure, that error will disappear?


Solution

  • My dummy table structure

    CREATE TABLE posts (
      id       timeuuid,
      post_at  timestamp,
      user_id  bigint,
      PRIMARY KEY (id,post_at,user_id)
      )
      WITH CLUSTERING ORDER BY (post_at DESC);
    

    And after inserting some dummy data

    I ran query select * from posts where id in (timeuuid1,timeuuid2,timeuuid3);

    I was using cassandra 2.0 with cql 3.0